(五)TestNG測試的並發執行詳解


原文鏈接: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() {
  }
}

  

  

  

 

  

  

  

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM