当我并行运行我的测试类时,失败的测试数量高于运行测试类序列化的数量。我为了调试目的而在控制台上记录了很多,但是并行运行时几乎没用,因为记录的所有内容都是乱码/乱序。
在我尝试修复日志记录问题以便我可以更好地调试之前,我想知道,如果我设置parallel="classes"
,它是否保证线程安全?我假设如果我设置parallel="tests"
两个方法可能会尝试访问范围内的同一个对象,从而导致线程安全问题。
即:
<suite name="test" parallel="classes" thread-count="3">
答案 0 :(得分:2)
来自TestNG文档5.10.2 - Parallel tests, classes and methods:
标记上的 parallel 属性可以采用以下值之一:
<suite name="My suite" parallel="methods" thread-count="5">
<suite name="My suite" parallel="tests" thread-count="5">
<suite name="My suite" parallel="classes" thread-count="5">
<suite name="My suite" parallel="instances" thread-count="5">
parallel="methods"
:TestNG将在不同的线程中运行所有测试方法。依赖方法也将在不同的线程中运行,但它们将遵循您指定的顺序。
parallel="tests"
:TestNG将在同一个线程中运行相同标记中的所有方法,但每个标记都将位于单独的线程中。这允许您将所有非线程安全的类分组,并保证它们都将在同一个线程中运行,同时利用TestNG尽可能多的线程来运行测试。< / LI>
parallel="classes"
:TestNG将在同一个线程中运行同一个类中的所有方法,但每个类都将在一个单独的线程中运行。
parallel="instances"
:TestNG将在同一个线程中运行同一个实例中的所有方法,但两个不同实例上的两个方法将在不同的线程中运行。
因此,如果通过&#34;线程安全&#34;你的意思是不会有多个TestNG线程与任何给定的测试类实例交互,然后是,使用&#34;类&#34;会得到你想要的。然而,&#34;测试&#34;不会在自己的线程中运行每个测试方法,而是从testng.xml运行每个<test>
标记。上面的描述应该有所帮助。