【TestNG快板说六】TestNG测试用例并行运行

测试用例并行运行

举例一个场景,有时我们会希望让多个测试用例并发的执行,去定位或者复现相关问题,那么怎么操作呢?

  • 先来讲下TestNG测试用例并发运行有几种方式
    1. 运行的xml文件中配置suite,其中可以分四中并行方式,分别method, tests, classes, instances
    2. @Test中设置参数threadPoolSize

先来看xml的配置方式

  • parallel=“methods”
<suite name="My suite" parallel="methods" thread-count="5">

parallel="methods",TestNG会给每一个<methods>下的<method>的方法都起一个单独的线程去运行,即使方法之间存在依赖关系,也会以单独的线程去运行,但是这时候会按照你设置好的顺序,逐个起线程去运行,而非并发的形式。

单独方法运行也可以直接在Class中设置,如下:

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

其中threadPoolSize代表线程池的大小,invocationCount代表测试用例执行的总次数,timeout代表超时时间,既超出设置时间,所有线程必须终止。

  • parallel=“tests”
<suite name="My suite" parallel="tests" thread-count="5">

parallel="tests",TestNG会给每个<tests>下的<test>都起一个单独的线程运行<test>下所有测试用例,所以如果你存在多个线程不安全的测试用例,你就可以把他们放到同一个<test>下的<classes>中,在一个线程中按顺序执行。

  • parallel=“classes”
<suite name="My suite" parallel="classes" thread-count="5">

paralledl="class",TestNG会启动独立的线程运行每个class中的所有method。

  • parallel=“instances”
<suite name="My suite" parallel="instances" thread-count="5">

parallel="instances",TestNG会在一个线程里运行相同实例的所有方法,但是不同实例的方法由不同的线程运行。

还有一个细节,parallel参数只有在suite中才能设置,suite中还可以设置thread-count,既允许最多启动多少个线程执行任务。

xml和@Test配置结合使用

场景设想:
由于xml中只能把parallel参数设置在suite中,这样一来如果设置的是methods,那么所有的运行方式都是一样的,自然这样对于只是想简单并发下是OK的,但是如果想几个method以不同的方式运行,明显是无法满足的。那怎么办呢?xml@Test结合使用就可以解决这个问题。

  • 先来看个xml配置:
<suite name="Cancel Plan" verbose="1" parallel="methods">
    <test name="Regression1">
        <classes>
            <class name="com.http.***.transfers.PlanInBoundTest">
                <methods>
                    <include name="testInRuleIssued" />
                    <include name="testUpdateCancelFlag" />
                </methods>
            </class>
        </classes>
    </test>
</suite>

上面这个xml配置了parallel="methods",所以PlanInBoundTest中的两个方法testInRuleIssuedtestUpdateCancelFlag会并行的在两个不同线程中执行。但是现在需要testInRuleIssued同时在三个线程中运行,testUpdateCancelFlag只在一个线程中运行,那么我们可以这样设置两个method的@Test:

	@Test(threadPoolSize = 3, invocationCount = 50)
    void testInRuleIssued() {
    }

    /**
     * 测试取消入库计划
     */
    @Test(invocationCount = 50)
    void testUpdateCancelFlag() {
	}

当启动两个线程分别运行testInRuleIssuedtestUpdateCancelFlag,发现testInRuleIssued还配置了threadPoolSize=3,那么就会按照这个配置来运行测试用例,所以这时会启动三个线程运行testInRuleIssued方法,总计运行50次;另外会启动一个线程运行testUpdateCancelFlag五十次。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值