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); } }
前面的测试类包含三个测试方法,其中testMethodOne和testMethodThree将在执行时通过,而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 或文本格式文件。