TestNG中用到的annotation的快速預覽及其屬性。安全
註解 | 描述 |
@BeforeSuite | 註解的方法只運行一次,在當前suite全部測試執行以前執行 |
@AfterSuite | 註解的方法只運行一次,在當前suite全部測試執行以後執行 |
@BeforeClass | 註解的方法只運行一次,在當前類中全部方法調用以前執行 |
@AfterClass | 註解的方法只運行一次,在當前類中全部方法調用以後執行 |
@BeforeTest | 只運行一次,全部的測試方法運行以前運行 |
@AfterTest | 只運行一次,全部的測試方法運行以後運行 |
@BeforeGroups | 組的列表,這種配置方法將以前運行。此方法是保證在運行屬於任何這些組第一個測試方法,該方法被調用。 |
@AfterGroups | 組的名單,這種配置方法後運行。此方法是保證運行後不久,最後的測試方法,該方法屬於任何這些組被調用。 |
@BeforeMethod | 在每個測試方法(@test)運行以前運行,例:執行完測試用例後要重置數據才能執行第二條用例時,可用之種方式。 |
@AfterMethod | 在每個測試方法(@test)運行以後運行 |
@DataProvider |
標誌着一個方法,提供數據的一個測試方法。註解的方法必須返回一個Object[] [],其中每一個對象[]的測試方法的參數列表中能夠分配。
該@Test 方法,但願從這個DataProvider的接收數據,須要使用一個dataProvider名稱等於這個註解的名字。 |
@Factory | 做爲一個工廠,返回TestNG的測試類的對象將被用於標記的方法。該方法必須返回Object[]。 |
@Listeners | 定義一個測試類的監聽器 |
@Parameters | 介紹如何將參數傳遞給@Test方法。 |
@Test | 標記一個類或方法做爲測試的一部分。 |
如下是使用註釋/註解的一些好處:多線程
TestNG經過查找註釋/註解來識別它感興趣的方法。 所以,方法名稱不限於任何模式或格式。併發
能夠將其餘參數傳遞給註釋。框架
註釋是強類型的,因此編譯器會立刻標記任何錯誤。ide
測試類再也不須要擴展任何東西(如TestCase,對於JUnit3)。測試
下面的例子是輸出進程ID,threadPoolSize用來指明線程池的大小,也就是併發的線程數目是多少ui
5次調用,有3個線程可調用spa
package com.course.testng.multiThread; import org.testng.annotations.Test; /** * @author 北京-宏哥 * * Java自動化測試框架-11 - TestNG之annotation與併發測試篇 * * 2019年11月11日 */ //多線程測試,沒有關聯的用例可使用多線程減小執行時間 public class MuitiThreadOnAnnotion { @Test(invocationCount = 5,threadPoolSize = 3) public void test() { System.out.println(1); System.out.printf("Thrad Id : %s%n",Thread.currentThread().getId()); } }
TestNG能夠以多線程的模式運行全部的test,這樣能夠得到最大的運行速度,最大限度的節約執行時間。固然,併發運行也是有代價的,就是須要咱們的代碼是線程安全的。線程
併發運行測試的話,須要咱們指定運行的配置文件,一個示例以下:code
<suite name="My suite" parallel="methods" thread-count="4">
說明:在當前測試規劃的執行過程當中,爲每一個測試方法的執行使用單獨的線程,最多併發4個線程。
<suite name="My suite" parallel="tests" thread-count="4">
說明:在當前測試規劃的執行過程當中,爲每一個測試用例的執行使用單獨的線程(該測試用例中的測試方法共享一個線程),最多併發4個線程。
<suite name="My suite" parallel="classes" thread-count="4">
說明:在當前測試規劃的執行過程當中,爲每一個測試類的執行使用單獨的線程(該測試類中的測試方法共享一個線程),最多併發4個線程。
<suite name="My suite" parallel="instances" thread-count="4">
說明:在當前測試規劃的執行過程當中,爲每一個測試類實例的執行始終使用惟一的線程(該測試實例中的測試方法共享一個線程),最多併發4個線程。
注意:這裏的parallel默認值爲"none"。曾經的"true", "false"已通過時了,不建議使用。
1.Parallel=」methods」的意思是指TestNG會將method做爲併發的元子單位,即每一個method運行在本身的thread中。若是parallel=」tests」,則指會將test 做爲併發的元子單位
2.Thread-count=」2」是指,運行的時候,併發度爲2,同時會有兩個線程在運行。
package com.course.testng.multiThread; import org.testng.annotations.Test; /** * @author 北京-宏哥 * * Java自動化測試框架-11 - TestNG之annotation與併發測試篇 * * 2019年11月12日 */ public class Test1 { @Test(groups = { "t8"}) public void aThreadPool() { System.out.println("#ThreadA: " +Thread.currentThread().getId()); } @Test(groups = { "t8"}) public void bThreadPool() { System.out.println("#ThreadB: " +Thread.currentThread().getId()); } @Test(groups = { "t8"}) public void cThreadPool() { System.out.println("#ThreadC: " +Thread.currentThread().getId()); } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test name="Test" parallel="methods" thread-count="2"> <classes> <class name="com.course.testng.multiThread.Test1"/> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test name="Test" parallel="tests" thread-count="2"> <classes> <class name="com.course.testng.multiThread.Test1"/> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
好了,今天關於TestNG之annotation與併發測試篇 ,就分享到這裏。