能否将Jenkins Pipeline各阶段作为Xray测试计划中的独立测试用例?
完全可行,而且不需要为每个测试单独创建Jenkins Pipeline,现有单Pipeline多阶段的模式就能实现需求,以下是具体思路和步骤:
一、核心可行性说明
Xray官方与Jenkins的集成方案原生支持多测试场景的结果导入,无论是单Pipeline多阶段还是多Pipeline,都能将测试结果映射到Xray测试计划中的指定测试用例,不需要拆分现有Pipeline结构。
二、最优实现步骤
1. 前置准备(Xray端)
- 在Xray中创建目标测试计划,然后为Jenkins Pipeline的每个测试阶段单独创建对应测试用例,并将这些用例关联到该测试计划;
- 记录每个测试用例的唯一标识(如Xray自动生成的用例Key,例如
TEST-123),后续用于和Pipeline阶段的测试结果做映射。
2. Jenkins端配置
- 安装Jenkins的Xray插件(在Jenkins插件市场搜索“Xray for Jira”);
- 在Jenkins全局配置中,添加Xray的服务器信息(Jira/Xray的访问地址)、认证凭据(API Token或账号密码),确保Jenkins能正常访问Xray。
3. 修改现有Pipeline脚本
在每个测试阶段执行完成后,生成带有Xray用例标识的测试报告(推荐用JUnit格式,Xray对其支持最好),然后在Pipeline末尾统一调用Xray插件导入结果。
示例Pipeline片段:
pipeline { agent any stages { stage('测试场景1:用户登录') { steps { // 执行登录测试脚本,生成带用例Key的JUnit报告 sh './run_login_test.sh --xray-key TEST-123' } post { always { junit 'reports/login_test.xml' // 归档测试报告 } } } stage('测试场景2:商品下单') { steps { sh './run_order_test.sh --xray-key TEST-124' } post { always { junit 'reports/order_test.xml' } } } } post { always { // 调用Xray插件导入所有测试报告,关联到指定测试计划 xrayImportTestResults( testPlanKey: 'PLAN-456', // 目标测试计划的Key testExecutionKey: '', // 可选,若需指定测试执行可填写 junit: 'reports/**/*.xml', // 所有测试报告的路径 importToSameExecution: true // 将所有结果合并到同一个测试执行中 ) } } }
注:测试脚本需要保证生成的JUnit报告中,测试用例的
name字段包含Xray的用例Key(比如TEST-123: 用户登录测试),这样Xray才能自动匹配到对应的用例。
4. 结果验证
Pipeline执行完成后,登录Xray查看目标测试计划,就能看到每个测试阶段的结果已经同步到对应的测试用例中。
三、进阶方案(自动创建测试用例)
如果不想提前在Xray手动创建测试用例,也可以在Pipeline中通过Xray的API自动创建用例并关联到测试计划,然后再导入结果。例如在测试阶段前添加步骤调用Xray API:
sh ''' curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://your-jira-url/rest/raven/1.0/api/testcase" \ -d '{ "fields": { "project": {"key": "PROJ"}, "summary": "用户登录测试", "description": "Jenkins Pipeline自动创建的测试用例", "issuetype": {"name": "Test"} } }' '''
然后将返回的用例Key传递给后续测试脚本,生成对应报告即可。
四、参考文档核心内容(中文翻译)
Xray与Jenkins集成支持JUnit、TestNG、Cucumber等多种主流测试报告格式的导入,可将Jenkins中的测试结果同步至Xray的测试计划、测试执行模块;支持两种集成方式:Jenkins插件(配置简单、快速上手)和API调用(灵活性高、支持复杂场景);可配置自动触发同步逻辑,例如Pipeline执行完成后自动导入测试结果,无需手动操作。
内容的提问来源于stack exchange,提问作者anew10

