Playwright JUnit报告附件无法同步至X-Ray,求助排查问题
先排查JUnit报告中ATTACHMENT标签的格式合规性
X-Ray对JUnit报告里的ATTACHMENT字段有严格格式要求,不是随便塞个CDATA就能识别的。你需要确保CDATA里的内容遵循attachment; filename=文件名; content-type=媒体类型; path=文件绝对路径的格式,比如:
<system-out><![CDATA[attachment; filename=login-failure.png; content-type=image/png; path=/opt/tests/screenshots/login-failure.png]]></system-out>
如果你的路径是相对路径,X-Ray服务器大概率找不到文件——毕竟它和你的测试机器不在同一环境,没法读取本地相对路径的文件。
检查curl上传命令的正确性
上传JUnit报告到X-Ray的curl命令,必须用multipart/form-data格式提交,而不是普通的JSON或文本POST。正确的命令示例应该是:
curl -X POST -u "username:password" -F "info=@results.xml" "https://your-jira-instance/rest/raven/1.0/import/execution/junit"
如果之前用的是-d @results.xml这种方式,X-Ray可能无法解析其中的附件信息。
调整Playwright的JUnit报告配置
默认的Playwright JUnit报告生成的ATTACHMENT格式可能不符合X-Ray要求,你可以自定义报告模板来修正:
在playwright.config.ts里修改reporter配置,指定附件的输出格式:
import { defineConfig } from '@playwright/test'; export default defineConfig({ reporter: [ ['junit', { outputFile: 'results.xml', attachmentTemplate: ({ name, path, contentType }) => `attachment; filename=${name}; content-type=${contentType}; path=${path}` }] ], });
这样生成的XML里的附件信息就能匹配X-Ray的解析规则。
若本地文件无法被X-Ray访问,单独上传附件
如果X-Ray服务器无法直接访问你的测试机器上的截图/视频文件(比如云环境的X-Ray和本地测试机器),那XML里的路径就没用了,必须单独调用X-Ray的API上传附件并关联测试执行:
- 先上传JUnit报告获取测试执行ID
- 调用X-Ray的添加附件API,把截图/视频文件上传到对应的测试执行或测试用例:
curl -X POST -u "username:password" -F "file=@/path/to/screenshot.png" "https://your-jira-instance/rest/raven/1.0/api/testexec/{testExecId}/attachment"
替换{testExecId}为你上传JUnit报告后得到的测试执行ID。
验证X-Ray的附件显示位置
有时候附件不会直接显示在测试执行的首页,需要进入具体的测试用例详情页,查看“附件”或“测试结果”模块。如果还是找不到,去JIRA的系统日志里排查X-Ray导入过程中是否有文件读取失败、格式不支持的报错。
内容的提问来源于stack exchange,提问作者Libra

