pabot --testlevelsplit执行时log.html仅显示通过用例问题排查
Robot Framework Pabot 执行异常排查
问题现象
- 执行命令
pabot --testlevelsplit Tests/demo.robot运行测试时,终端明确提示用例「Fill the login form and select "Teacher" from the User option」执行失败,但生成的log.html中未展示该失败用例,仅显示通过的测试用例。 - 上述失败用例单独运行可正常通过,执行原生Robot命令
robot /Test/demo.robot跑全量用例时,3条测试用例全部通过,且所有用例都能在log.html中正常展示。
参考截图
- 代码截图:

- 仅显示2条通过用例的终端输出截图:

- 原生Robot执行全量通过的日志截图:

根因分析&解决方案
1. 日志丢失失败用例问题
该问题由Pabot旧版本的已知bug导致:当测试用例名包含双引号这类特殊字符时,--testlevelsplit模式下分片执行完成后,结果合并逻辑无法正确匹配带特殊字符的用例ID,最终导致对应用例的执行记录被丢弃,不会出现在合并后的日志文件中。
对应修复方案:
- 执行
pip install -U robotframework-pabot将Pabot升级到最新稳定版本,新版本已经修复了特殊字符用例名的结果匹配问题,升级后重新执行命令即可正常展示所有用例的执行结果。 - 如果暂时无法升级Pabot,可以直接修改对应失败用例的名称,把名称里的双引号替换为单引号或者直接去掉,再重新执行即可解决结果丢失问题。
- 临时排查可以在执行Pabot命令时加上
--artifacts ./pabot_mid_results参数,指定中间结果存储目录,执行后可以在该目录下找到每个分片独立生成的output.xml文件,直接查看失败用例的详细报错,不受合并逻辑bug影响。
2. 并行执行失败、串行执行全过问题
该问题是典型的测试用例无隔离导致的并行执行冲突:--testlevelsplit模式下Pabot会为每个测试用例启动独立的执行进程,如果测试用例之间共享了全局资源,比如共用同一个浏览器Driver实例、共用同一个登录态、操作同一个测试账号/测试数据没有加锁,并行执行时就会出现资源抢占,导致用例随机失败;而串行执行(包括单独跑用例、原生Robot全量跑)时不存在资源抢占,所以所有用例都能正常通过。
对应修复方案:
- 先执行
pabot --testlevelsplit --processes 1 Tests/demo.robot强制Pabot用单进程串行执行所有用例,如果此时用例全部通过且日志完整,即可确认是资源隔离问题。 - 调整测试用例的初始化/清理逻辑,确保每个用例执行时都会启动独立的浏览器实例、使用独立的测试数据,执行完成后自动清理对应资源,避免用例之间的状态干扰。
- 如果暂时无法完成用例隔离,可以先去掉
--testlevelsplit参数,使用Pabot默认的按测试文件分片的模式执行,降低同文件下用例的资源冲突概率。
内容的提问来源于stack exchange,提问作者ssan
相关产品推荐
相关产品推荐

