testng执行顺序

时间:2013-01-22 12:49:56

标签: java testing continuous-integration integration-testing testng

我的测试在eclipse和jenkins中以不同的顺序执行。我希望结果与环境相同且独立。测试并不平行。我不关心specyfing命令,我只是希望它们始终以相同的顺序运行。

为什么呢?因为它们是集成测试并且它们使用数据库。有时它们相互影响,很难完全隔离它们。因此,如果它们失败了,我至少要让它们无处不在,以便更容易修复,而无需远程调试jenkins ......

编辑: 这是我在日食中获得的顺序的一个例子:

2013-01-22 14:39:06,186 main INFO  category  - Starting test A.a
2013-01-22 14:39:06,547 main INFO  category  - Starting test B.a
2013-01-22 14:39:10,614 main INFO  category  - Starting test C.a
2013-01-22 14:39:11,983 main INFO  category  - Starting test D.a
2013-01-22 14:39:12,492 main INFO  category  - Starting test D.b
2013-01-22 14:39:12,889 main INFO  category  - Starting test A.b
2013-01-22 14:39:13,657 main INFO  category  - Starting test A.c
2013-01-22 14:39:18,626 main INFO  category  - Starting test D.c
2013-01-22 14:39:19,041 main INFO  category  - Starting test A.d
2013-01-22 14:39:19,756 main INFO  category  - Starting test A.e
2013-01-22 14:39:20,724 main INFO  category  - Starting test D.e
2013-01-22 14:39:21,515 main INFO  category  - Starting test A.f

我在测试套件xml中使用组(实际上,在这个特定的套件中,我运行除了一些组之外的所有组)。 xml中没有提供特定的测试方法列表。上面的顺序是随机的。

2 个答案:

答案 0 :(得分:0)

理想情况下,您不应该依赖于单元测试的排序。每个测试应该彼此独立。按照这种理念,JUnit并不保证单元测试的任何特定执行顺序。您可以查看支持按特定顺序执行测试的TestNG

答案 1 :(得分:0)

如果您希望您的类/方法以可预测的顺序运行,那么您应该使用TestNG中的preserve-order属性。

 <suite name="Preserve order test runs">
   <test name="Test 1" preserve-order="true">
    <classes>
     <class name="com.ClassOne"/>
     <class name="com.ClassTwo"/>
     <class name="com.ClassThree"/>
    </classes>
   </test>
 </suite>