我有一个Excel电子表格,其中存储了所有测试信用卡。这些信用卡有不同的类型。其中一些是VISA,其他是MasterCard,Amex等......
我有一个测试用例,其中我有时想要使用VISA卡,有时还想使用万事达卡。
是否可以将参数传递给@DataProvider?
这是我的@DataProvider代码:
@DataProvider(name="dpCreditCards")
public Object[][] getCreditCards() {
Object[][] testData = null;
try {
FileInputStream fis = new FileInputStream(dir);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet worksheet = workbook.getSheet("Credit Cards");
String type = "";
String cardNumber = "";
int numOfRows = worksheet.getPhysicalNumberOfRows();
int j = 0;
if (numOfRows > 0) {
for (int i = 1; i < numOfRows; i++) {
XSSFRow r = worksheet.getRow(i);
if (r.getCell(0).getCellType() == Cell.CELL_TYPE_NUMERIC) {
type = Integer.toString((int)r.getCell(0).getNumericCellValue());
} else if (r.getCell(0).getCellType() == Cell.CELL_TYPE_STRING) {
type = r.getCell(0).getStringCellValue();
}
if (type.equalsIgnoreCase("visa"))
j++;
}
testData = new Object[j][1];
}
for (int i = 1; i < numOfRows; i++) {
XSSFRow r = worksheet.getRow(i);
if (r.getCell(0).getCellType() == Cell.CELL_TYPE_NUMERIC) {
type = Integer.toString((int)r.getCell(0).getNumericCellValue());
} else if (r.getCell(0).getCellType() == Cell.CELL_TYPE_STRING) {
type = r.getCell(0).getStringCellValue();
}
if (type.equalsIgnoreCase("visa")) {
if (r.getCell(1).getCellType() == Cell.CELL_TYPE_NUMERIC) {
cardNumber = Integer.toString((int)r.getCell(1).getNumericCellValue());
} else if (r.getCell(1).getCellType() == Cell.CELL_TYPE_STRING) {
cardNumber = r.getCell(1).getStringCellValue();
}
testData[i-1][0] = cardNumber;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return testData;
}
我已查看此链接:http://testng.org/doc/documentation-main.html#parameters-dataproviders但找不到任何对我有用的内容。它建议将Method m作为参数传递给数据提供者,但我找不到一个有用的方法。
提前致谢
答案 0 :(得分:1)
一种方法是读取侦听器中的参数,然后设置可在dataprovider中使用的属性。
实施ITestListener或ISuiteListener,具体取决于您构建测试的方式。在任何onStart方法中设置全局卡属性或threadlocal属性(同样取决于顺序/并行运行测试的方式)。
在数据提供者中阅读此属性。
答案 1 :(得分:0)
如果您只想测试数据的子集,可以在数据提供商中对其进行过滤。
如果要对不同的数据子集应用不同的测试,则可以为每种测试方法使用不同的数据提供程序。或者您可以使用tbe Method
参数来决定从数据提供者返回的数据。
如果您希望能够在运行时配置要为测试加载的数据类型,可以使用env变量/系统属性。
底线:
如果针对不同的数据子集运行相同的测试,则有多种方法可以指定要检查的子集
如果您想针对不同的数据子集运行不同的测试,那么您应该选择多个数据提供商