• testng之多线程执行(并发执行)


    多线程作用:当我们用例较多时通过多线程并行执行测试用例可以提高运行效率。

    注意:当我们用例数很少时(比如只有10条),使用多线程运行反而运行效率降低,因为线程的创建和关闭也需要时间。

    1、不同的测试方法使用不同的线程--方法级别(最常用)

    xml文件配置:suite套件配置:

    parallel="methods" :表示多线程是在测试方法级别

    thread-count="5":表示共创建5个线程

    总的意思:总共创建5个线程,不同的方法在5个不同的线程上执行。

    //测试类Testa
    public class Testa {
    
        @Test
        public void testa_1(){
            System.out.println("testaaa-1级别1执行");
            System.out.println("testaaa-1线程id:"+Thread.currentThread().getId());
        }
    
        @Test
        public void testa_2(){
            System.out.println("testaaa-2级别2执行");
            System.out.println("testaaa-2线程id:"+Thread.currentThread().getId());
        }
    
    }
    
    //测试类Testb
    
    public class Testb {
    
        @Test
        public void testb_1(){
            System.out.println("testbbb_1级别1执行了");
            System.out.println("testbbb-1线程id:"+Thread.currentThread().getId());
        }
    
        @Test
        public void testb_2(){
            System.out.println("testbbb_2级别2执行了");
            System.out.println("testbbb-2线程id:"+Thread.currentThread().getId());
        }
    }
    
    //通过xml文件配置多线程
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    
    <suite name="套件" parallel="methods" thread-count="5">
        <test name="运行所有用例">
            <classes>
                <class name="com.test.finance.testcase.Testa"/>
                <class name="com.test.finance.testcase.Testb"/>
            </classes>
        </test>
    </suite>

    // ==运行结果==\

    testbbb_2级别2执行了
    testaaa-2级别2执行
    testbbb-2线程id:14
    testaaa-1级别1执行
    testbbb_1级别1执行了
    testaaa-1线程id:11
    testaaa-2线程id:12
    testbbb-1线程id:13

    2、线程级别tests,即不同的test tag下使用不同的线程,同一个test tag下使用相同的线程。

    //xml文件配置,Testa Testb类属于一个tests tag
    //                    Testc 类属于一个tests tag
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    
    <suite name="套件" parallel="tests" thread-count="5">
    
        <test name="第一波测试用例">
            <classes>
                <class name="com.test.finance.testcase.Testa"/>
                <class name="com.test.finance.testcase.Testb"/>
            </classes>
        </test>
    
        <test name="第二波测试用例">
            <classes>
                <class name="com.test.finance.testcase.Testc"/>
            </classes>
        </test>
    </suite>


    //==运行结果==\ testaaa-1级别1执行 testccc_1级别1执行了 testaaa-1线程id:11 testccc-1线程id:12 testaaa-2级别2执行 testaaa-2线程id:11 testccc_2级别2执行了 testccc-2线程id:12 testbbb_1级别1执行了 testbbb-1线程id:11 testbbb_2级别2执行了 testbbb-2线程id:11

    3、线程级别classes,即不同的测试类下使用不同的线程,同一个测试类class下使用相同的线程。

    // 通过xml文件配置
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    
    <suite name="套件" parallel="classes" thread-count="5">
    
        <test name="第一波测试用例">
            <classes>
                <class name="com.test.finance.testcase.Testa"/>
                <class name="com.test.finance.testcase.Testb"/>
            </classes>
        </test>
    
    </suite>
    
    
    //===运行结果==\
    testbbb_1级别1执行了
    testaaa-1级别1执行
    testbbb-1线程id:12
    testaaa-1线程id:11
    
    testbbb_2级别2执行了
    testbbb-2线程id:12
    
    testaaa-2级别2执行
    testaaa-2线程id:11

    4、直接通过@Test参数控制单个测试方法执行次数+使用的线程数

    如果我们需要多次执行摸个测试方法,这时候我们可以通过改用例的@Test中的参数来控制对改用例使用多线程

    @Test(invocation=执行次数, threadPoolSize=线程池线程数)

    //测试方法
    
        @Test(invocationCount = 3,threadPoolSize = 3)
        public void testa_1(){
            System.out.println("testaaa-1级别1执行");
            System.out.println("testaaa-1线程id:"+Thread.currentThread().getId());
        }
    
    //单独运行这个方法的结果
    testaaa-1级别1执行
    testaaa-1线程id:13
    testaaa-1级别1执行
    testaaa-1线程id:12
    testaaa-1级别1执行
    testaaa-1线程id:11

     上面的案例:testa_1()测试方法调用3次,并且启动3个线程,所以3次执行使用的是不同的线程执行。

    总结:

    1、通过xml文件的配置可以实现对整理测试用例的多线程配置

    parallel="methods" :测试方法级别

    parallel="tests" : test tag级别

    parallel="classes" : class级别

    2、通过@Test(invocation, threadPoolSize)参数控制单个用例的多线程执行

  • 相关阅读:
    关于[x/y]一些小想法
    mycat主从读写分离范例
    EOJ 262 润清的烦恼
    mycat server.xml 配置文件详解
    Mongodb in Mycat指南
    牛客网NOIP赛前集训营-普及组(第一场)
    MyCAT分表初体验
    牛客网NOIP赛前集训营-提高组(第一场)
    日期类型的特殊性 -- 日期函数转换
    POJ 1966 Cable TV Network 【经典最小割问题】
  • 原文地址:https://www.cnblogs.com/jesse-zhao/p/14827890.html
Copyright © 2020-2023  润新知