TestNG是一個非常好用d自動化測試框架,對於經常使用selenium做web端UI測試的童鞋來說是個不錯的工具。
具備基本常識的測試童鞋們,可能需要知道存在即合理,存在即有用的道理。任何一個工具,或者一件事的存在如果令人得不到益處,那么是不會有人繼續使用的。這個常識基本上人人都懂。
在自動化測試,TestNG是個非常好用的框架。在實際項目中,會有成千上百個測試用例進行執行,這時候需要用到並發執行測試。在TestNG中,提供了很好的並發執行的方法。下面從4個方面來理一下
TestNG對並發執行的處理。
1. TestNG並發執行測試的實現方法【Suite.xml, testng.xml etc 】
2. TestNG並發執行測試的測試用例執行順序控制[ preserve-order, priority ]
3. TestNG並發執行測試用例的優先級控制 [ priority = 0, 1, 2, 3, 4 ....]
4. 設置TestNG對某些測試用例作為選測或者忽略測試的控制【optional 】
下面1 1 詳細具體來說。
1. TestNG里有suite的概念,即可以把多個測試用例放在一個***testng.xml的XML文件中執行,里面有定義好的要測的測試用例。舉個栗子。
<suite name="Test-class Suite" parallel="tests" thread-count="2">
<test name="test-method One">
<parameter name="test-name" value="test-method One" />
<classes>
<class name="testngcase.ParallelSuiteTest" />
</classes>
</test>
<test name="test-method Two">
<parameter name="test-name" value="test-method Two" />
<classes>
<class name="testngcase.ParallelSuiteTest" />
</classes>
</test>
</suite>
在測試項目目錄下創建xml文件,設定好要測試的測試用例,如上碼好,不要遺漏。同時,這里需要在類方法里有對應的@BeforeTest注解,和@Parameters({"param-name"})來完成測試用例到XML文件的
照應關系,注意param-name必須跟xml文件里的parameter name值 1 1對應。好了,這樣就完成一個並發用例的執行,右鍵Run As TestNG class即可。
2. 如果想要進一步的對測試套集里的測試用例執行順序進行限定和設置的話,那么可以用到TestNG的另一個屬性preserve-order, 當preserve-order="true", 表示測試用例按照XML文件里所列的順序進行順序執行,當preserve-order="false"時,表示測試用例不會按照XML文件里的順序進行順序執行,即會有亂序執行。
<xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test_testng">
<test name="test" preserve-order="true">
<classes>
<class name="testngcase.ParallelClassesTestOne"></class>
<class name="testngcase.ParallelClassesTestTwo"></class>
</classes>
</test>
</suite>
如上一個使用preserve-order來控制測試用例執行的順序的xml文件,實際執行的時候,將會按照上面給定的順序1次執行ParallelClassesTestOne, ParallelClassesTestTwo兩個測試用例。
3. 如果還想有其他的自如控制用例執行順序的需求,那么TestNG提供了一個priority關鍵字,可以自行設定。具體見栗子。
@Test(priority=1)
public void testMethodOne() {
long id=Thread.currentThread().getId();
System.out.println("Sample test-method One. Thread id is:"+id);
}
@Test(priority=2)
public void testMethodTwo() {
long id=Thread.currentThread().getId();
System.out.println("Sample test-method Two. Thread id is:"+id);
}
上面兩個測試方法上分別在@Test后加了priority=*的設定,通過設定priority的值來控制方法執行的順序,值越大,執行順序越靠后。
4. 其他有助於測試用例的執行的關鍵字,對於執行用例時因為各種因素可能出現的狀況而不能執行時,可以采用在@Test(enabled=false)設定來忽略某些測試方法。
@Test(enabled=false)
public void testMethodTwo() {
long id=Thread.currentThread().getId();
System.out.println("Sample test-method Two. Thread id is:"+id);
}
這樣做了標注后就達到里忽略此測試方法的目的。
另外一個關鍵字,@Optional通常用在@Parameters相關的測試方法下,對於在xml文件中沒有對參數值給出值的參數,給出一個備選的值,以免執行出現問題。
以上4點總結,關於TestNG在並發執行用例上的使用,個人小左,歡迎補充和指正~~~