我有一个如下数据提供者:
@DataProvider(name = "therapistToDoList") public static Object[][] data(){
return new Object[][]{
{"06012017", "Low", "This is a low task description added via automation for therapist/admin."},
{"06012017", "Medium", "This is medium task description added via automation for therapist/admin."},
{"06012017", "High", "This is high task description added via automation for therapist/admin."},
};
}
如何使用此数据提供程序运行我的测试用例,但仅针对一个特定行而不是所有行?
使用testng dataprovider甚至可以实现吗?
答案 0 :(得分:1)
如果您使用该工具,您应该坚持它遵循的意识形态。 DataProviders用于为每个数据行运行测试。
如果您需要一些不同的数据 - 那么创建一个不同的DataProvider。它可以调用初始值并从那里过滤值。甚至更好 - 可能有一个小的DataProvider,然后是一个较大的DataProvider,包含较小的值,并添加自己的行。
答案 1 :(得分:0)
其中一种方法可能是 - 你保留一个计数器并检查你是否已达到目标数据,然后完成任务。
演示代码:
public class TestDemo {
public static int count = 0;
DataProvider(name = "therapistToDoList") public static Object[][] data(){
return new Object[][]{
{"06012017", "Low", "This is a low task description added via automation for therapist/admin."},
{"06012017", "Medium", "This is medium task description added via automation for therapist/admin."},
{"06012017", "High", "This is high task description added via automation for therapist/admin."},
};
}
@Test(dataProvider = "therapistToDoList")
public void testWithSpecificDataFromDataProvider(String a, String b, String c) {
count++;
if(count == 2){//let's say you are interest in 2nd data/row
System.out.println(a + " " + b + " " + c);
break;
}
}
}
答案 2 :(得分:0)
这是一个工作示例,它通过JVM参数从TestNG套件xml文件(或)接受特定行作为选择,然后相应地过滤数据提供程序的行。
public class FilteredDataProviderExample {
@Test (dataProvider = "therapistToDoList")
public void testWithSpecificDataFromDataProvider(String a, String b, String c) {
Assert.assertNotNull(a);
Assert.assertNotNull(b);
Assert.assertNotNull(c);
}
@DataProvider (name = "therapistToDoList")
public static Object[][] data(ITestContext ctx) {
Object[][] data = new Object[][] {
{"06012017", "Low", "This is a low task description added via automation for therapist/admin."},
{"06012017", "Medium", "This is medium task description added via automation for therapist/admin."},
{"06012017", "High", "This is high task description added via automation for therapist/admin."},
};
return filterData(data, ctx.getCurrentXmlTest());
}
private static Object[][] filterData(Object[][] data, XmlTest xmlTest) {
//What if the value was given as a JVM argument.
int rowFromJVM = Integer.parseInt(System.getProperty("row", "-1"));
if (rowFromJVM > 0 && rowFromJVM < data.length) {
return new Object[][] {
data[rowFromJVM]
};
}
int row = - 1;
//Lets check if there was any filtering defined either at the <test> level or at the
//<suite> level.
if (xmlTest.getAllParameters().containsKey("row")) {
row = Integer.parseInt(xmlTest.getParameter("row"));
}
if (row > 0 && row < data.length) {
return new Object[][] {
data[row]
};
}
return data;
}
}