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

测试用例并行运行

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

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

先来看xml的配置方式

  • parallel=“methods”

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

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

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

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

  • parallel=“tests”

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

  • parallel=“classes”

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

  • parallel=“instances”

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

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

xml和@Test配置结合使用

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

  • 先来看个xml配置:

    
        
            
                
                    
                    
                
            
        
    


上面这个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五十次。

你可能感兴趣的:(TestNG快板说)