吾爱乐享
个人学习网站

Jira用例自动去除summary重复用例

title:  Jira用例自动去除summary重复用例
tags: 
- jira
- python
categories:
- python

在使用 Jira 进行项目管理时,测试用例的维护至关重要。随着项目推进,用例数量增多,可能会出现 summary 重复的情况,手动排查费时费力,因此实现自动去除重复用例功能意义重大。

一、背景与需求

项目团队在 Jira 中积累了大量测试用例,由于多人协作、版本迭代等因素,一些用例的 summary 表述相近甚至完全相同,这不仅造成视觉混乱,还可能导致测试覆盖不精准、资源浪费。我们迫切需要一个自动化机制,能够快速识别并清理这些重复项,确保用例库的简洁与高效。

二、解决方案思路

  1. 数据获取:利用 Jira API 连接到项目实例,获取所有测试用例的详细信息,重点提取 summary 字段及对应的用例 ID 等关键数据,以便后续比对操作。

  2. 重复判断算法:采用文本相似度算法,当两个用例 summary 的相似度高于阈值时,标记为潜在重复项。考虑到部分特殊字符、空格差异不影响语义实质,在比对前可进行规范化预处理,如统一转小写、去除多余空格等。

  3. 自动处理流程:对于标记的重复用例,根据预先设定规则,如保留创建时间最早或最后更新的用例,通过 API 发起删除操作,将其他重复版本从 Jira 中移除。

三、实施步骤

  1. 开发环境搭建:选择合适编程语言(如 Python),安装 Jira API 相关库,配置好连接 Jira 服务器所需认证信息,确保能顺利访问数据。

“`python

def login():
   # Jira服务器地址,用户名和密码
   jira_server = 'https://jira.xxx.com'
   jira_user = 'xxx'
   jira_password = 'xxx'

   # 创建Jira实例并登录
   try:
       jira_instance = JIRA(server=jira_server, basic_auth=(jira_user, jira_password))
       print("Logged in successfully.")
   except JIRAError as e:
       print(f"Failed to log in to Jira: {e}")
   return jira_instance

“`

  1. 代码编写与调试:按照数据获取、相似度计算、重复处理逻辑逐步编写代码,在测试环境中使用部分样本用例数据进行调试,不断优化算法阈值,确保准确识别重复且无误删风险。

    “`python

    def search(jira_instance,jql_query,i):
    
      try:
          issues = jira_instance.search_issues(jql_query,maxResults=None)
    
          flag = 1
    
          counterDict = {}
          for issue in range(0,len(issues)):
    
              if i.strip() ==issues[issue].fields.summary.strip():
                  counterDict[issues[issue].key]=issues[issue].fields.status.name
    
              else:
                  print(f"{i}!= {issues[issue].fields.summary},跳过废弃操作")
                  failSummaryList.append(issues[issue].fields.summary)
          for item ,status in counterDict.items():
              if status=='UI自动化' or status=='接口自动化':
                  flag = 0
                  print("重复已自动化的用例:"+item)
                  continue
              else:
                  if flag == 1:
                      #print(i.strip()+"=="+issues[issue].fields.summary,flag)
                      flag = 0
                      continue
                  else:
                      jira_instance.transition_issue(issues[issue].key, 'xxx')
                       #改变用例的状态,需要先找到目标状态的transition ID
    
                      print(f"Issue Key: {issues[issue].key}, Summary: {issues[issue].fields.summary},PASS")
          print("====================")
      except JIRAError as e:
          print(f"Error searching issues: {e}")
    

    def getSummary(jira_instance,jql_query):
    summaryList=[]
    try:
    issues1 = jira_instance.search_issues(jql_query,maxResults=None)
    #issues1 = jira_instance.search_issues(jql_query)
    for issue in issues1:

              summaryList.append(issue.fields.summary)
      except JIRAError as e:
          print(f"获取summary失败: {e}")
      counter=keep_duplicates(summaryList)
      print(counter)
      summaryList=list(set(counter))
      return summaryList
    

    def keep_duplicates(lst):
    counter = Counter(lst)
    return [item for item in lst if counter[item] > 1 ]

    “`

  2. 部署与监控:将代码部署到jenkins,设置定时任务定期运行去重程序

  jira_instance=login()
    #获取第一个参数
    first_argument = sys.argv[1]
    client = sys.argv[2]
    falg = sys.argv[3]
    query = first_argument + client
    print("查询条件是:"+query)
    file_infos = getSummary(jira_instance,query)
    if falg =='1':
        print("重复的用例是:", file_infos)

        for i in file_infos:
            file_info= re.sub(r'[\x00-\xff]', '', i)


            jql_query = first_argument+client+" AND  summary ~{0}".format(file_info)
            # print(jql_query)
            search(jira_instance,jql_query,i)
    else:
        print("已查出重复的用例是:", file_infos)

“`python

#改变用例的状态,需要先找到目标状态的transition ID
# transitions = jira_instance.transitions(bug_id)
# print(transitions)
# for transition in transitions:
# print(f”ID: {transition[‘id’]}, Name: {transition[‘name’]}”)

“`

本文永久更新地址:

https://www.fenxiangbe.com/p/Jira用例自动去除summary重复用例.html

赞(0) 打赏
未经允许不得转载:吾爱乐享 » Jira用例自动去除summary重复用例

评论 抢沙发

评论前必须登录!

 

推荐免费资源共享,个人经验总结学习

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏