【发布时间】:2013-06-09 19:54:04
【问题描述】:
parallel="instances":
TestNG 将在同一个线程中运行同一个实例中的所有方法,但是两个不同实例上的两个方法将在不同线程中运行。
这句话怎么理解?
【问题讨论】:
parallel="instances":
TestNG 将在同一个线程中运行同一个实例中的所有方法,但是两个不同实例上的两个方法将在不同线程中运行。
这句话怎么理解?
【问题讨论】:
这个问题的上下文并不多,但是通过谷歌快速找到了source。
您的测试套件将创建许多不同类的实例,然后对它们运行一些测试。这种特殊的并行模式保证了当您的测试套件在任何创建实例上调用多个方法时,这将在同一个线程中完成。
为什么这很重要?好吧,某些功能可能依赖于一致的线程,例如,如果他们使用ThreadLocal。此外,除非您的实例是线程安全的,否则允许多个线程对其调用方法可能会导致干扰。
如果您不确定所有这些关于线程安全的讨论是什么,那么您可能不想并行运行您的测试套件。或者也许将其限制为parallel="tests",并确保测试标签之间有明确的分隔。
【讨论】:
TestNG 的默认行为是根本不使用并行线程。
parallel 属性设置如何套件在使用并行线程时执行其方法。
为清楚起见,考虑一个测试类:
public class StuffTest {
@Test
public void doStuffTest() {
// do your thing
}
}
默认情况下(无并行):
StuffTest 的新实例(比如st)将在每次测试运行时创建;和st 的每个方法都会按顺序执行(顺序取决于其他设置)。当您使用parallel 属性时,TestNG 将使用并行线程同时运行测试。 (parallel 的值将设置这些线程将如何处理测试类实例和方法。Check the docs for the possible options。)
parallel="instances" 表示如果您有多个StuffTest 实例(比如sa 和sb):
sa的所有方法都将在同一个线程中执行(比如线程ta)。sb的所有方法都会在同一个线程中执行(比如线程tb)。ta != tb。【讨论】:
parallel="method"。