《手把手教你》系列基礎篇(八十三)-java+ selenium自動化測試-框架設計基礎-TestNG測試報告-下篇(詳解教程)

1.簡介

  其實前邊好像簡單的提到過測試報告,宏哥覺得這部分比較重要,就著重講解和介紹一下。報告是任何測試執行中最重要的部分,因為它可以幫助用戶了解測試執行的結果、失敗點和失敗原因。另一方面,日誌記錄對於密切關注執行流程或在出現任何故障時進行調試很重要。默認情況下,TestNG 會為其測試執行生成不同類型的報告。這包括一個 HTML 和一個 XML 報告輸出。TestNG 還允許其用戶編寫自己的報告程式並將其與 TestNG 一起使用。還有一個選項可以編寫自己的記錄器,TestNG 在運行時會通知這些記錄器。

  本篇文章宏哥主要是將通過一個示例介紹編寫自定義報告器並將其附加到 TestNG 的方法。要編寫自定義報告器類,我們的擴展類應該實現 IReporter 介面。讓我們繼續使用自定義報告器創建一個示例。

2.使用 TestNG 生成報告的方法

(1)Listeners− 為了實現監聽器類,該類必須實現org.testng.ITestListener介面。當測試開始、完成、失敗、跳過或通過時,TestNG 在運行時通知這些類。

(2)IReporters− 為了實現一個報告類,該類必須實現一個org.testng.IReporter介面。當整個套件運行結束時調用這些類。包含整個測試運行資訊的對象在調用時傳遞給這個類。

3.自定義報告器

3.1創建測試用例類

1.按照宏哥前邊的方法,創建一個TestNG類,並命名為:TestReport。這裡宏哥直接沿用上一篇文章中的測試類。如下圖所示:

2.然後進行腳本編輯,前面的測試類包含三個測試方法,其中testMethodOnetestMethodThree將在執行時通過,而testMethodTwo通過將false布爾值傳遞給 Assert.assertTrue 方法而失敗,該方法用於測試中的真值條件。程式碼設計如下圖所示:

3.參考程式碼如下:

package library;

import org.testng.Assert;
import org.testng.annotations.Test;

/**
 * @author 北京-宏哥
 * 
 * @公眾號:北京宏哥
 * 
 * 《手把手教你》系列基礎篇(八十三)-java+ selenium自動化測試-框架設計基礎-TestNG測試報告-下篇(詳解教程)
 *
 * 2022年3月10日
 */

public class TestReport {

    @Test
    public void testMethodOne() {
        Assert.assertTrue(true);
    }

    @Test
    public void testMethodTwo() {
        Assert.assertTrue(false);
    }

    @Test(dependsOnMethods = { "testMethodTwo" })
    public void testMethodThree() {
        Assert.assertTrue(true);
    }
}

3.2創建自定義報告類

1.在 F:/workspace/Bjhg_Selenium/src/library中創建另一個命名為的新類 CustomReporter.java ,如下圖所示:

2.程式碼設計如下圖所示:

前面的類實現了org.testng.IReporter介面。它實現該方法的定義generateReport中的IReporter介面。該方法需要三個參數

① xmlSuite,這是正在執行的 testng XML 中提到的套件列表。

② suites,其中包含測試執行後的套件資訊。該對象包含有關包、類、測試方法及其測試執行結果的所有資訊。

③ outputDirectory,其中包含將生成報告的輸出文件夾路徑的資訊。

3.參考程式碼如下:

package library;

import java.util.List;
import java.util.Map;
import org.testng.IReporter;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.xml.XmlSuite;

/**
 * @author 北京-宏哥
 * 
 * @公眾號:北京宏哥
 * 
 * 《手把手教你》系列基礎篇(八十三)-java+ selenium自動化測試-框架設計基礎-TestNG測試報告-下篇(詳解教程)
 *
 * 2022年3月11日
 */

public class CustomReporter implements IReporter{
   @Override
   public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
      String outputDirectory) {
      //Iterating over each suite included in the test
      for (ISuite suite : suites) {
         //Following code gets the suite name
         String suiteName = suite.getName();
         //Getting the results for the said suite
         Map<String, ISuiteResult> suiteResults = suite.getResults();
         for (ISuiteResult sr : suiteResults.values()) {
            ITestContext tc = sr.getTestContext();
            System.out.println("Passed tests for suite '" + suiteName +
               "' is:" + tc.getPassedTests().getAllResults().size());
            System.out.println("Failed tests for suite '" + suiteName +
               "' is:" + tc.getFailedTests().getAllResults().size());
            System.out.println("Skipped tests for suite '" + suiteName +
               "' is:" + tc.getSkippedTests().getAllResults().size());
         }
      }
   }
}

3.3創建testng.xml

1.在F:/workspace/Bjhg_Selenium/src中創建 testng.xml 執行測試用例。如下圖所示:

2.參考XML文件內容如下:

<?xml version = "1.0" encoding = "UTF-8"?>
<suite name = "Simple Reporter Suite">
   <listeners>
      <listener class-name = "library.CustomReporter" />
   </listeners>
   <test name = "Simple Reporter test">
      <classes>
         <class name = "library.TestReport" />
      </classes>
   </test>
</suite>

3.4運行程式碼

1.選中testng.xml文件,右鍵Run AS點擊Test Suit運行。如下圖所示:

2.控制台輸出,如下圖所示:

4.小結

 前面的示例顯示了一個簡單的自定義報告器,它在控制台上為包含在所述測試執行中的每個套件列印失敗、通過和跳過的測試數量。Reporter 主要用於生成測試執行的最終報告。該擴展程式可用於根據報告要求生成 XML、HTML、XLS、CSV 或文本格式文件。