TestNG-并发测试

并行测试可以提高测试效率,可以在XML配置文件中设置parallel属性来启用并发测试

一、方法中的并发

可以在方法上直接设置线程数和执行次数,在如下例子中threadPoolSize表示线程数,invocationCount表示总的执行次数,表示3个线程,总共执行10次

    @Test(threadPoolSize = 3,invocationCount = 10)
    public void test(){
        Assert.assertEquals(1,1);
        System.out.println("Thread "+Thread.currentThread().getId());
    }

执行结果
在这里插入图片描述

二、XML中的并发

1.基本格式

​在testng的配置文件中,层级关系如下所示,每个xml文件只能有一个suite,代表一个测试套件;一个suite中可包含多个test,默认情况下,多个test会顺序执行,若希望多个test以不可预知的顺序运行,可以将preserve-order属性设置为false;每个test里可以写需要运行的测试用例的class,如果不写,默认会执行所有用例;每个class可以指定执行和不执行的用例,如果不写method,默认执行该类全部用例。

-suite:套件,包含一个或多个test
	-test:测试集,包含一个或多个classes
		-classes:测试类集合,包含一个或多个class
			-class:测试类,包含一个或多个方法

在testng中,test、classes、methods级别的并发,可以在testng.xml文件的suite tag中设置,如下所示:

<suite name="parallelTest" parallel="tests" thread-count="3">
<suite name="parallelTest" parallel="classes" thread-count="3">
<suite name="parallelTest" parallel="methods" thread-count="3">

共同点:都是最多启动3个线程来执行用例

不同点:

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

2.案例Demo

测试类

Demo1.java

public class Demo1 {
    @Test
    public void test01(){
        Assert.assertEquals(1,1);
        System.out.println("Demo1类中的test01:Thread"+Thread.currentThread().getId());
    }
    @Test
    public void test02(){
        Assert.assertEquals(1,1);
        System.out.println("Demo1类中的test02:Thread"+Thread.currentThread().getId());
    }
}

Demo2.java

public class Demo2 {
    @Test
    public void test03(){
        Assert.assertEquals(1,1);
        System.out.println("Demo2类中的test03:Thread"+Thread.currentThread().getId());
    }
    @Test
    public void test04(){
        Assert.assertEquals(1,1);
        System.out.println("Demo2类中的test04:Thread"+Thread.currentThread().getId());
    }
}

tests级别的并发

1)相同test tag下的用例,均由同一个线程执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="parallelTest" parallel="tests" thread-count="2">
    <test verbose="2" preserve-order="true" name="E:/ideaProject/java_web_auto">
        <classes>
            <class name="com.web.auto.test.Demo1" />
            <class name="com.web.auto.test.Demo2" />
        </classes>
    </test>
</suite>

执行结果
在这里插入图片描述
2)不同test tag下的用例,由不同线程执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="parallelTest" parallel="tests" thread-count="2">
    <test name="test01">
        <classes>
            <class name="com.web.auto.test.Demo1" />
        </classes>
    </test>
    <test name="test02">
        <classes>
            <class name="com.web.auto.test.Demo2" />
        </classes>
    </test>
</suite>

执行结果
在这里插入图片描述

classes级别的并发

1)在class tag相同的前提下,相同class tag下的用例,均由同一个线程执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="parallelTest" parallel="classes" thread-count="2">
    <test name="test01">
        <classes >
            <class name="com.web.auto.test.Demo1" />
            <class name="com.web.auto.test.Demo1" />
        </classes>
    </test>
</suite>

运行结果
在这里插入图片描述
2)在class tag相同的前提下,不同class tag下的用例,由不同线程执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="parallelTest" parallel="classes" thread-count="2">
    <test name="test01">
        <classes >
            <class name="com.web.auto.test.Demo1" />
            <class name="com.web.auto.test.Demo2" />
        </classes>
    </test>
</suite>

运行结果
在这里插入图片描述

methods级别的并发

所有用例都可以在不同的线程去执行,即在线程数足够的情况下,每个方法都可以被分配一个独立的线程来执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="parallelTest" parallel="methods" thread-count="5">
    <test name="test01">
        <classes >
            <class name="com.web.auto.test.Demo1" />
            <class name="com.web.auto.test.Demo2" />
        </classes>
    </test>
</suite>

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值