我正在尝试修改我的Java测试套件,以便不报告跳过的测试来满足业务需求。
TestNG允许您编写自定义报告器和侦听器,但是在这种情况下,我想修改Jenkins和SonarQube实例使用的Junit报告。
深入到testNG代码,我看到了:
private void initializeDefaultListeners() {
m_testListeners.add(new ExitCodeListener(this));
if (m_useDefaultListeners) {
addReporter(SuiteHTMLReporter.class);
addReporter(Main.class);
addReporter(FailedReporter.class);
addReporter(XMLReporter.class);
if (System.getProperty("oldTestngEmailableReporter") != null) {
addReporter(EmailableReporter.class);
} else if (System.getProperty("noEmailableReporter") == null) {
addReporter(EmailableReporter2.class);
}
addReporter(JUnitReportReporter.class);
if (m_verbose != null && m_verbose > 4) {
addListener(new VerboseReporter("[TestNG] "));
}
}
因此看来,testNG默认情况下启用了JUnitReportReporter,因此扩展该类将不会产生预期的效果。
Java中是否有一种方法可以挂接到该类并对我的generateReport方法进行更改,或者在运行时修改该类?
我可以修补testNG本身,但这似乎不是可持续的或良好的做法,或者我可以重做我的Build Automation流程,但是该流程归另一个团队所有,所以我更喜欢其他东西。
您可以采用多种方法来解决此问题。
请确保您使用的是TestNG的最新发行版[当前为6.13.1 ]
方法#1:类路径覆盖
在这种方法中,您基本上从复制org.testng.reporters.JUnitReportReporter
项目开始,然后在本地对其进行更改以适应您的需求。这将欺骗Java首先找到您的变体,而忽略TestNG中的内容。然后,您可以修改类以适合您的需求。
方法2:禁用默认侦听器
使用TestNG,可以通过将属性设置为usedefaultlisteners
来禁用默认侦听器false
。下面是如何通过Maven做到这一点。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
</configuration>
</plugin>
</plugins>
</build>
您现在可以构建自己的报告程序变体,然后注入它。
方法3:让您的听众按顺序运行
默认情况下,TestNG不允许您定义侦听器的顺序。但是有一种方法可以做到这一点。
我为此创建了一个博客文章,其中讨论了如何让TestNG按顺序执行侦听器。您可以在此处参考更多信息。
您可以选择任何一种适合您的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句