因为之前做了一个参数化的取 excel 的项目用的是 for 循环一直感觉到不是很完美(不可控的因素很多),这次想利用 testNG 框架来传 excel 的参数
给大家的是一篇关于 java 的教程
废话少说直接上正文:
一,首先整理一个 excel 如图(以下是海尔项目的真实数据打码):
然后理清楚逻辑:TestNG 框架的@DataProvide注释所传输的数据根据下图官方翻译过来的 api 可以判断是 object 的一个二维数组;
那么我们就要把 excel 的数据取到这个二维数组里面就可以通过@DataProvide传递了
二.创建 ExcelTest 类取出 excel 的数据并赋值给二维数组,然后再 return 方便调用
1.excel 取出 excel 的数据需要用到一个 jxl 的 jar 包(jar 包自行百度),然后使用 Workbook api
public class ExcelTest {
int cols; //--定义excel的列
int rows; //定义excel的行
Sheet sheet;
Object[][] obj; //定义一个object的二维数组
int excelIndex; //定义一个int值,这个值是为了去掉excel的列名(第一行的数据不取)
//String ExcelPath
@Test
public Object[][] readUsernamethrows()throws IOException, Exception {
//先得到excel在本地的路径
String ExcelPath = "C://Users//Administrator//Desktop//自动化格式.xls";
//--在获取excel中sheet为“明细”的表
sheet = Workbook.getWorkbook(new FileInputStream(ExcelPath)).getSheet("明细");
// 获取文件的行数
rows = sheet.getRows();
// 获取文件的列数
cols = sheet.getColumns();
excelIndex = rows-1;
//给obj二维数组定义长度
obj = new Object[excelIndex][cols];
//然后通过for循环取出excel表的数据并且给obj赋值******这个取法是因为有列明去掉第一行,如果没有列明的话请自行定义二维数组的长度
for (int y = 0; y < excelIndex; y++) {
for (int x = 0; x < cols; x++) {
obj[y][x] = sheet.getCell(x,y+1).getContents().trim();
System.out.println(obj[y][x]);
}
}
return obj;
}
//就这样 excel 的数据就成功的取出来切赋值给了 obj 二维数组,那么就来实行第二步
三.创建 RunExcel 来调用 ExcelTest 取的数据并传参
public class RunExcel {
//new出来
ExcelTest runtest = new ExcelTest();
@Test(dataProvider = "dataName")
public void runExcel(String a, String b, String c, String d, String e) throws IOException, Exception {
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
@DataProvider(name = "dataName")
public Object[][] Data() throws IOException, Exception {
//调用
return runtest.readUsernamethrows();
}
}
四.输出结果