1. 程式人生 > >TestNG入門教程-12-Java程式碼執行testng.xml和失敗後重跑

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命令列。寫過很多指令碼的人,應該明白我的思路,有不明白的也沒關係,慢慢去學習,去積累。