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.然后进行脚本编辑,前面的测试类包含三个测试方法,其中testMethodOne和testMethodThree将在执行时通过,而testMethodTwo通过将false布尔值传递给 Assert.assertTrue 方法而失败,该方法用于测试中的真值条件。代码设计如下图所示:
3.参考代码如下:
代码语言:javascript复制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.参考代码如下:
代码语言:javascript复制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文件内容如下:
代码语言:javascript复制<?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 或文本格式文件。