gpt4 book ai didi

java - 使用 TestNG DataProvider 跳过某些测试迭代

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:10:37 25 4
gpt4 key购买 nike

我正在使用 TestNG DataProvider 读取一个 datapool.xls 文件,该文件包含 1017 个测试用例和一个名为 ReadData 的类中的 214 列。

然后我将 214 个字符串参数传递到名为 EnterData 的单独类中的 @Test 注释中。

@Test(dataProvider="autodata", dataProviderClass = ReadAutoData.class)
public void autoentry(String Quote, String Garage_Zip, etc...) {

我在 @Test 中创建了一个 for 循环,只执行 ceratin 迭代(比如 1-10)的操作,总共只输入 10 个测试用例就可以了。我的问题是,在运行结束时,它仍然显示“总测试运行:1017”,而不是只有 10 个因为 for 循环而实际做了任何事情。

// Start for loop for entering auto policies
for (int a = start; a <= end; a++)
{
if (quote == a)
{
System.out.println("Tier = " + Tier);
}
}

我明白为什么它将运行的测试总数显示为整个数据池,因为它在技术上传入并运行了数据池中的所有内容,我只是想不通如何只让它显示测试的数量真的跑了。

基本上,我正在寻找一种方法将 @Test 注释本身放入 for 循环中,可能吗?...

编辑:

这是我当前在 ReadAutoData 类中读取数据池的代码:

@DataProvider(name = "autodata")
public static Object[][] autodata() {
Object[][] arrayObject = getExcelData("C:/dev/AutoDP.xls","NON-COMBO-DP");
return arrayObject;
}

/**
* @param File Name
* @param Sheet Name
* @return
*/
public static String[][] getExcelData(String fileName, String sheetName) {
String[][] arrayExcelData = null;
try {
FileInputStream fs = new FileInputStream(fileName);
Workbook wb = Workbook.getWorkbook(fs);
Sheet sh = wb.getSheet(sheetName);

int totalNoOfCols = sh.getColumns();
int totalNoOfRows = sh.getRows();

arrayExcelData = new String[totalNoOfRows-1][totalNoOfCols];

for (int i= 1 ; i < totalNoOfRows; i++) {

for (int j=0; j < totalNoOfCols; j++) {
arrayExcelData[i-1][j] = sh.getCell(j, i).getContents();
}

}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
}
return arrayExcelData;
}

编辑 2:

到目前为止,这是我在 1017 个测试用例中所处的位置,我现在通过在我的 for 循环开头添加以下内容来显示 1007 个跳过:

// Start for loop for entering auto policies
for (int a = start; a <= end; a++)
{
if (quote < start) throw new SkipException("Testing skip.");
if (quote > end) throw new SkipException("Testing skip.");

if (quote == a)
{

System.out.println("Starting Iteration = " + Quote);

但是,它仍然显示 1017 次测试运行。

最佳答案

实现这一目标的唯一方法是了解 TestNG 框架的执行方式。

这意味着:

  1. SkipException 不是解决方案,因为它总是计算所有测试用例,即使它们被跳过也是如此。
  2. 测试的数量是@DataProvider方法返回的行数。

解决方案是从 @DataProvider 注释的方法返回正确数量的测试用例:

public class ReadAutoData {
private static int indexFrom;
private static int indexTo;

@DataProvider(name = "autodata")
public static Object[][] autodata() {
// you should probably cache this into static variable
Object[][] arrayObject = getExcelData("C:/dev/AutoDP.xls","NON-COMBO-DP");

return java.util.Arrays.copyOfRange(arrayObject, indexFrom, indexTo);
}

public Class<?> autoDataWithinRange(int from, int to) {
indexFrom = from;
indexTo = to;

return ReadAutoData.class;
}
}

@Test(dataProvider="autodata", dataProviderClass = ReadAutoData.autoDataWithinRange(0, 10))
public void autoentry(String Quote, String Garage_Zip, etc...) {

如果您没有同时运行测试,这将起作用。如果是,您仍然可以通过使用 ThreadLocal 进行小的修改来使用它。

关于java - 使用 TestNG DataProvider 跳过某些测试迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31303012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com