我有一个Excel Util,可以从excel工作表中读取所有数据。 Excel工作表包含10列,例如时间,sourceType,tid,消息,严重性, 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;
}
在我的TestMethod中,我必须传递所有这10列,否则它将不允许我运行。相反,我想创建一个Bean类并将类似的内容传递给我的测试方法
@Test(dataProvider = "googleData", dataProviderClass = DataProviders.class)
public void testGoogleData(BeanClass object) {
System.out.println(object.getTid());
}
我们如何实现这一目标?
答案 0 :(得分:0)
使用您拥有的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());
}
答案 1 :(得分:0)
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")
答案 2 :(得分:0)
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
的{{1}}或具有Map的Object [] []返回Iterator,如果需要创建自定义数据提供程序,请参考few example。