设定:
@Test(dataProvider = "getData")
注释的方法。问题:
我需要使用一行数据运行所有方法(测试),但截至目前,它继续对所有行重复相同的测试,即如果有7行数据则测试1将运行7次然后进行第二次测试将开始,第二次测试也是如此,等等。
我希望所有测试都针对第1行运行,然后所有测试再次针对第2行运行。
我正在使用Apache poi API从ms-excel表中读取数据。 Java,testng和Selenium在Windows上自动化浏览器。
我访问过以下链接但未获得实施:
https://dzone.com/articles/testng-run-tests-sequentially
答案 0 :(得分:2)
Factory允许动态创建测试。
假设这是当前的设置......
SequentialTest.java - 示例部分
@Test(dataProvider="dp")
public void firstTest(int id, String account) {
System.out.println("Test #1 with data: "+id+". "+account);
}
Data.java - 示例部分
@DataProvider(name="dp")
public static Object[][] dataProvider() {
Object[][] dataArray = { {1, "user1"}, {2, "user2"} };
return dataArray;
}
也许你有同一类的数据提供者。
testng.xml - 相关部分
< test name = "checks">
< classes >
< class name="....Sequential" />
< /classes >
< /test>
根据文章,类和xml中需要进行更改。
SequentialTest.java - 为之前传递给测试方法的每个参数创建实例变量。 使用实例变量创建构造函数。 从Test annotation中删除dataprovider部件。 从测试方法中删除参数。
private int id;
private String account;
public SequentialTest(int id, String account) {
this.id = id;
this.account = account;
}
@Test
public void firstTest() {
System.out.println("Test #1 with data: "+id+". "+account);
assertTrue(true);
}
Data.java - 需要将dataprovider方法分成单独的类(如果还没有)并将工厂方法添加到其中。数据提供者保持不变。
@Factory(dataProvider="dp")
public Object[] createInstances(int id, String account) {
return new Object[] {new SequentialTest(id, account)};
}
testng.xml - 删除现有部分。只需要提及包含Factory方法的类的名称。最重要的是添加group-by-instances="true"
参数,它将为您提供所需的行为。
< test name="fact" group-by-instances="true">
< classes>
< class name="....Data"/>
< classes/>
< /test>
答案 1 :(得分:0)
在编写数据提供者时,可以向数据提供者添加属性“索引”。对于前
//Define the index you want to return it to. Here it will return first row
@DataProvider(name = "dataProviderSample", indices = {0})
public Object[][] getSelectedData() {
return getInputData();
}
// Write your logic to generate data form excel/csv/json/xml inside the below method
private static Object[][] getInputData() {
return new Object[][]{{"Sample1", "Sample1", "Sample1"},
{"Sample2", "Sample2", "Sample2"},
{"Sample3", "Sample3", "Sample3"},
{"Sample4", "Sample5", "Sample5"}
};
}
通过上述方法,您可以在测试方法中传递预期的索引。
@Test(dataProvider = "dataProviderSample")
void testDataProvider(String fname, String lName, String num) {
System.out.println(fname);
System.out.println(lName);
System.out.println(num);
}
因此,通过使用此方法,您可以在所有测试方法中一次传递一行。但是如果你想在测试方法中传递所有的dataprovider行。