testng多线程测试

一、为什么使用多线程测试?

传统的测试使用单线程执行,多线程可以提高测试用例的执行效率。


二、如何使用?

  • 注解实现
  • xml实现



三、xml实现test,class,method级别的并发

test,class,method级别的并发,可以通过在testng.xml中的suite tag下设置,如:

<suite name="Testng Parallel Test" parallel="tests" thread-count="5">
<suite name="Testng Parallel Test" parallel="classes" thread-count="5">
<suite name="Testng Parallel Test" parallel="methods" thread-count="5">

它们的共同点都是最多起5个线程去同时执行不同的用例。
它们的区别如下:

  • methods级别:所有用例都可以在不同的线程去执行。
  • classs级别:不同class tag下的用例可以在不同的线程执行,相同class tag下的用例只能在同一个线程中执行
  • tests级别:不同test tag下的用例可以在不同的线程执行,相同test tag下的用例只能在同一个线程中执行

搞清楚并发的级别非常重要,可以帮我们合理地组织用例,比如将非线程安全的测试类或group统一放到一个test中,这样在并发的同时又可以保证这些类里的用例是单线程执行。也可以根据需要设定class级别的并发,让同一个测试类里的用例在同一个线程中执行。



四、案例

案例1-注解

注解实现method级别的并发


import org.testng.annotations.Test;

public class MultiThreadByAnnotation {

    //threadPoolSize为线程池内可以使用的线程数
    //使用threadPoolSize个线程,将test方法执行invocationCount次
    //timeOut配置的是每次执行该测试方法所耗费时间的阈值,超过阈值则测试失败
    @Test(invocationCount = 10, threadPoolSize = 3,timeOut = 1000)
    public void test(){
        System.out.println("hello");
        System.out.println("Thread Id: " + Thread.currentThread().getId());
    }
}

执行MultiThreadByAnnotation,结果如下
使用了3个线程,将测试方法test执行了10次。
在这里插入图片描述


案例2-xml-parallel=“methods”
import org.testng.annotations.Test;

public class MultiThreadByXml {
    @Test
    public void test1(){
        System.out.println("test1---Thread Id :  " + Thread.currentThread().getId());
    }

    @Test
    public void test2(){
        System.out.println("test2---Thread Id :  " + Thread.currentThread().getId());
    }
    
    @Test
    public void test3(){
        System.out.println("test3---Thread Id :  " + Thread.currentThread().getId());
    }
}

multiThread.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >


<!--parallel="methods",表示多线程级别为方法级别-->
<!--thread-count="2",表示线程数为2-->
<suite name="thread" parallel="methods" thread-count="5">
    <test name="demo1">
        <classes>
            <class name="com.course.testng.multiThread.MultiThreadByXml"></class>
        </classes>
    </test>
</suite>

执行multiThread.xml,结果如下

在这里插入图片描述


案例3-xml-parallel=“classes”
import org.testng.annotations.Test;

public class MultiThreadByXml {
    @Test
    public void test1(){
        System.out.println("test1---Thread Id :  " + Thread.currentThread().getId());
    }

    @Test
    public void test2(){
        System.out.println("test2---Thread Id :  " + Thread.currentThread().getId());
    }
    
    @Test
    public void test3(){
        System.out.println("test3---Thread Id :  " + Thread.currentThread().getId());
    }
}
import org.testng.annotations.Test;

public class MultiThreadByXml2 {
    @Test
    public void test21(){
        System.out.println("test21---Thread Id :  " + Thread.currentThread().getId());
    }

    @Test
    public void test22(){
        System.out.println("test22---Thread Id :  " + Thread.currentThread().getId());
    }
    
    @Test
    public void test23(){
        System.out.println("test23---Thread Id :  " + Thread.currentThread().getId());
    }
}
import org.testng.annotations.Test;

public class MultiThreadByXml3 {
    @Test
    public void test31(){
        System.out.println("test31---Thread Id :  " + Thread.currentThread().getId());
    }

    @Test
    public void test32(){
        System.out.println("test32---Thread Id :  " + Thread.currentThread().getId());
    }
    @Test
    public void test33(){
        System.out.println("test33---Thread Id :  " + Thread.currentThread().getId());
    }

}

multiThread.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >


<!--parallel="classes",表示多线程级别为class-->
<!--thread-count="2",表示线程数为2-->
<suite name="thread" parallel="classes" thread-count="2">
    <test name="demo1">
        <classes>
            <class name="com.course.testng.multiThread.MultiThreadByXml"></class>
            <class name="com.course.testng.multiThread.MultiThreadByXml2"></class>
        </classes>
    </test>

    <test name="demo2">
        <classes>
            <class name="com.course.testng.multiThread.MultiThreadByXml3"></class>
        </classes>
    </test>
</suite>

在这里插入图片描述


案例4-xml-parallel=“tests”

multiThread.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!--parallel="tests",表示多线程级别为test级别-->
<!--thread-count="2",表示线程数为2-->
<suite name="thread" parallel="tests" thread-count="2">
    <test name="demo1">
        <classes>
            <class name="com.course.testng.multiThread.MultiThreadByXml"></class>
        </classes>
    </test>

    <test name="demo2">
        <classes>
            <class name="com.course.testng.multiThread.MultiThreadByXml2"></class>
        </classes>
    </test>
</suite>

执行multiThread.xml,结果如下
在这里插入图片描述

网上看到一篇testng并发比较好的文章,分享下 简单聊聊 TestNG 中的并发

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值