安装Xray插件后,如何高效在JIRA项目间迁移/复制测试用例?
优化JIRA测试用例跨项目迁移的方案
针对你提到的手动逐个迁移效率低、Excel转CSV适配Test Importer的问题,这里有几个更高效的解决办法:
1. 利用JIRA内置批量Move功能
你之前可能没注意到,JIRA支持批量选中测试用例进行迁移:
- 进入测试用例的列表视图,用JQL筛选出所有需要迁移的测试用例(比如
project = 源项目key AND issuetype = Test Case) - 勾选列表顶部的全选框,选中所有匹配的用例
- 点击页面顶部的「More actions」→「Move」,按照向导选择目标项目即可
- 注意:如果你的测试用例关联了附件、链接或测试执行记录,部分测试管理插件(如Xray、Zephyr)会在迁移时提示是否同步这些关联数据,按需选择即可。这种方法不用额外工具,适合中小批量的迁移,几千个用例的话比逐个操作快很多。
2. Excel转CSV适配Test Importer
既然能导出Excel格式,我们可以曲线解决CSV导入的问题:
- 先导出包含所有必要字段的Excel文件(确保包含测试用例名称、描述、步骤、优先级、标签等Test Importer需要的字段)
- 打开Excel文件,选择「文件」→「另存为」,格式选择「CSV(逗号分隔)(*.csv)」,编码建议选UTF-8避免乱码
- 打开Test Importer,选择转换好的CSV文件,仔细核对字段映射关系(比如把Excel里的“Summary”映射到JIRA的“测试用例名称”),先做小批量测试验证没问题后,再全量导入。
3. 用ScriptRunner脚本批量复制/迁移(高效推荐)
如果你的JIRA安装了ScriptRunner插件,写个简单的Groovy脚本就能批量处理几千个用例,几分钟就能完成:
- 进入ScriptRunner的「Script Console」,粘贴下面的脚本(记得修改源项目和目标项目的Key):
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.MutableIssue // 配置源项目和目标项目Key def sourceProjectKey = "YOUR_SOURCE_PROJECT" def targetProjectKey = "YOUR_TARGET_PROJECT" def issueService = ComponentAccessor.getIssueService() def user = ComponentAccessor.jiraAuthenticationContext.loggedInUser def projectManager = ComponentAccessor.projectManager // 用JQL筛选需要迁移的测试用例 def jql = "project = $sourceProjectKey AND issuetype = Test Case" def searchService = ComponentAccessor.getSearchService() def query = searchService.parseQuery(user, jql).query def issues = searchService.search(user, query, PagerFilter.getUnlimitedFilter()).issues issues.each { issue -> def targetProject = projectManager.getProjectByKey(targetProjectKey) def issueInput = issueService.newIssueInputParameters() // 复制核心字段 issueInput.setProjectId(targetProject.id) issueInput.setIssueTypeId(issue.issueType.id) issueInput.setSummary(issue.summary) issueInput.setDescription(issue.description) issueInput.setPriorityId(issue.priority.id) issueInput.setLabels(issue.labels) // 验证并创建副本 def validationResult = issueService.validateCreate(user, issueInput) if (validationResult.isValid()) { issueService.create(user, validationResult) println "Successfully copied issue: ${issue.key}" } else { println "Failed to copy ${issue.key}: ${validationResult.errorCollection}" } }
- 执行脚本前一定要备份数据,先在测试环境验证效果,避免误操作。如果需要复制更多字段(比如自定义字段),可以在脚本里添加对应的设置逻辑。
4. 专用迁移插件
如果不想写脚本,可以考虑JIRA Marketplace上的专用迁移插件,比如「Project Migration for JIRA」或「Test Case Migrator」:
- 这类插件支持可视化批量选择测试用例,一键迁移到目标项目
- 大部分能同步测试用例的关联数据(比如测试执行、缺陷链接、附件等)
- 操作门槛低,适合非技术用户。
最后提醒
无论用哪种方法,迁移前都要在测试环境验证效果,确认字段、关联数据都能正确迁移后,再在生产环境操作,避免数据丢失或错乱。
内容的提问来源于stack exchange,提问作者sb0789




