如何在Jenkins中实现Robot Framework跳过测试用例的重跑
实现Robot Framework跳过测试用例的重跑功能
问题分析
当前Jenkins流水线中配置rerun_failed: "true"仅能重跑**失败(FAIL)的Robot Framework测试用例,而首次执行时因依赖关系被标记为跳过(SKIP)**的用例无法被纳入重跑范围——这是因为Robot Framework原生的--rerunfailed参数仅识别输出文件中标记为失败的用例记录。
解决方案
方法1:通过命令行工具生成自定义重跑列表
- 首次测试完成后,解析Robot Framework的
output.xml文件,提取所有状态为FAIL和SKIP的用例名称:# 用xmllint提取目标用例并写入重跑列表文件 xmllint --xpath '//testcase[@status="FAIL" or @status="SKIP"]/@name' output.xml | sed 's/ name="\([^"]*\)"/\1\n/g' > rerun_skipped_failed.txt - 在Jenkins流水线的重跑阶段,使用
--testfile参数指定这个自定义列表执行重跑:stage('Rerun Failed & Skipped Tests') { when { expression { params.rerun_failed == "true" } } steps { sh ''' robot --testfile rerun_skipped_failed.txt --outputdir rerun_results your_test_suite.robot ''' } }
方法2:自定义Robot Listener记录需重跑的用例
- 编写一个Python监听脚本,在测试结束后自动收集失败和跳过的用例:
from robot.api import ExecutionResult class RerunSkippedCollector: def close(self): result = ExecutionResult('output.xml') target_tests = [] # 递归遍历所有测试套件和用例 def traverse_suite(suite): for test in suite.tests: if test.status in ('FAIL', 'SKIP'): target_tests.append(f"{suite.longname}.{test.name}") for sub_suite in suite.suites: traverse_suite(sub_suite) traverse_suite(result.suite) # 写入重跑列表文件 with open('rerun_targets.txt', 'w') as f: f.write('\n'.join(target_tests)) - 首次执行测试时加载该监听脚本:
robot --listener RerunSkippedCollector.py your_test_suite.robot - 重跑阶段读取生成的
rerun_targets.txt执行用例即可
额外优化
重跑完成后,可以用rebot命令合并首次和重跑的测试结果,生成统一报告:
rebot --merge output.xml rerun_results/output.xml --output final_output.xml
内容的提问来源于stack exchange,提问作者Gunjan Chhabra
相关产品推荐
相关产品推荐

