• (五)TestNG测试的并发执行详解


    原文链接:https://blog.csdn.net/taiyangdao/article/details/52159065

    TestNG在执行测试时,默认suitethreadpoolsize=1,-randomizesuites=false,即非并发顺序执行测试。

    但是TestNG提供了多种方式,以支持测试的并发多线程执行。

    1. 针对多个测试规划的情况,为每个testng*.xml配置文件使用独立的线程执行

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

    通过使用启动参数suitethreadpoolsize,为每个测试规划文件分配一个线程并发执行。

    2. 在一个测试规划中,指定其线程并发的策略

    1).通过启动测试的命令行参数-parallel

    启动参数-parallel用以设置测试执行的默认并发策略。之所以说“默认并发策略”,是因为这里的设置可以被testng.xml配置文件中的并发策略所覆盖。

    另外,启动测试时不设置-parallel参数,则默认策略是不使用并发线程。但究竟是否并发执行,还要看testng.xml中的配置。

    java org.testng.TestNG -parallel methods -threadcount 4 testng.xml
    

    说明:在当前测试规划的执行过程中,为每个测试方法的执行使用单独的线程,最多并发4个线程。对比于其他并发策略,测试方法的并发粒度最小,所以这也是最大程度的并发策略。

    java org.testng.TestNG -parallel tests -threadcount 4 testng.xml
    

    说明:在当前测试规划的执行过程中,为每个测试用例的执行使用单独的线程(该测试用例中的所有测试方法共享一个线程),最多并发4个线程。

    java org.testng.TestNG -parallel classes -threadcount 4 testng.xml
    

    说明:在当前测试规划的执行过程中,为每个测试类的执行使用单独的线程(该测试类中的所有测试方法共享一个线程),最多并发4个线程。
     

    2).通过testng.xml配置文件

    <suite name="My suite" parallel="methods" thread-count="4">
    

    说明:在当前测试规划的执行过程中,为每个测试方法的执行使用单独的线程,最多并发4个线程。

    <suite name="My suite" parallel="tests" thread-count="4">
    

    说明:在当前测试规划的执行过程中,为每个测试用例的执行使用单独的线程(该测试用例中的测试方法共享一个线程),最多并发4个线程。

    <suite name="My suite" parallel="classes" thread-count="4">
    

    说明:在当前测试规划的执行过程中,为每个测试类的执行使用单独的线程(该测试类中的测试方法共享一个线程),最多并发4个线程。

    <suite name="My suite" parallel="instances" thread-count="4">
    

    说明:在当前测试规划的执行过程中,为每个测试类实例的执行始终使用唯一的线程(该测试实例中的测试方法共享一个线程),最多并发4个线程。

    注意:这里的parallel默认值为"none"。曾经的"true", "false"已经过时了,不建议使用。

     3. 在测试方法中,指定其可用的线程池

    还可以单独为一个测试方法指定可使用的线程池,示例如下:

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

    说明:该测试方法可在3个线程中并发执行,共被调用10次,执行超时10秒。

    4. @DataProvider的并发

    在定义数据源的时候,不仅仅可以为数据源指定name,还可以为其指定parallel属性,示例如下:

    @DataProvider(name = "test1", parallel = true)
    public Object[][] createData1() {
     return new Object[][] {
       { "Cedric", new Integer(36) },
       { "Anne", new Integer(37)},
     };
    }
    

    说明:parallel属性默认false,表示使用该数据源的测试方法不能并发执行。parallel属性设置为true,表示使用该数据源的测试方法可以并发执行。

    5. 注意:

    在定义测试类的时候,如果@Test使用了singleThreaded=true属性,则该测试类的所有测试方法都只能在单线程中执行,无论其他设置如何。示例如下:

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

      

      

      

     

      

      

      

      

      

      

  • 相关阅读:
    并发编程(十)—— Java 并发队列 BlockingQueue 实现之 SynchronousQueue源码分析
    并发编程(九)—— Java 并发队列 BlockingQueue 实现之 LinkedBlockingQueue 源码分析
    Java工程师成神之路
    并发编程(八)—— Java 并发队列 BlockingQueue 实现之 ArrayBlockingQueue 源码分析
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/lvchengda/p/13044814.html
Copyright © 2020-2023  润新知