1、新建Excel文档,准备好测试数据

在当前工程的resources目录下,新建文件名为testdata的Excel文档

打开Excel,将当前sheet重命名为calculator,构造num1、num2、result三个参数数据 

2、新建一个ExcelData类用来获取Excel中的数据

ExcelData类需要引入jxl.jar包,jxl.jar是专门处理excel中数据的,代码如下:

package com.mcj.testng;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException; public class ExcelData {
public Workbook workbook;
public Sheet sheet;
public Cell cell;
int rows;
int columns;
public String fileName;
public String caseName;
public ArrayList<String> arrkey = new ArrayList<String>();
String sourceFile; /**
* @param fileName excel文件名
* @param caseName sheet名
*/
public ExcelData(String fileName, String caseName) {
super();
this.fileName = fileName;
this.caseName = caseName;
} /**
* 获得excel表中的数据
*/
public Object[][] getExcelData() throws BiffException, IOException { workbook = Workbook.getWorkbook(new File(getPath()));
sheet = workbook.getSheet(caseName);
rows = sheet.getRows();
columns = sheet.getColumns();
// 为了返回值是Object[][],定义一个多行单列的二维数组
HashMap<String, String>[][] arrmap = new HashMap[rows - 1][1];
// 对数组中所有元素hashmap进行初始化
if (rows > 1) {
for (int i = 0; i < rows - 1; i++) {
arrmap[i][0] = new HashMap<>();
}
} else {
System.out.println("excel中没有数据");
} // 获得首行的列名,作为hashmap的key值
for (int c = 0; c < columns; c++) {
String cellvalue = sheet.getCell(c, 0).getContents();
arrkey.add(cellvalue);
}
// 遍历所有的单元格的值添加到hashmap中
for (int r = 1; r < rows; r++) {
for (int c = 0; c < columns; c++) {
String cellvalue = sheet.getCell(c, r).getContents();
arrmap[r - 1][0].put(arrkey.get(c), cellvalue);
}
}
return arrmap;
} /**
* 获得excel文件的路径
* @return
* @throws IOException
*/
public String getPath() throws IOException {
File directory = new File(".");
sourceFile = directory.getCanonicalPath() + "\\src\\resources\\"
+ fileName + ".xls";
return sourceFile;
} }

3、创建TestNg测试类CalculatorExcel

package com.mcj.testng;
import java.io.IOException;
import java.util.HashMap;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import jxl.read.biff.BiffException; public class CalculatorExcel { Calculator cal=new Calculator(); @DataProvider(name="num")
public Object[][] Numbers() throws BiffException, IOException{
ExcelData e=new ExcelData("testdata", "calculator");
return e.getExcelData();
}
@Test(dataProvider="num")
public void testAdd(HashMap<String, String> data){
System.out.println(data.toString());
float num1=Float.parseFloat(data.get("num1"));
float num2=Float.parseFloat(data.get("num2"));
float expectedResult=Float.parseFloat(data.get("result"));
Float actual=cal.add(num1, num2);
Assert.assertEquals(actual, expectedResult);
}
}

4、运行结果

{result=10.4, num2=3.9, num1=6.5} 
{result=7, num2=2, num1=5} 
{result=15, num2=8, num1=7} 
{result=8.8, num2=3.3, num1=5.5} 
{result=-2, num2=3, num1=-5} 
{result=2.6, num2=-2, num1=4.6} 
{result=27, num2=23, num1=4} 
{result=37, num2=12, num1=25} 
PASSED: testAdd({result=10.4, num2=3.9, num1=6.5}) 
PASSED: testAdd({result=7, num2=2, num1=5}) 
PASSED: testAdd({result=15, num2=8, num1=7}) 
PASSED: testAdd({result=8.8, num2=3.3, num1=5.5}) 
PASSED: testAdd({result=-2, num2=3, num1=-5}) 
PASSED: testAdd({result=2.6, num2=-2, num1=4.6}) 
PASSED: testAdd({result=27, num2=23, num1=4}) 
PASSED: testAdd({result=37, num2=12, num1=25})

=============================================== 
Default test 
Tests run: 8, Failures: 0, Skips: 0

最新文章

  1. easyUI的基础布局easyui-accordion
  2. Office 365 系列三 ------ 创建Office 365普通账号
  3. 提高Oracle的WHERE语句性能一些原则
  4. ORACLE 总结
  5. Linux基础知识-文件管理
  6. bat文件的妙用1-一键开启所有开发软件
  7. css3中matrix函数的使用
  8. vscode: Visual Studio Code 常用快捷键
  9. JavaScript严格模式有什么不同
  10. c++の奇技淫巧
  11. 51nod 1204 Parity(并查集应用)
  12. [Swift]LeetCode186. 翻转字符串中的单词 II $ Reverse Words in a String II
  13. day02 运算符
  14. Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
  15. 【Luogu4609】建筑师(第一类斯特林数,组合数学)
  16. 【Python】Flask系列-数据库笔记
  17. 通过Spannable对象设置textview的样式
  18. HDU-1394 Minimum Inversion Number(线段树求逆序数)
  19. Eclipse 汉化方法
  20. 给iOS开发新手送点福利,简述UITableView的属性和用法

热门文章

  1. Under what conditions should the &#39;start_udev&#39; command be run?
  2. Octave中的一些常用操作
  3. Paper慢慢读 - AB实验人群定向 Learning Triggers for Heterogeneous Treatment Effects
  4. 整理几个经常在H5移动端开发遇到的东西。
  5. SpringBootTest MockMVC绑定session(需要登陆的接口)
  6. Java 类加载机制(阿里)-何时初始化类
  7. C#命名规则和设计规则
  8. 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏
  9. Vue-router中的history模式和hash模式
  10. XML的互相序列化对象