我有几个测试类,每个测试类有几种测试方法.所有测试在后台使用相同的测试数据库.每个测试类初始化其数据库内容,然后在几种测试方法中测试内容.
当我单独进行每项测试时,它们都会通过.但是当我同时运行多个测试时(使用maven或我的IDE,IntelliJ),不同测试类的方法是交错运行的,例如.第一个类的数据库初始化在第一个类开始之后但在第一个类的所有测试方法都已运行之前运行,因此这些方法将失败(因为数据库已经包含第二个类的数据).
最简单的解决方案是强制TestNG运行器连续运行类(即等待测试类的所有测试方法在运行另一个类的测试方法之前完成).可以这样做吗?
我可以通过在我的套件中将每个类指定为单独的测试来实现这一点,但我不想这样做,因为这意味着每当我添加一个笨拙和错误的测试类时我都必须向套件中添加一些内容. -易于.
简单地要求TestNG不并行化任何东西(例如,将线程数设置为1或禁用并行运行)在这里没有帮助,因为方法仍然以错误的顺序运行(尽管不是同时运行).
一种选择是为每个测试类使用不同的数据库,但我没有看到一种简单的方法(使用JPA和Guice).
我目前没有使用DBUnit,Unitils等; 我不太了解这些工具,但我得到的印象是不能解决我的问题.
我正在使用JPA在每个测试类中初始化数据库(即创建实体对象并对其进行预处理).
即使在顺序模式下,TestNG也可以交错来自同一套件的测试方法.它确实保证序列@BeforeClass - > @Test - > @AfterClass但它可以做类似的事情:
before class1
test class1.method1
before class2
test class2.method1
test class1.method2
after class1
test class2.method2
after class2
Run Code Online (Sandbox Code Playgroud)
解决方案是强制每个类在不同的套件中(这些套件是按顺序执行的).从版本2.16开始,maven surefire插件将每个类放在一个单独的套件中,以解决问题.
另一方面,IDEA(甚至是最新的13个EAP)生成一个xml文件,其中包含同一套件中的所有类.希望IDEA也会效仿并解决这个问题.在使用数据库等共享资源时,交错测试是一种显而易见的过程.
我写了一篇文章讨论在 TestNG 中对测试进行排序的一些方法:
http://ancient-marinator.blogspot.com/2013/05/on-testing-scheduling-your-tests.html
当然,最好的信息来源是在家里: http: //testng.org/doc/index.html
| 归档时间: |
|
| 查看次数: |
10404 次 |
| 最近记录: |