我已经能够使用 TestNG 运行程序将项目配置为并行运行测试用例;然而,有一些场景不是很线程安全。如果这些测试用例并行运行,它们就会相互干扰。现在有几种方法可以使这些场景线程安全,但我想知道是否有一种方法可以指定这些 Cucumber 场景不并行运行。
我可以配置一个特定的标签来标记不并行运行的场景吗?指定某些功能文件不并行运行?我相信我可能在 JUnit 5 中遇到过类似的情况,但是 TestNG 中是否存在这种情况?
与 JUnit 5 不同,TestNG 不提供如此细粒度的控制。最好的情况是,您可以创建多个运行器类,具有不同的功能选择和不同的并行/串行执行配置。
我刚刚意识到的另一件事是我可以将线程数作为一个参数;默认为 1 个线程。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<properties>
<property>
<name>dataproviderthreadcount</name>
<value>1</value>
</property>
</properties>
<includes>
<include>api.automation.tests.runners.TestNGRunnerTest</include>
</includes>
</configuration>
</plugin>
我有一个 Jenkins 构建,其中所有测试都标记为相同名称,可以与所需的线程数并行运行。
mvn clean test -Dcucumber.filter.tags="${CucumberFilterTag} and not @opentofix" -Dspring.profiles.active=${Environment} -Ddataproviderthreadcount=4
在另一个版本中,我有一个非常相似的命令(具有不同的标签),只是没有添加参数;使用默认的只有一个线程。这将一次运行所有这些标记的测试。
mvn clean test -Dcucumber.filter.tags="${CucumberFilterTag} and not @opentofix" -Dspring.profiles.active=${Environment}
无论哪种方式,第一个答案仍然有效,但只是想添加这种可能性。