2

情况:我有两个测试 a() 和 b()。使用“dependsOnMethods”参数使 b() 依赖于 a()。我对这两个测试都有不同的数据集。有没有办法确保在执行测试时保留数据的顺序?

例子:

@DataProvider(name = "test1")
public Object[][] createData1() {
    return new Object[][] {
        { "Google" },
        { "Microsoft"}, 
    };
}

@DataProvider(name = "test2")
public Object[][] createData2() {
    return new Object[][] {
        { "Apple"},
        { "Yahoo"}, 
    };
}


@Test(dataProvider = "test1")
public void verifyData1(String n1) {
    System.out.println(n1);
}

@Test(dataProvider = "test2", dependsOnMethods="verifyData1")
public void verifyData2(String n1) {
    System.out.println(n1);
}

我希望结果始终是 Google、Apple、Microsoft、Yahoo。或微软、雅虎、谷歌、苹果

但不是 Google、Yahoo、Microsoft、Apple 或 Google、Microsoft、Apple、Yahoo。

这意味着如果 test1 使用来自其数据提供者的第一组参数运行,则 test2 也应该使用来自其数据提供者的第一组参数运行。test1 的 dataprovider 中的第二组参数是否在第一组之前运行并不重要,只要第二个测试在运行第一组之前也使用其 dataprovider 中的第二组参数运行即可。有没有办法做到这一点?

刚刚意识到这可以通过使用 group-by-instances 参数来解决。(我在我的 testng xml 中找到了一个选项,因为我使用的是旧版本。)。我将尝试升级我的 testNg 并发布更新。

4

2 回答 2

1

testng 首先对从日期提供者接收到的所有数据运行“verifyData1”方法,然后运行“verifyData2”,因此输出将是:Google、Microsoft、Apple、Yahoo

于 2014-06-24T14:19:39.230 回答
0

http://testng.org/doc/documentation-main.html

依赖方法按类分组。如果方法 b() 依赖于方法 a() 并且您有多个包含这些方法的类的实例(因为数据提供者的工厂),那么调用顺序是: verifyData1("Google") verifyData1("Microsoft") verifyData2("Apple") verifyData2("Yahoo") TestNG 将不会运行 b(),直到所有实例调用了它们的 a() 方法。

如果您想订购: verifyData1("Google") verifyData2("Apple") verifyData1("Microsoft") verifyData2("Yahoo") 您可以使用 XML 属性group-by-instances <test name="Test1" group-by-instances="true">

于 2017-11-22T14:09:41.170 回答