我有一个Excel Util,它从excel表中读取所有数据。 excel表有10列,如time,sourceType,tid,message,severity,lastModify,entityName,operationType,replayId,recordIds。
我的DataProvider有类似这样的代码,它返回所有10列及其值。
@DataProvider(name="googleData")
public static Object[][] testData() {
String filePath = "/Users/TestUser/Workspace/FixProject/ExcelCheck/src/test/resources/excelreader.xlsx";
Object[][] arrayObject = excelFileUtils.getExcelData(filePath, "excelreader");
return arrayObject;
}
在My TestMethod中,我必须传递所有这10列,否则它不允许我运行。相反,我想创建一个Bean类,并将类似的东西传递给我的测试方法
@Test(dataProvider = "googleData", dataProviderClass = DataProviders.class)
public void testGoogleData(BeanClass object) {
System.out.println(object.getTid());
}
我们如何实现这一目标?
使用您拥有的dataProvider,您的测试方法将为阵列中的每个对象运行10次。
你可以做的是创建一个对象,将dataProvider转换为该对象,而不是使用你的测试方法代码。
Object myDataHelper = null;
@Test()
public void testGoogleData(BeanClass object) {
myDataHelper = convertDataProviderToObject();
// use it here in a for/for each loop
System.out.println(object.getTid());
}
public static Object[][] read_excel(String Sheet_Name) throws Exception
{
File obj = new File("./src/main/java/com/Demo/TestData/Test_Data.xlsx");
FileInputStream fis = new FileInputStream(obj);
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheet(Sheet_Name);
int row_number = sheet.getLastRowNum();
int column_number = sheet.getRow(0).getLastCellNum();
Object data[][] = new Object[row_number][column_number];
wb.close();
for(int i=0; i<row_number; i++)
{
for(int j=0; j<column_number; j++)
{
data[i][j] = sheet.getRow(i + 1).getCell(j).toString();
}
}
return data;
}
@DataProvider
public Object[][] getDataFromExcel() throws Exception
{ Object[][] data = Utility.read_excel("Admin_Credentials");//Sheet name
return data;
}
@Test(dataProvider="getDataFromExcel")
它在QAF-TestNG extension中得到支持。在使用内置或自定义数据提供程序时,您可以在测试方法中使用one or more complex object参数。对于excel,您的代码可能如下所示:
@QAFDataProvider(dataFile = "resources/data/googletestdata.xls")
@Test
public void testGoogleData(BeanClass object) {
System.out.println(object.getTid());
}
对于自定义数据提供程序,它可能如下所示:
@QAFDataProvider
@Test(dataProvider = "googleData", dataProviderClass = DataProviders.class)
public void testGoogleData(BeanClass object) {
System.out.println(object.getTid());
}
您需要确保bean类中的属性名称必须与列名称匹配(按任何顺序)。使用自定义数据提供程序时,需要返回List
的Map<String, Object>
或具有Map的Object [] []的Iterator,如果需要创建自定义数据提供程序,请参阅few example。