Java 如何理解平行关系;“实例”;在testng套件中配置?
parallel=“实例”: TestNG将在同一线程中运行同一实例中的所有方法,但两个不同实例上的两个方法将在不同线程中运行Java 如何理解平行关系;“实例”;在testng套件中配置?,java,testng,Java,Testng,parallel=“实例”: TestNG将在同一线程中运行同一实例中的所有方法,但两个不同实例上的两个方法将在不同线程中运行 如何理解这个句子?这个问题没有太多的上下文,但谷歌很快找到了答案 您的测试套件将创建不同类的许多实例,然后对它们运行一些测试。这种特殊的并行模式保证,每当您的测试套件在任何create实例上调用多个方法时,都将在同一个线程中完成 为什么这很重要?有些功能可能依赖于一致的线程,例如,如果它们使用ThreadLocal。此外,除非您的实例是线程安全的,否则允许多个线程对其调
如何理解这个句子?这个问题没有太多的上下文,但谷歌很快找到了答案 您的测试套件将创建不同类的许多实例,然后对它们运行一些测试。这种特殊的并行模式保证,每当您的测试套件在任何create实例上调用多个方法时,都将在同一个线程中完成 为什么这很重要?有些功能可能依赖于一致的线程,例如,如果它们使用
ThreadLocal
。此外,除非您的实例是线程安全的,否则允许多个线程对其调用方法可能会导致干扰
如果您不确定线程安全的说法是什么,那么您可能不希望并行运行测试套件。或者将其限制为
parallel=“tests”
,并确保测试标记之间有明确的分隔。TestNG的默认行为是根本不使用并行线程
parallel
属性设置套件在使用并行线程时执行其方法的方式
为清晰起见,考虑一个测试类:
public class StuffTest {
@Test
public void doStuffTest() {
// do your thing
}
}
默认情况下(无平行):
- 每次测试运行时将创建一个新的
(比如StuffTest
)实例;及st
的每个方法都将按顺序执行(顺序取决于其他设置)st
parallel
属性时,TestNG将同时使用并行线程运行测试。(并行parallel
的值将设置这些线程如何处理测试类实例和方法
parallel=“instances”
表示如果您有多个StuffTest
的实例(比如sa
和sb
):
- 实例
的所有方法都将在同一个线程中执行(比如线程sa
)ta
- 实例sb的所有方法都将在同一个线程中执行(比如thread
)tb
- 和
!=ta
tb
parallel=“method”
@CedricBeust谁决定创建每个类的实例数?(如有可能,请澄清官方文件)