TestNG的并行

作者: 我为峰2014 | 来源:发表于2017-11-14 19:14 被阅读46次

    - 类级注解

    通常 @Test 也可以用来标注类,而不仅仅是方法:

    @Test
    public class Test1 {
      public void test1() {
      }
    
      public void test2() {
      }
    }
    

    处于类级的@Test会使得类中所有的public方法成为测试方法,而不管他们是否已经被标注。当然,仍然可以用@Test注解重复标注测试方法,特别是要为其添加一些特别的属性时。

    例如:

    @Test
    public class Test1 {
      public void test1() {
      }
    
      @Test(groups = "g1")
      public void test2() {
      }
    }
    

    test1()test2()都被处理,不过在此之上test2()现在还属于组 "g1"

    - 并行套件

    让组件以一个独立的线程运行

    使用以下命令行参数来指定线程池的大小

    java org.testng.TestNG -suitethreadpoolsize 3 testng1.xml testng2.xml testng3.xml
    

    - 并行测试,类和方法

    可以通过在suite标签中使用 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 会在相同的线程中运行相同的<test>标记下的所有方法,但是每个<test>标签中的所有方法会运行在不同的线程中。这样就允许把所有非线程安全的类分组到同一个<test>标签下,并且使其可以利用TestNG多线程的特性的同时,让这些类运行在相同的线程中

    parallel="classes": TestNG 会在相同线程中相同类中的运行所有的方法,但是每个类都会用不同的线程运行

    parallel="instances": TestNG会在相同线程中相同实例中运行所有的方法,但是两个不同的实例将运行在不同的线程中

    此外,属性thread-count允许你为当前的执行指定可以运行的线程数量

    注意:@Test 中的属性timeOut可以工作在并行和非并行两种模式下

    也可以指定@Test方法在不同的线程中被调用。你可以使用属性 threadPoolSize来实现

    @Test(threadPoolSize = 3, invocationCount = 10,  timeOut = 10000)
    public void testServer() {}
    

    上例中,方法testServer会在3个线程中调用10次。此外,10秒钟的超时设定也保证了这三个线程中的任何一个都永远不会阻塞当前被调用的线程。

    相关文章

      网友评论

        本文标题:TestNG的并行

        本文链接:https://www.haomeiwen.com/subject/frgfvxtx.html