这部分直接用二维数组,涉及到传参优化。
1、数据提供的类
package dao;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.annotations.DataProvider;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @author wangyan
* @date 2019-02-20 下午 04:55
*/
//这里是数据提供者,调用mapDataProvider方法
public class DataProviderSet_xlsx {
@DataProvider(name="mapDataProvider")
public static Object[][] words() throws IOException
{
return mapDataProvider("D:\\work_space\\resources", "testdata.xlsx", "test");
}
public static Object[][] mapDataProvider(String filePath,String fileName,String sheetName) throws IOException {
// fileName="testdata";
// sheetName="test";
// File file=new File(filePath+"\\"+fileName);
// FileInputStream input=new FileInputStream(file);
Workbook workbook=null;
String fileExtensionName=fileName.substring(fileName.indexOf("."));
InputStream in=null;
DataFormatter dataFormatter=new DataFormatter();
in = DataProviderSet_xlsx.class.getClassLoader().getResourceAsStream(fileName);
if (fileExtensionName.equalsIgnoreCase(".xlsx")) {
workbook = new XSSFWorkbook(in);
} else if (fileExtensionName.equalsIgnoreCase(".xls")) {
workbook = new HSSFWorkbook(in);
}
//获取sheet
Sheet sheet = workbook.getSheet(sheetName);
//获取总行数
int row = sheet.getLastRowNum() - sheet.getFirstRowNum();
List<Object[]> records = new ArrayList<Object[]>();
for (int i = 1; i < row + 1; i++) {
Row rowValue = sheet.getRow(i);
String[] files = new String[rowValue.getLastCellNum()];
List<Cell> cells=null;
for (int j = 0; j < rowValue.getLastCellNum(); j++) {
files[j]=dataFormatter.formatCellValue(rowValue.getCell(j));
}
records.add(files);
}
System.out.println("records"+records.get(0));
Object[][] results = new Object[records.size()][];
for (int i = 0; i < records.size(); i++) {
results[i] = records.get(i);
}
return results;
}
}
2、测试类,获取数据`
package configSelenium.Assert;
import dao.DataProviderSet_xlsx;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.*;
/**
* @author wangyan
* @date 2019-02-18 下午 04:55
*
*/
public class sql {
@Test(dataProvider = "mapDataProvider",dataProviderClass = DataProviderSet_xlsx.class)
public void testMapDataProviderFromExcel(String var1,String var2,String var3){
System.out.println("var1:"+var1+"\nvar2:"+var2+"\nvar3:"+var3);
}
}