TestNG - 自定义报告器

  • 简述

    在本节中,我们将通过一个示例介绍编写自定义报告器并将其附加到 TestNG 的方法。要编写自定义报告器类,我们的扩展类应该实现 IReporter 接口。让我们继续使用自定义报告器创建一个示例。
  • 创建测试用例类

    创建一个java类,比如说, SampleTest.java/work/testng/src.
    
    import org.testng.Assert;
    import org.testng.annotations.Test;
    public class SampleTest {
       @Test
       public void testMethodOne() {
          Assert.assertTrue(true);
       }
       @Test
       public void testMethodTwo() {
          Assert.assertTrue(false);
       }
       @Test(dependsOnMethods = {"testMethodTwo"})
       public void testMethodThree() {
          Assert.assertTrue(true);
       }
    }
    
    前面的测试类包含三个测试方法,其中testMethodOnetestMethodThree将在执行时通过,而testMethodTwo通过将false布尔值传递给 Assert.assertTrue 方法而失败,该方法用于测试中的真值条件。
  • 创建自定义报告类

    创建另一个名为的新类 CustomReporter.java/work/testng/src.
    
    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;
    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());
             }
          }
       }
    }
    
    前面的类实现了org.testng.IReporter接口。它实现该方法的定义generateReport中的IReporter接口。该方法需要三个参数 -
    • xmlSuite,这是正在执行的 testng XML 中提到的套件列表。
    • suites,其中包含测试执行后的套件信息。该对象包含有关包、类、测试方法及其测试执行结果的所有信息。
    • outputDirectory,其中包含将生成报告的输出文件夹路径的信息。
  • 创建 testng.xml

    在中创建 testng.xml /work/testng/src 执行测试用例。
    
    <?xml version = "1.0" encoding = "UTF-8"?>
    <suite name = "Simple Reporter Suite">
       <listeners>
          <listener class-name = "CustomReporter" />
       </listeners>
       <test name = "Simple Reporter test">
          <classes>
             <class name = "SampleTest" />
          </classes>
       </test>
    </suite>
    
    使用 javac 编译 SampleTest、CustomReporter 类。
    
    /work/testng/src$ javac CustomReporter.java SampleTest.java
    
    现在,运行 testng.xml。
    
    /work/testng/src$ java org.testng.TestNG testng.xml
    
    验证输出。
    
    ===============================================
    Simple Reporter Suite
    Total tests run: 3, Failures: 1, Skips: 1
    ===============================================
    Passed tests for suite 'Simple Reporter Suite' is:1
    Failed tests for suite 'Simple Reporter Suite' is:1
    Skipped tests for suite 'Simple Reporter Suite' is:1
    
    前面的示例显示了一个简单的自定义报告器,它在控制台上为包含在所述测试执行中的每个套件打印失败、通过和跳过的测试数量。Reporter 主要用于生成测试执行的最终报告。该扩展程序可用于根据报告要求生成 XML、HTML、XLS、CSV 或文本格式文件。