gpt4 book ai didi

java - 使用数据提供者的第一行运行整个测试类

转载 作者:行者123 更新时间:2023-12-02 02:11:07 25 4
gpt4 key购买 nike

设置:

  1. 我有一个测试类。
  2. 此测试类有多个带有 @Test(dataProvider = "getData") 注解的方法。
  3. 数据中有 7 条记录(行)。
  4. 所有测试都是连续的。

问题:

我需要使用一行数据运行所有方法(测试),但截至目前,它继续对所有行重复相同的测试,即如果有 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 -为之前传递给测试方法的每个参数创建实例变量。使用实例变量创建构造函数。从测试注释中删除 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 - 删除现有部分。只需提及包含工厂方法的类的名称。最重要的是添加 group-by-instances="true" 参数,这将为您提供所需的行为。

  < test name="fact" group-by-instances="true">
< classes>
< class name="....Data"/>
< classes/>
< /test>

关于java - 使用数据提供者的第一行运行整个测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50015727/

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