使用TestArchiver导入Robot Framework测试结果至PostgreSQL时遇starttime缺失错误
解决TestArchiver解析Robot Framework output.xml时的KeyError: 'starttime'问题
问题原因
TestArchiver的解析逻辑默认认为Robot Framework生成的output.xml中<status>标签包含starttime和endtime属性,但你的测试结果文件里缺失这些字段,导致解析时触发KeyError。
解决方案
1. 重新生成包含时间字段的output.xml
Robot Framework默认会在output.xml中生成starttime和endtime字段,可能是测试执行时的特殊配置或旧版本导致字段丢失:
- 检查测试执行命令,确保没有使用
--nostatusrc或其他会抑制状态时间字段的参数; - 升级Robot Framework到稳定版本(如4.x/5.x系列),重新执行测试生成完整的output.xml。
2. 修改TestArchiver源码做容错处理
如果无法重新生成output.xml,可修改TestArchiver的解析逻辑,兼容缺失时间字段的情况:
- 找到TestArchiver安装目录下的
output_parser.py文件(路径示例:/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/test_archiver/output_parser.py); - 定位到报错的代码段(约第91行附近),将直接调用
attrs.getValue('starttime')的代码改为容错写法:
# 原代码 self.archiver.begin_status(attrs.getValue('status'), attrs.getValue('starttime'), attrs.getValue('endtime')) # 修改后代码 starttime = attrs.get('starttime', '') endtime = attrs.get('endtime', '') self.archiver.begin_status(attrs.getValue('status'), starttime, endtime)
- 保存修改后重新执行导入命令。
3. 手动补全output.xml的时间字段
如果output.xml是静态文件,可批量为<status>标签添加starttime和endtime属性,格式需符合Robot Framework的时间规范(如YYYY-MM-DDTHH:MM:SS):
<!-- 示例修改后的<status>标签 --> <status status="PASS" starttime="2024-05-20T10:00:00" endtime="2024-05-20T10:05:00"/>
内容的提问来源于stack exchange,提问作者Pasin Chantharathan
相关产品推荐
相关产品推荐

