Output文件夹移出RobotFramework仓库后log.html无法显示图片
RobotFramework测试报告迁移后图片无法显示的解决方案
问题背景
用RobotFramework做嵌入式软件系统测试自动化,测试完成后log.html、output.xml、report.html和测试生成的图片都存在仓库内的Output文件夹。留在原位置时报告能正常显示图片,但迁移Output文件夹后,log.html会去原仓库的绝对路径找图片,导致图片加载失败。
问题核心:图片绘制代码中fig_path使用的是Output文件夹的绝对路径,且_log_plot方法直接把这个绝对路径记录到了测试日志里,迁移后路径失效。
解决方案
1. 修改代码,记录图片相对路径
让日志里记录的图片路径是相对于Output文件夹的文件名(因为图片和报告在同一目录),而非绝对路径。
修改plot_data函数的结尾部分,替换原有的self._log_plot(fig_path)逻辑:
plt.savefig(fig_path) # 提取图片文件名,替换绝对路径为文件名 img_filename = os.path.basename(fig_path) # 调用RobotFramework的日志API插入图片,使用相对路径(文件名) from robot.libraries.BuiltIn import BuiltIn BuiltIn().log_html(f'<img src="{img_filename}" alt="Data Verification Plot">') plt.close()
如果你的_log_plot是自定义方法,直接修改该方法,让它记录图片文件名而非绝对路径即可。
2. 修复已生成的output.xml
如果已经有带绝对路径的output.xml,可以用脚本批量替换其中的绝对路径为文件名,再重新生成报告:
import xml.etree.ElementTree as ET import os def fix_image_paths(xml_file): tree = ET.parse(xml_file) root = tree.getroot() # 遍历所有日志消息,替换图片绝对路径 for msg in root.findall('.//message'): if not msg.text: continue # 处理直接记录路径的情况 if msg.text.endswith('.png'): msg.text = os.path.basename(msg.text) # 处理<img>标签的情况 elif '<img' in msg.text: # 提取src属性里的路径并替换为文件名 src_start = msg.text.find('src="') + 5 src_end = msg.text.find('"', src_start) old_path = msg.text[src_start:src_end] new_path = os.path.basename(old_path) msg.text = msg.text.replace(old_path, new_path) # 保存修改后的xml tree.write(xml_file, encoding='utf-8', xml_declaration=True) # 执行修复,替换为你的output.xml路径 fix_image_paths("Output/output.xml")
修复后,重新运行rebot生成报告:
rebot Output/output.xml -d Output
3. 验证迁移后的报告
修改完成后,把Output文件夹迁移到任意位置,打开log.html就能正常加载图片了——因为日志里的图片路径是相对当前文件夹的文件名,浏览器会直接在Output文件夹内查找图片。
内容的提问来源于stack exchange,提问作者Shahid
相关产品推荐
相关产品推荐

