TestNG 7.x版本套件层级报告无法识别通过SkipException跳过的测试
问题原因
TestNG 7.x对跳过测试的统计逻辑做了默认调整:仅因依赖失败、配置执行失败导致的被动跳过用例,才会被计入套件层级的skipped统计中;测试代码/监听器中主动抛出SkipException的用例,默认不会被纳入套件层级的跳过统计。
解决方法
方法1:修改testng.xml配置(最简单)
在<suite>标签中添加skipped-policy="ALL"属性,强制套件层级统计所有类型的跳过用例,修改后的配置如下:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" > <suite name="TestSuite" verbose="2" skipped-policy="ALL"> <test name="MyTests"> <classes> <class name="MyTestClass"> <methods> <include name="testMethod"></include> </methods> </class> </classes> </test> </suite>
注意:原配置中存在中文双引号的语法问题,会导致TestNG解析xml失败,修改配置时请统一使用英文双引号。
配置修改后重新执行测试,套件层级就能正常统计主动抛出SkipException的跳过用例。
方法2:自定义统计逻辑
如果不想修改全局配置,可以直接使用你在ITestListener中已经存入ITestContext的测试结果集合统计数据,避免依赖TestNG自带的统计逻辑。另外你贴出的ISuiteListener代码存在语法错误,修正后自定义统计的示例如下:
public class MySuiteListener implements ISuiteListener { @Override public void onStart(ISuite suite) { } @Override public void onFinish(ISuite suite) { int totalPass = 0; int totalFail = 0; int totalSkip = 0; Map<String, ISuiteResult> results = suite.getResults(); for (Map.Entry<String, ISuiteResult> result : results.entrySet()) { ISuiteResult suiteResult = result.getValue(); ITestContext suiteContext = suiteResult.getTestContext(); // 直接读取你在ITestListener中存储的自定义结果集合 List<ITestResult> allResults = (List<ITestResult>) suiteContext.getAttribute("myTest"); for (ITestResult r : allResults) { switch (r.getStatus()) { case ITestResult.SUCCESS: totalPass++; break; case ITestResult.FAILURE: totalFail++; break; case ITestResult.SKIP: totalSkip++; break; } } } Logger.print("passed=" + totalPass, "failed=" + totalFail, "skipped=" + totalSkip); } }
内容的提问来源于stack exchange,提问作者Nalluseye
相关产品推荐
相关产品推荐

