马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- title: Jira用例自动去除summary重复用例
- tags:
- - jira
- - python
- categories:
- - python
复制代码 在利用 Jira 举行项目管理时,测试用例的维护至关重要。随着项目推进,用例数量增多,可能会出现 summary 重复的环境,手动排查费时费力,因此实现自动去除重复用例功能意义重大。
一、配景与需求
项目团队在 Jira 中积聚了大量测试用例,由于多人协作、版本迭代等因素,一些用例的 summary 表述相近甚至完全雷同,这不仅造成视觉紊乱,还可能导致测试覆盖不精准、资源浪费。我们急迫必要一个自动化机制,能够快速识别并清理这些重复项,确保用例库的简洁与高效。
二、办理方案思绪
- 数据获取:利用 Jira API 连接到项目实例,获取所有测试用例的详细信息,重点提取 summary 字段及对应的用例 ID 等关键数据,以便后续比对操作。
- 重复判断算法:接纳文本相似度算法,当两个用例 summary 的相似度高于阈值时,标记为潜伏重复项。思量到部分特别字符、空格差别不影响语义实质,在比对前可举行规范化预处理,如统一转小写、去除多余空格等。
- 自动处理流程:对于标记的重复用例,根据预先设定规则,如保留创建时间最早或末了更新的用例,通过 API 发起删除操作,将其他重复版本从 Jira 中移除。
三、实施步骤
- 开辟环境搭建:选择合适编程语言(如 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
复制代码 ```
- 代码编写与调试:按照数据获取、相似度盘算、重复处理逻辑逐步编写代码,在测试环境中利用部分样本用例数据举行调试,不停优化算法阈值,确保正确识别重复且无误删风险。
```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 ]
```
- 部署与监控:将代码部署到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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |