4

并行=“实例”:

TestNG 将在同一个线程中运行同一个实例中的所有方法,但是两个不同实例上的两个方法将在不同的线程中运行。

这句话怎么理解?

4

2 回答 2

3

TestNG 的默认行为是根本不使用并行线程。

parallel属性设置套件在使用并行线程时如何执行其方法。

为清楚起见,考虑一个测试类:

public class StuffTest {
    @Test
    public void doStuffTest() {
        // do your thing
    }
}

默认情况下(无并行):

  • 每次测试运行都会创建一个StuffTest(say )的新实例;和st
  • 的每个方法都st将按顺序执行(顺序取决于其他设置)。

当您使用该parallel属性时,TestNG 将使用并行线程同时运行测试。(的值parallel将设置这些线程将如何处理测试类实例和方法。检查文档以获取可能的选项。)

parallel="instances"意味着如果您有多个StuffTest(比如说sasb)的实例:

  • instance 的所有方法都sa将在同一个线程(比如 thread ta)中执行。
  • instance 的所有方法都sb将在同一个线程(比如 thread tb)中执行。
  • ta!= tb
于 2013-06-13T15:17:49.860 回答
3

该问题没有很多上下文,但快速谷歌找到了来源

您的测试套件将创建许多不同类的实例,然后对它们运行一些测试。这种特殊的并行模式保证了当你的测试套件在任何创建实例上调用多个方法时,这将在同一个线程中完成。

为什么这很重要?好吧,某些功能可能依赖于一致的线程,例如,如果他们使用ThreadLocal. 此外,除非您的实例是线程安全的,否则允许多个线程对其调用方法可能会导致干扰。

如果您不确定所有关于线程安全的讨论是什么,那么您可能不想并行运行您的测试套件。或者也许将其限制为parallel="tests"并确保测试标签之间有明确的分隔。

于 2013-06-13T15:05:38.533 回答