為什么要使用多線程測試?
在實際測試中,為了節省測試時間,提高測試效率,在實際測試場景中經常會采用多線程的方式去執行,比如爬蟲爬數據,多瀏覽器並行測試。
關於多線程並行測試
TestNG中實現多線程並行執行,可以通過以下幾種方法:
- @Test注解的形式
- Xml文件的配置的形式
本文着重介紹下以xml形式實現多線程測試的方法,來讓我們開始吧
如何實現?
1、編寫測試類
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()); } }
2、編寫testng.xml文件
在<suite>標簽中用parallel和thread-count兩個屬性聲明多線程:parallel代表級別,thread-count代表最大並發線程數。
3、tests級別測試
不同的test標簽(tag)下的用例可以在不同的線程下執行
配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="sml多線程測試" parallel="tests" thread-count="2"> <test name="threadTest1"> <classes> <class name="com.testng.demo.MultiThreadedByXml"/> </classes> </test> </suite>
通過xml運行效果如下:
相同的test標簽(tag)下的用例只能在同一個線程中去執行
配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="sml多線程測試" parallel="tests" thread-count="2"> <test name="threadTest1"> <classes> <class name="com.testng.demo.MultiThreadedByXml"/> <class name="com.testng.demo.MultiThreadedByXml"/> </classes> </test> </suite>
通過xml運行效果如下:
4、methods級別測試
所有用例在不同的線程下去執行
配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="sml多線程測試" parallel="methods" thread-count="2"> <test name="threadTest1"> <classes> <class name="com.testng.demo.MultiThreadedByXml"/> </classes> </test> </suite>
通過xml運行效果如下:
5、classs級別測試
相同的classes標簽下的用例在同一個線程中執行
配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="sml多線程測試" parallel="classes" thread-count="2"> <test name="threadTest1"> <classes> <class name="com.testng.demo.MultiThreadedByXml"/> </classes> </test> </suite>
通過xml運行效果如下:
不同的classes標簽下的用例可以在不同的線程下執行
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="sml多線程測試" 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>
通過xml運行效果如下:
注意:thread-count: 代表了最大並發線程數,xml文件配置這種方式不能指定線程池,只有方法上才可以指定線程池
本文完,還不動手試一試········