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

汕尾海湾  论坛元老 | 2025-1-15 01:15:30 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1043|帖子 1043|积分 3129

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. title:  Jira用例自动去除summary重复用例
  2. tags:
  3. - jira
  4. - python
  5. categories:
  6. - python
复制代码
在利用 Jira 举行项目管理时,测试用例的维护至关重要。随着项目推进,用例数量增多,可能会出现 summary 重复的环境,手动排查费时费力,因此实现自动去除重复用例功能意义重大。
一、配景与需求

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


  • 数据获取:利用 Jira API 连接到项目实例,获取所有测试用例的详细信息,重点提取 summary 字段及对应的用例 ID 等关键数据,以便后续比对操作。
  • 重复判断算法:接纳文本相似度算法,当两个用例 summary 的相似度高于阈值时,标记为潜伏重复项。思量到部分特别字符、空格差别不影响语义实质,在比对前可举行规范化预处理,如统一转小写、去除多余空格等。
  • 自动处理流程:对于标记的重复用例,根据预先设定规则,如保留创建时间最早或末了更新的用例,通过 API 发起删除操作,将其他重复版本从 Jira 中移除。
三、实施步骤


  • 开辟环境搭建:选择合适编程语言(如 Python),安装 Jira API 相关库,配置好连接 Jira 服务器所需认证信息,确保能顺利访问数据。
```python
  1. def login():
  2.    # Jira服务器地址,用户名和密码
  3.    jira_server = 'https://jira.xxx.com'
  4.    jira_user = 'xxx'
  5.    jira_password = 'xxx'
  6.    # 创建Jira实例并登录
  7.    try:
  8.        jira_instance = JIRA(server=jira_server, basic_auth=(jira_user, jira_password))
  9.        print("Logged in successfully.")
  10.    except JIRAError as e:
  11.        print(f"Failed to log in to Jira: {e}")
  12.    return jira_instance
复制代码
```

  • 代码编写与调试:按照数据获取、相似度盘算、重复处理逻辑逐步编写代码,在测试环境中利用部分样本用例数据举行调试,不停优化算法阈值,确保正确识别重复且无误删风险。
    ```python
    1. def search(jira_instance,jql_query,i):
    2.   try:
    3.       issues = jira_instance.search_issues(jql_query,maxResults=None)
    4.       flag = 1
    5.       counterDict = {}
    6.       for issue in range(0,len(issues)):
    7.           if i.strip() ==issues[issue].fields.summary.strip():
    8.               counterDict[issues[issue].key]=issues[issue].fields.status.name
    9.           else:
    10.               print(f"{i}!= {issues[issue].fields.summary},跳过废弃操作")
    11.               failSummaryList.append(issues[issue].fields.summary)
    12.       for item ,status in counterDict.items():
    13.           if status=='UI自动化' or status=='接口自动化':
    14.               flag = 0
    15.               print("重复已自动化的用例:"+item)
    16.               continue
    17.           else:
    18.               if flag == 1:
    19.                   #print(i.strip()+"=="+issues[issue].fields.summary,flag)
    20.                   flag = 0
    21.                   continue
    22.               else:
    23.                   jira_instance.transition_issue(issues[issue].key, 'xxx')
    24.                    #改变用例的状态,需要先找到目标状态的transition ID
    25.                   print(f"Issue Key: {issues[issue].key}, Summary: {issues[issue].fields.summary},PASS")
    26.       print("====================")
    27.   except JIRAError as e:
    28.       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:
    1.           summaryList.append(issue.fields.summary)
    2.   except JIRAError as e:
    3.       print(f"获取summary失败: {e}")
    4.   counter=keep_duplicates(summaryList)
    5.   print(counter)
    6.   summaryList=list(set(counter))
    7.   return summaryList
    复制代码
    def keep_duplicates(lst): counter = Counter(lst) return [item for item in lst if counter[item] > 1 ]
    ```
  • 部署与监控:将代码部署到jenkins,设置定时任务定期运行去重步伐
  1.   jira_instance=login()
  2.     #获取第一个参数
  3.     first_argument = sys.argv[1]
  4.     client = sys.argv[2]
  5.     falg = sys.argv[3]
  6.     query = first_argument + client
  7.     print("查询条件是:"+query)
  8.     file_infos = getSummary(jira_instance,query)
  9.     if falg =='1':
  10.         print("重复的用例是:", file_infos)
  11.         for i in file_infos:
  12.             file_info= re.sub(r'[\x00-\xff]', '', i)
  13.             jql_query = first_argument+client+" AND  summary ~{0}".format(file_info)
  14.             # print(jql_query)
  15.             search(jira_instance,jql_query,i)
  16.     else:
  17.         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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表