设置:
@test(dataProvider=“getData”)
注释的方法。问题:
我需要用一行数据运行所有方法(测试),但到目前为止,它会在所有行上重复相同的测试,即如果有7行数据,那么测试1将运行7次,然后第二次测试将开始,第二次测试也会如此,以此类推。
我希望对第1行运行所有测试,然后对第2行再次运行所有测试。
我正在使用ApachePOIAPI从ms excel工作表中读取数据。Java、testng和Selenium在Windows上实现浏览器的自动化。
我访问了以下链接,但没有得到实现:https://dzone.com/articles/testng-run-tests-sequentially
编写数据提供程序时,可以向数据提供程序添加属性'index'。为了前任
//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行。
工厂允许动态创建测试。
假设这是当前设置...
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-为之前传递给测试方法的每个参数创建实例变量。使用实例变量创建构造函数。从测试注释中删除数据提供程序部分。从测试方法中删除参数。
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);
}
java—需要将dataprovider方法分离成一个单独的类(如果还没有),并向其中添加factory方法。数据提供者保持不变。
@Factory(dataProvider="dp")
public Object[] createInstances(int id, String account) {
return new Object[] {new SequentialTest(id, account)};
}
xml-删除现有部分。只需提及包含工厂方法的类的名称。最重要的是添加groupbyinstances=“true”
参数,该参数将获得所需的行为。
< test name="fact" group-by-instances="true">
< classes>
< class name="....Data"/>
< classes/>
< /test>
我目前正在使用testng selenium来自动化我的测试,我有以下场景: 我需要从excel文件中读取数据,转换对象中的每一行,并为每一行运行一个测试。我试图使用annotation@DataProvider返回一个对象数组,但是它只能返回迭代器和对象[]。是否有任何变通方法可用于从数据提供程序返回客户机对象数组?我尝试了以下代码,但它只打印来自Client2的数据: 编辑1:客户类别: 在控
我使用testNg用于使用java的自动化,我使用从excel获取数据并作为参数传递给测试脚本。 假设我在中有10行数据,我的测试用例将按顺序执行10次,但现在我想并行运行这10个测试,同时使用线程。 这能做到吗?如果是的话,有人能给我一个同样的例子吗?
我正在使用数据提供程序向每个测试方法传递数据。假设数据提供程序中有2行。 当前运行单个测试方法的所有迭代,然后运行第二个测试方法...例如: 但我想按以下顺序运行。 http://fruzenshtein.com/testng-dataprovider-run-tests-sequency/
我使用selenium、TestNG和dataprovider创建了一些测试。每次运行测试时,都会执行两次测试,一次使用参数,第二次使用null参数,请在此处输入图像描述 请找到截图以供参考 请让我知道如何解决这个问题。 感谢您的帮助!! 代码:公共类AppTest\u BlankOrder扩展了ReplaceBaseclass{ //---- 数据提供者代码----
我想用Jest做一个测试。 我使用
例如: 数据提供程序1:dataA 数据提供程序2:dataB,dataC 数据提供程序3:dataD、dataE、dataG 所以我的测试需要一个数据提供者。但是我希望它根据测试组为不同的测试类型选择不同的数据提供者。例如,如果我正在运行“smoke”组,那么我希望使用数据提供者1;如果我正在运行“sanity”组,那么我希望运行数据提供者1和数据提供者2;如果我正在运行“regression”