建立:
@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
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方法分离到一个单独的类(如果还没有)并将工厂方法添加到它。 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>
在编写数据提供者时,可以向数据提供者添加属性“索引”。对于前者
//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行。