如何在并行 JVM 进程(不是线程)中运行 TestNG 测试

Posted

技术标签:

【中文标题】如何在并行 JVM 进程(不是线程)中运行 TestNG 测试【英文标题】:How to run TestNG tests in parallel JVM process (not threads) 【发布时间】:2022-01-23 13:31:50 【问题描述】:

是否可以在两个不同的 Java 进程 (JVM) 中使用 TestNG 框架运行测试? 默认情况下,TestNG 创建一个进程,所有并行测试都在其中的单独线程中运行。而且我需要将所有静态内容包装在 ThreadLocal 中以使其成为线程安全的。但是,如果有一种方法可以在两个不同的进程中运行测试,我可以保持一切原样。我不想担心线程安全。

【问题讨论】:

【参考方案1】:

TestNG 无法在多个进程中运行测试。 但是,至少 maven(我也希望 gradle)有一个插件来完成这项工作。

看看,maven surefire 插件是如何解决这个问题的:https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html

您可以使用此配置示例(将其添加到 pom.xml,build->plugins 部分):

<plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M5</version>
                    <configuration>
                            <forkCount>2</forkCount>
                            <reuseForks>false</reuseForks>
                            <reportsDirectory>target/surefire-reports-$surefire.forkNumber</reportsDirectory>
                            <suiteXmlFiles>
                                    <suiteXmlFile>src/test/resources/Suite1.xml</suiteXmlFile>
                                    <suiteXmlFile>src/test/resources/Suite2.xml</suiteXmlFile>
                            </suiteXmlFiles>
                    </configuration>
            </plugin>

【讨论】:

以上是关于如何在并行 JVM 进程(不是线程)中运行 TestNG 测试的主要内容,如果未能解决你的问题,请参考以下文章

Flink5:Flink运行架构(Slot和并行度)

java能利用多核cpu吗

线程并发并行进程是什么,以及如何开启新的线程?

2 java并行基础

大哥,这是并发不是并行,Are You Ok?

并发编程解惑之线程