原文鏈接:https://blog.csdn.net/taiyangdao/article/details/52159065
TestNG在執行測試時,默認suitethreadpoolsize=1,-randomizesuites=false,即非並發順序執行測試。
但是TestNG提供了多種方式,以支持測試的並發多線程執行。
1. 針對多個測試規划的情況,為每個testng*.xml配置文件使用獨立的線程執行
java org.testng.TestNG -suitethreadpoolsize 3 testng1.xml testng2.xml testng3.xml
通過使用啟動參數suitethreadpoolsize,為每個測試規划文件分配一個線程並發執行。
2. 在一個測試規划中,指定其線程並發的策略
1).通過啟動測試的命令行參數-parallel
啟動參數-parallel用以設置測試執行的默認並發策略。之所以說“默認並發策略”,是因為這里的設置可以被testng.xml配置文件中的並發策略所覆蓋。
另外,啟動測試時不設置-parallel參數,則默認策略是不使用並發線程。但究竟是否並發執行,還要看testng.xml中的配置。
java org.testng.TestNG -parallel methods -threadcount 4 testng.xml
說明:在當前測試規划的執行過程中,為每個測試方法的執行使用單獨的線程,最多並發4個線程。對比於其他並發策略,測試方法的並發粒度最小,所以這也是最大程度的並發策略。
java org.testng.TestNG -parallel tests -threadcount 4 testng.xml
說明:在當前測試規划的執行過程中,為每個測試用例的執行使用單獨的線程(該測試用例中的所有測試方法共享一個線程),最多並發4個線程。
java org.testng.TestNG -parallel classes -threadcount 4 testng.xml
說明:在當前測試規划的執行過程中,為每個測試類的執行使用單獨的線程(該測試類中的所有測試方法共享一個線程),最多並發4個線程。
2).通過testng.xml配置文件
<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"已經過時了,不建議使用。
3. 在測試方法中,指定其可用的線程池
還可以單獨為一個測試方法指定可使用的線程池,示例如下:
@Test(threadPoolSize = 3, invocationCount = 10, timeOut = 10000) public void testServer() {...}
說明:該測試方法可在3個線程中並發執行,共被調用10次,執行超時10秒。
4. @DataProvider的並發
在定義數據源的時候,不僅僅可以為數據源指定name,還可以為其指定parallel屬性,示例如下:
@DataProvider(name = "test1", parallel = true) public Object[][] createData1() { return new Object[][] { { "Cedric", new Integer(36) }, { "Anne", new Integer(37)}, }; }
說明:parallel屬性默認false,表示使用該數據源的測試方法不能並發執行。parallel屬性設置為true,表示使用該數據源的測試方法可以並發執行。
5. 注意:
在定義測試類的時候,如果@Test使用了singleThreaded=true屬性,則該測試類的所有測試方法都只能在單線程中執行,無論其他設置如何。示例如下:
@Test(singleThreaded=true) public class Test1 { public void test1() { } public void test2() { } }