You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

安装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

火山引擎 最新活动