TestNG入門教程-12-Java程式碼執行testng.xml和失敗後重跑
前面我們都在IDEA上右鍵testng.xml檔案來執行testng用例,這個在編寫測試用例過程是 可以這麼做,但是,如果測試用例寫完了,也是這麼做嗎?有沒有什麼方法,例如自動化去實現。測試指令碼維護後期,我們都會考慮持續整合測試,那麼如何把執行測試用例實現自動化呢?網上搜索,很多都是testng在cmd中輸入命令列,但是這個是有缺陷的,第一需要javac命令去編譯你的測試用例,然後才能用這個命令,如果用例很多,你怎麼實現在cmd進行批量編譯呢?這篇,我們就是來解決這個問題,不用關心TestNG環境變數和編譯的事情,為將來的持續整合做好準備。
準備一個TestNG用例
package demo2; import org.testng.Assert; import org.testng.annotations.Test; /** * create by Anthony on 2017/11/18 */ public class ReRunFailedTestCaseDemo { @Test public void test01(){ System.out.println("test01"); } @Test(dependsOnMethods = "test03", alwaysRun = true) public void test02(){ System.out.println("test02"); } @Test public void test03(){ Assert.assertTrue(10==11); System.out.println("test03"); } @Test(dependsOnMethods = "test05", alwaysRun = true) public void test04(){ System.out.println("test04"); } @Test public void test05(){ Assert.assertTrue(12==13); System.out.println("test05"); } }
注意上面我特意寫了兩個執行會失敗的用例,為下面的失敗重跑做準備。下面我們在專案根目錄下testng.xml內容如下。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd"> <suite name="Default Suite"><test name="Testng_learn" ><classes><class name="demo2.ReRunFailedTestCaseDemo"/></classes></test> </suite>
1. 如何在IDEA工具顯示testng執行後的報告輸出
在IDEA這個工具上,執行完一個testng用例或者testng.xml檔案預設在當前專案是沒有任何testng的報告輸出,這個在eclipse是預設自動開啟,所以,我們先要學習下IDEA如何開啟這個。
選擇一個TestNG用例檔案右鍵,然後點選Run-Edit Configuration…
執行步驟1中的testng.xml,你會發現當前專案根目錄下會生成test-output資料夾
這個資料夾下有我們上一次執行的html格式報告,還有跑失敗的用例的xml檔案,本文重點是testng-failed.xml檔案。找到這個檔案,看看是不是步驟1中我設定的兩個執行失敗的用例。
在TestNG中會自動記錄你上一次執行情況,在test-output下會生成html格式報告,和把失敗的用例都放在testng-failed.xml,這個功能很強大。由於有了這個,我們就想,可不可以實現失敗用例從新跑呢。我們手動執行testng-failed.xml當然可以去實現失敗用例重新跑的需求,所以,我們重點在如何實現自動化手段去失敗重新跑。把這個問題再細化,就是如何用Java程式碼是載入執行testng.xml檔案。
2. 準備一個TestNG用例Java程式設計去實現執行相關testng.xml檔案
這裡,我們來解決如何利用Java程式碼來實現執行我們想要的testng.xml檔案。在testng官網教程上解釋瞭如何java程式碼執行用例,但是沒有介紹如何執行testng.xml。我們,寫一個java類檔案,第一個先執行專案根目錄下的testng.xml檔案,然後等執行結束,然後去執行test-output檔案下testng-failed.xml檔案,這樣就達到了自動執行失敗的用例的需求。
package demo2;
import org.testng.TestNG;
import java.util.ArrayList;
import java.util.List;
/**
* create by Anthony on 2017/11/18
*/
public class RunTestNG {
public static void main(String[] args) throws InterruptedException {
TestNG testNG = new TestNG();
List<String> suites = new ArrayList<String>();
suites.add(".\\testng.xml");
//suites.add(".\\test-output\\testng-failed.xml");
testNG.setTestSuites(suites);
testNG.run();
// 等待執行結束,然後去執行失敗用例
TestNG testNG1 = new TestNG();
List<String> suites1 = new ArrayList<String>();
Thread.sleep(5000);
suites1.add(".\\test-output\\testng-failed.xml");
testNG1.setTestSuites(suites1);
testNG1.run();
}
}
看控制檯執行結果:
[TestNG] Running:
C:\Users\Administrator\IdeaProjects\Java_Learn\testng.xml
test01
test02
test04
===============================================
Default Suite
Total tests run: 5, Failures: 2, Skips: 0
===============================================
[TestNG] Running:
C:\Users\Administrator\IdeaProjects\Java_Learn\test-output\testng-failed.xml
===============================================
Failed suite [Default Suite]
Total tests run: 2, Failures: 2, Skips: 0
===============================================
Process finished with exit code 0
看控制檯日誌,顯示先運行了testng.xml,然後在執行testng-failed.xml,所以,達到了我想要的目的。以上,重點是如何Java程式碼是實現testng.xml檔案的執行用例,至於失敗重跑,上面是我個人的方法,網上還有一種方法,是修改Testng監聽類然後寫一個重跑的方法來實現,我個人認為沒有這個必要,如果後面我們介紹了監聽,然後在來看看這第二個方法的實現過程,到時候我們再和這麼內容對比,然後選擇你認為適合你專案的失敗重跑方案。
提示:知道了如何執行一個testng.xml檔案,那麼就知道如何執行幾百條測試用例。舉例,我們有一個webui自動化專案,有幾百條測試用例。一般我們都一個模組用一個testng.xml檔案來進行管理或者一個testng.xml檔案管理多個模組或者全量測試用例。然後寫一個main方法,然執行測試的人員選擇不同模組的代號,通過case語句,我們就可以實現去呼叫執行不同模組下的testng.xml檔案,這個過程完全可以放到Jenkins上做或者cmd命令列。寫過很多指令碼的人,應該明白我的思路,有不明白的也沒關係,慢慢去學習,去積累。