Jenkins测试结果分析插件误判全跳过用例的父类及包为通过
解决Jenkins Test Results Analyzer插件误报全跳过测试套件为"通过"的问题
我之前也踩过这个插件的坑!当测试套件/包下所有用例都是跳过状态时,插件会错误地把父节点标记为"通过",完全没反映真实的跳过状态。这里有几个实用的处理方案:
1. 调整插件配置(优先尝试)
部分版本的Test Results Analyzer插件其实有隐藏的配置逻辑,你可以找找看:
- 去Jenkins全局配置或项目配置页翻一翻,有没有**"将全跳过的套件标记为跳过"**这类选项,勾选后就能修正判断逻辑。
- 如果找不到可视化配置,也可以尝试修改插件的配置文件(一般在
$JENKINS_HOME/plugins/testresultsanalyzer/目录下),添加markSkippedSuitesAsSkipped=true这类参数。
2. 预处理JUnit测试报告
如果插件本身没提供配置项,你可以在Jenkins解析报告前,用脚本修改JUnit XML文件的统计逻辑:
- 写个简单的脚本(Python/Shell都可以),遍历所有
<testsuite>节点,当发现tests="0"但skipped>0时,调整属性让插件正确识别。 - 比如你给出的测试片段里,
tests="0"但实际有2个跳过用例,插件可能只认tests属性的数值,忽略了实际的<testcase>节点。把tests改成和skipped一致的2,就能让插件正确统计状态。
给你一段Python处理脚本的示例(用xml.etree.ElementTree操作):
import xml.etree.ElementTree as ET # 读取原始测试报告 tree = ET.parse('your-test-results.xml') root = tree.getroot() # 遍历所有测试套件节点 for testsuite in root.findall('testsuite'): tests_count = int(testsuite.get('tests')) skipped_count = int(testsuite.get('skipped')) # 检测全跳过的情况 if tests_count == 0 and skipped_count > 0: # 修正tests属性,让插件统计真实的用例数 testsuite.set('tests', str(skipped_count)) # 可选:添加自定义属性标记状态 testsuite.set('custom_status', 'skipped') # 保存修改后的报告 tree.write('modified-test-results.xml')
3. 切换替代插件
如果上面的方法都不太行,可以考虑换成逻辑更严谨的测试报告插件:
- Jenkins自带的JUnit Plugin:原生插件能正确识别全跳过的套件,会显示为"跳过"状态,不会误报。
- 如果是TestNG测试,TestNG Results Plugin对跳过状态的处理也更准确。
附你提到的JUnit测试片段:
<testsuite name="7-_Test_Business" tests="0" skipped="2" errors="0" failures="0" time="0.012"> <testcase time="0" classname="7-_Test_Business.7-1_OXE" name="7-1-1-1a_-_Initialize_SIP_session"> <skipped/> </testcase> <testcase time="0" classname="7-_Test_Business.7-1_OXE" name="7-1-1-1b_-_Skipped_Test_Example"> <skipped/> </testcase> </testsuite>
内容的提问来源于stack exchange,提问作者npenna22
相关产品推荐
相关产品推荐

