TestNG:并行线程安全运行类吗?

时间:2016-03-25 17:39:52

标签: java multithreading thread-safety testng

当我并行运行我的测试类时,失败的测试数量高于运行测试类序列化的数量。我为了调试目的而在控制台上记录了很多,但是并行运行时几乎没用,因为记录的所有内容都是乱码/乱序。

在我尝试修复日志记录问题以便我可以更好地调试之前,我想知道,如果我设置parallel="classes",它是否保证线程安全?我假设如果我设置parallel="tests"两个方法可能会尝试访问范围内的同一个对象,从而导致线程安全问题。

即:

<suite name="test" parallel="classes" thread-count="3">

1 个答案:

答案 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尽可能多的线程来运行测试。

  •   
  • parallel="classes" :TestNG将在同一个线程中运行同一个类中的所有方法,但每个类都将在一个单独的线程中运行。

    < / LI>   
  • parallel="instances" :TestNG将在同一个线程中运行同一个实例中的所有方法,但两个不同实例上的两个方法将在不同的线程中运行。

  •   

因此,如果通过&#34;线程安全&#34;你的意思是不会有多个TestNG线程与任何给定的测试类实例交互,然后是,使用&#34;类&#34;会得到你想要的。然而,&#34;测试&#34;不会在自己的线程中运行每个测试方法,而是从testng.xml运行每个<test>标记。上面的描述应该有所帮助。