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

news2025/1/14 23:28:15
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构与算法之链表: LeetCode 92. 反转链表 II (Ts版)

反转链表 II https://leetcode.cn/problems/reverse-linked-list-ii/description/ 描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 示例 1 输入&…

【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录

一、import导入css样式 在项目文件中创建一个common文件夹&#xff0c;下面创建一个css文件夹&#xff0c;里面放上style.css文件&#xff0c;编写的是公共样式&#xff0c;我们现在要在App.vue中引入该样式。 在App.vue中引入该样式&#xff0c;这样就会使样式全局生效&#…

MySQL中的四种表联结

目录 1、联结、关系表 &#xff08;1&#xff09;关系表 &#xff08;2&#xff09;为什么使用联结 2、如何创建联结 &#xff08;1&#xff09;笛卡尔积&#xff08;叉联结&#xff09;--用逗号分隔 &#xff08;2&#xff09;where子句的重要性 &#xff08;3&#xff…

DVWA靶场CSRF漏洞通关教程及源码审计

目录标题 CSRFlow源码审计 medium源码审计 high源码审计 impossible源码审计 CSRF low 先修改密码 看到地址栏 复制在另一个网页打开 成功登录 源码审计 没有任何过滤措施&#xff0c;很危险&#xff0c;并且采用了不安全的md5加密 <?phpif( isset( $_GET[ Change ] )…

JVM之垃圾回收器G1概述的详细解析

G1(并发) G1 特点 G1&#xff08;Garbage-First&#xff09;是一款面向服务端应用的垃圾收集器&#xff0c;应用于新生代和老年代、采用标记-整理算法、软实时、低延迟、可设定目标&#xff08;最大 STW 停顿时间&#xff09;的垃圾回收器&#xff0c;用于代替 CMS&#xff0…

宝塔面板 申请证书后 仍然提示不安全

证书显示有效&#xff0c;但是网站显示不安全 导致的原因是引入静态文件使用的是HTTP&#xff0c;查看方法为F12打开console控制台 可以看到静态文件全部都是HTTP 网站采用wordpress搭建&#xff0c;基于问题解决&#xff0c;其他方式搭建也是一样&#xff0c;处理掉所有的H…

【1】Word:邀请函

目录 题目 文字解析 流程 题目 文字解析 考生文件夹☞Word.docx☞一定要用ms打开&#xff0c;wps打开作答无效☞作答完毕&#xff0c;F12或者手动另存为&#xff08;考生文件夹&#xff1a;路径文件名&#xff09; 注意&#xff1a;一定要检查&#xff0c;很有可能你前面步…

Docker安装和卸载(centos)

Docker安装和卸载 一&#xff0c;已安装Docker&#xff0c;卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine​ 如果出现以下提示就证明没卸载…

JVM:ZGC详解(染色指针,内存管理,算法流程,分代ZGC)

1&#xff0c;ZGC&#xff08;JDK21之前&#xff09; ZGC 的核心是一个并发垃圾收集器&#xff0c;所有繁重的工作都在Java 线程继续执行的同时完成。这极大地降低了垃圾收集对应用程序响应时间的影响。 ZGC为了支持太字节&#xff08;TB&#xff09;级内存&#xff0c;设计了基…

ASP.NET Core - 日志记录系统(二)

ASP.NET Core - 日志记录系统&#xff08;二&#xff09; 2.4 日志提供程序2.4.1 内置日志提供程序2.4.2 源码解析 本篇接着上一篇 ASP.NET Core - 日志记录系统(一) 往下讲&#xff0c;所以目录不是从 1 开始的。 2.4 日志提供程序 2.4.1 内置日志提供程序 ASP.NET Core 包括…

无源器件-电容

电容器件的参数 基本概念由中学大学物理或电路分析内容获得&#xff0c;此处不做过多分析。 电容的产量占全球电子元器件产品的40%以上。 单位&#xff1a;法拉 F&#xff1b;1F10^6uF&#xff1b;电路中常见的104电容就是10*10^4pF100nF0.1uF C为电容&#xff0c;Rp为绝缘电…

云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换

Video-Background-Removal 是一款革命性的视频背景替换工具&#xff0c;旨在让用户轻松实现视频背景的快速更换。无论你是专业创作者还是普通用户&#xff0c;这款软件都能让你在几秒钟内改变背景&#xff0c;完全消除限制&#xff0c;随心所欲&#xff0c;随时随地想换就换&am…

HCIP笔记1--IP路由基础回顾、BFD单臂回声、OSPF基础

1. 路由基础回顾 概念 AS(Aotonomous System): 自治系统&#xff0c;由同一机构管理的路由器集合。LAN(Local Area Network): 局域网&#xff0c;用户所使用的网络WAN(Wideless Area Network): 广域网&#xff0c;运营商网络广播域&#xff1a;一个广播帧能在网络中到达的所有…

【Linux网络编程】数据链路层 | MAC帧 | ARP协议

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…

微软与腾讯技术交锋,TRELLIS引领3D生成领域多格式支持新方向

去年 11 月&#xff0c;腾讯推出 Hunyuan3D 生成模型&#xff0c;是业界首个同时支持文字和图像生成 3D 的开源大模型。紧接着不到一个月&#xff0c;微软便发布了全新框架 TRELLIS&#xff0c;加入 3D 资产生成领域的竞争中。TRELLIS 支持多格式输出&#xff0c;包括辐射场、3…

【爬虫】单个网站链接爬取文献数据:标题、摘要、作者等信息

源码链接&#xff1a; https://github.com/Niceeggplant/Single—Site-Crawler.git 一、项目概述 从指定网页中提取文章关键信息的工具。通过输入文章的 URL&#xff0c;程序将自动抓取网页内容 二、技术选型与原理 requests 库&#xff1a;这是 Python 中用于发送 HTTP 请求…

设计模式-结构型-组合模式

1. 什么是组合模式&#xff1f; 组合模式&#xff08;Composite Pattern&#xff09; 是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说&#xff0c;组合模式允…

js:正则表达式

目录 正则表达式的语法 定义 检测 检索 元字符 边界符 量词 字符类 表单判断案例 修饰符 过滤敏感词 正则表达式是一种用于匹配和操作文本的强大工具&#xff0c;它是由一系列字符和特殊字符组成的模式&#xff0c;用于描述要匹配的文本字符组合模式 正则表达式是一…

PHP数据过滤函数详解:filter_var、filter_input、filter_has_var等函数的数据过滤技巧

PHP数据过滤函数详解&#xff1a;filter_var、filter_input、filter_has_var等函数的数据过滤技巧&#xff0c;需要具体代码示例 在 Web 开发中&#xff0c;数据过滤是非常重要的一环。过滤用户输入的数据可以保护我们的应用程序免受潜在的安全威胁。PHP 提供了一系列强大的数…

QT跨平台应用程序开发框架(1)—— 环境搭建

目录 一&#xff0c;关于QT 二&#xff0c;关于应用程序框架 三&#xff0c;环境搭建 3.1 预备 3.2 下载Qt SDK 3.3 安装Qt SDK 3.4 配置环境变量 3.5 认识一些重要工具 四&#xff0c;Qt Creator 的基本使用 4.1 创建项目 4.2 代码解释 一&#xff0c;关于QT 互联网…