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 = 1counterDict = {}for issue in range(0,len(issues)):if i.strip() ==issues[issue].fields.summary.strip():counterDict[issues[issue].key]=issues[issue].fields.status.nameelse: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 = 0print("重复已自动化的用例:"+item)continueelse:if flag == 1:#print(i.strip()+"=="+issues[issue].fields.summary,flag)flag = 0continueelse:jira_instance.transition_issue(issues[issue].key, 'xxx')#改变用例的状态,需要先找到目标状态的transition IDprint(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 + clientprint("查询条件是:"+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.rhkb.cn/news/1284.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu22.4 ROS2 安装gazebo(环境变量配置)

ubuntu版本:ubuntu22.4 最近在学习ROS2 视频教程古月居的入门课: 视频教程 文字笔记 问题 在学到关于Gazebo的时候,遇到下面问题: 运行 $ ros2 launch gazebo_ros gazebo.launch.py在这里卡住,不弹出gazebo 解决…

QT Quick QML 实例之椭圆投影,旋转

文章目录 一、前言二、演示三、部分代码与分析 QML 其它文章请点击这里: QT QUICK QML 学习笔记 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 一、前言 此 Demo 主要用于无人机吊舱视角的模拟&#xf…

Java-数据结构-栈与队列(常考面试题与单调栈)

在上一篇的学习中,我们学习了栈和队列的基本知识,以及它们对应都有哪些方法,在什么应用场景下如何使用,并且还对它们进行了模拟实现,而其实对于栈和队列的相关知识还远不止于此,而今天我们就对栈与队列进行…

【Docker】Docker部署多种容器

关于docker,Windows上使用Powershell/CMD执行指令,Linux系统直接使用终端执行指令。 docker安装MySQL 拉取MySQL 也可以跳过拉取步骤,直接run,这样本地容器不存在的话,会自动拉取最新/指定的版本。 # 默认拉取最新…

Apache Hop从入门到精通 第二课 Apache Hop 核心概念/术语

1、apache hop核心概念思维导图 虽然apache hop是kettle的一个分支,但是它的概念和kettle还是有一些区别的,下图是我根据官方文档梳理的appache hop的核心概念思维导图。 2、Tools(工具) 1)Hop Conf Hop Conf 是一个…

不同音频振幅dBFS计算方法

1. 振幅的基本概念 振幅是描述音频信号强度的一个重要参数。它通常表示为信号的幅度值,幅度越大,声音听起来就越响。为了更好地理解和处理音频信号,通常会将振幅转换为分贝(dB)单位。分贝是一个对数单位,能…

Apache JMeter 压力测试使用说明

文章目录 一、 安装步骤步骤一 下载相关的包步骤二 安装 Jmeter步骤三 设置 Jmeter 工具语言类型为中文 二、使用工具2.1 创建测试任务步骤一 创建线程组步骤二 创建 HTTP 请求 2.2 配置 HTTP 默认参数添加 HTTP消息头管理器HTTP请求默认值 2.3 添加 查看结果监听器2.4 查看结果…

在 Safari 浏览器中,快速将页面恢复到 100% 缩放(也就是默认尺寸)Command (⌘) + 0 (零)

在 Safari 浏览器中,没有一个专门的快捷键可以将页面恢复到默认的缩放比例。 但是,你可以使用以下两种方法快速将页面恢复到 100% 缩放(也就是默认尺寸): 方法一:使用快捷键 (最常用) Command (⌘) 0 (零…

Android Dex VMP 动态加载加密指令流

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 上一篇【详解如何自定义 Android Dex VMP 保护壳】实现了 VMP 保护壳。 为了进一步加强对 dex 指令的保护,实现指令流加密和动态加载,…

RabbitMQ故障全解析:消费、消息及日常报错处理与集群修复

文章目录 前言:1 消费慢2 消息丢失3 消息重复消费4 日常报错及解决4.1 报错“error in config file “/etc/rabbitmq/rabbitmq.config” (none): no ending found”4.2 生产者发送消息报错4.3 浏览器打开IP地址,无法访问 RabbitMQ(白屏没有结…

Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 控件创建 包含对应控件类型头文件 实例化控件类对象 控件设置 设置父控件 设置窗口标题 设置控件大小 设置控件坐标 设置文本颜色和背景颜色 控件排版 垂直布局 QVBoxLayout …

Java Web开发进阶——错误处理与日志管理

错误处理和日志管理是任何生产环境中不可或缺的一部分。在 Spring Boot 中,合理的错误处理机制不仅能够提升用户体验,还能帮助开发者快速定位问题;而有效的日志管理能够帮助团队监控应用运行状态,及时发现和解决问题。 1. 常见错误…

B+树的原理及实现

文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构,它在数据…

基于springboot的疫情网课管理系统

作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 项目包含: 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

android framework.jar 在应用中使用

在开发APP中&#xff0c;有时会使用系统提供的framework.jar 来替代 android.jar, 在gradle中配置如下&#xff1a; 放置framework.jar 依赖配置 3 优先级配置 gradle.projectsEvaluated {tasks.withType(JavaCompile) {Set<File> fileSet options.bootstrapClasspat…

如何将 sqlserver 数据迁移到 mysql

文章目录 前言一、导出SQL Server 数据二、转换数据格式为MySQL兼容格式三、导入数据到MySQL数据库五、使用ETL工具六、通过 navicat 工具七、总结 前言 将 SQL Server 数据迁移到 MySQL 是一个常见的数据库迁移任务&#xff0c;通常涉及以下几个关键步骤&#xff1a;导出 SQL…

GitLab CI/CD使用runner实现自动化部署前端Vue2 后端.Net 7 Zr.Admin项目

1、查看gitlab版本 建议安装的runner版本和gitlab保持一致 2、查找runner 执行 yum list gitlab-runner --showduplicates | sort -r 找到符合gitlab版本的runner&#xff0c;我这里选择 14.9.1版本 如果执行出现找不到下载源&#xff0c;添加官方仓库 执行 curl -L &quo…

56_多级缓存实现

1.查询Tomcat 拿到商品id后,本应去缓存中查询商品信息,不过目前我们还未建立Nginx、Redis缓存。因此,这里我们先根据商品id去Tomcat查询商品信息。此时商品查询功能的架构如下图所示。 需要注意的是,我们的OpenResty是在虚拟机,Tomcat是在macOS系统(或Windows系统)上,…

【STM32-学习笔记-9-】SPI通信

文章目录 SPI通信Ⅰ、SPI通信概述1、SPI技术规格2、SPI应用 3、硬件电路移位示意图 Ⅱ、SPI时序基本单元①、起始条件②、终止条件③、交换一个字节&#xff08;模式0&#xff09;④、交换一个字节&#xff08;模式1&#xff09;⑤、交换一个字节&#xff08;模式2&#xff09;…

小米vela系统(基于开源nuttx内核)——如何使用信号量进行PV操作

如何使用信号量进行PV操作 前言信号量1. 信号量简介2. NuttX中信号量的创建与使用2.1 Nuttx信号量的初始化和销毁2.2 信号量的等待和发布 3. 信号量的实际应用&#xff1a;下载任务示例3.1 实际代码3.2 代码说明3.3 执行说明 4. 信号量的优势与应用场景5. 常见应用场景&#xf…