為什么要使用多線程測(cè)試?

在實(shí)際測(cè)試中,為了節(jié)省測(cè)試時(shí)間,提高測(cè)試效率,在實(shí)際測(cè)試場(chǎng)景中經(jīng)常會(huì)采用多線程的方式去執(zhí)行,比如爬蟲爬數(shù)據(jù),多瀏覽器并行測(cè)試。

關(guān)于多線程并行測(cè)試

TestNG中實(shí)現(xiàn)多線程并行執(zhí)行,可以通過以下幾種方法:

  • @Test注解的形式
  • Xml文件的配置的形式

本文著重介紹下以xml形式實(shí)現(xiàn)多線程測(cè)試的方法,來讓我們開始吧

如何實(shí)現(xiàn)?

1、編寫測(cè)試類

復(fù)制代碼
package com.testng.demo;

import org.testng.annotations.Test;

public class MultiThreadedByXml {

    @Test
    public void test1() {
        System.out.println("Thread id is " + Thread.currentThread().getId());
    }

    @Test
    public void test2() {
        System.out.println("Thread id is " + Thread.currentThread().getId());
    }

    @Test
    public void test3() {

        System.out.println("Thread id is " + Thread.currentThread().getId());

    }

    @Test
    public void test4() {
        System.out.println("Thread id is " + Thread.currentThread().getId());
    }

    @Test
    public void test5() {
        System.out.println("Thread id is " + Thread.currentThread().getId());
    }
}
復(fù)制代碼

2、編寫testng.xml文件

標(biāo)簽中用parallel和thread-count兩個(gè)屬性聲明多線程:parallel代表級(jí)別,thread-count代表最大并發(fā)線程數(shù)。

3、tests級(jí)別測(cè)試

不同的test標(biāo)簽(tag)下的用例可以在不同的線程下執(zhí)行

配置文件如下:

復(fù)制代碼
xml version="1.0" encoding="utf-8" ?>
DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="sml多線程測(cè)試" parallel="tests" thread-count="2">
    <test name="threadTest1">
        <classes>
            <class name="com.testng.demo.MultiThreadedByXml"/>
        classes>
    test>
suite>
復(fù)制代碼

通過xml運(yùn)行效果如下:

 

相同的test標(biāo)簽(tag)下的用例只能在同一個(gè)線程中去執(zhí)行

配置文件如下:
復(fù)制代碼
xml version="1.0" encoding="utf-8" ?>
DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="sml多線程測(cè)試" parallel="tests" thread-count="2">
    <test name="threadTest1">
        <classes>
            <class name="com.testng.demo.MultiThreadedByXml"/>
            <class name="com.testng.demo.MultiThreadedByXml"/>
        classes>
    test>
suite>
復(fù)制代碼

通過xml運(yùn)行效果如下:

4、methods級(jí)別測(cè)試

所有用例在不同的線程下去執(zhí)行

配置文件如下:

復(fù)制代碼
xml version="1.0" encoding="utf-8" ?>
DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="sml多線程測(cè)試" parallel="methods" thread-count="2">
    <test name="threadTest1">
        <classes>
            <class name="com.testng.demo.MultiThreadedByXml"/>
        classes>
    test>
suite>
復(fù)制代碼

通過xml運(yùn)行效果如下:

5、classs級(jí)別測(cè)試

相同的classes標(biāo)簽下的用例在同一個(gè)線程中執(zhí)行

配置文件如下:

復(fù)制代碼
xml version="1.0" encoding="utf-8" ?>
DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="sml多線程測(cè)試" parallel="classes" thread-count="2">
    <test name="threadTest1">
        <classes>
            <class name="com.testng.demo.MultiThreadedByXml"/>
        classes>
    test>
suite>
復(fù)制代碼

通過xml運(yùn)行效果如下:

不同的classes標(biāo)簽下的用例可以在不同的線程下執(zhí)行

復(fù)制代碼
xml version="1.0" encoding="utf-8" ?>
DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="sml多線程測(cè)試" parallel="classes" thread-count="2">
    <test name="threadTest1">
        <classes>
            <class name="com.testng.demo.MultiThreadedByXml"/>
        classes>
    test>
    <test name="threadTest2">
        <classes>
            <class name="com.testng.demo.MultiThreadedByXml2"/>
        classes>
    test>
suite>
復(fù)制代碼

通過xml運(yùn)行效果如下: