如何在dataprovider中保留数据的顺序?

时间:2014-06-16 20:01:22

标签: testng testng-dataprovider

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

示例:

@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,Yahoo,Microsoft,Apple或Google,Microsoft,Apple,Yahoo。

这意味着如果test1是使用其数据采集器中的第一组参数运行的,那么test2也应该使用来自它的数据提供者的第一组参数运行。 如果test1的dataprovider中的第二组参数在第一组之前运行,则无关紧要,只要第二组测试也在运行第一组之前使用其数据提供者的第二组参数运行。有没有办法实现这个目标?

刚刚意识到这可以通过使用逐个实例参数来修复。 (我在我的testng xml中找到的一个选项因为我使用的是旧版本。)。我将尝试升级我的testNg并发布更新。

2 个答案:

答案 0 :(得分:1)

testng首先对从date provider收到的所有数据运行'verifyData1'方法,之后它将运行'verifyData2',因此输出将是:Google,Microsoft,Apple,Yahoo

答案 1 :(得分:0)

请参阅http://testng.org/doc/documentation-main.html

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

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