2014-06-16 53 views
2

情况:我有两个测试a()和b()。 b()使用“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); 
} 

我想结果永远是 谷歌,苹果,微软,雅虎。 或 微软,雅虎,谷歌,苹果

但不 谷歌,雅虎,微软,苹果,还是谷歌,微软,苹果,雅虎。

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

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

+0

我升级我的测试-NG版本6.8.8,并用组逐实例,但它没有解决我的问题。 – user3325862

回答

1

TestNG的第一个运行从日期提供商接收的所有数据的“verifyData1”的方法,之后,它会运行“verifyData2”,所以输出将是:谷歌,微软,苹果,雅虎

+0

我明白这是默认行为。有没有办法改变它? – user3325862

+0

这是正确的它在文档中陈述: http://testng.org/doc/documentation-main.html –

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属性组按实例 <test name="Test1" group-by-instances="true">