首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >质量看板开发实践(二):利用python获取jira数据-进阶篇

质量看板开发实践(二):利用python获取jira数据-进阶篇

原创
作者头像
冰霜
发布于 2022-04-05 08:12:33
发布于 2022-04-05 08:12:33
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

上一篇介绍了如何利用python的jira库操作jira,我们能通过项目的key获取项目的相关信息,同时也能利用jql查询一些信息,例如查询bug、故事、子任务等等,但是有些属性却不能通过这种方式直接拿到

比如这样一个功能:针对某个项目,筛选不同sprint下有多少个bug

一种方式是可以写死sprint,这样前端页面也能正常选择,但这样未免太笨,而且当项目或者sprint多起来以后,也不好维护;

另一种方式是动态获取一个项目的sprint

不过python的jira库并未直接提供相关的方法来获得sprint信息

通过【网上冲浪🏄‍♀️】发现可以借助jira的REST API来获取

具体步骤如下:

(1) 先拿到项目下的board(borad是指一个项目下的面板)

(2) 通过board获取项目的sprint

1、获取项目的board

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from jira import JIRA
import requests

jira = JIRA(server='http://jira.xxx/', basic_auth=('user', 'password'))

cookies = jira._session.cookies # 获取jira对象中的cookie
headers = {
    "Accept": "application/json",
}

base_url = "http://jira.xxx.com"  # jira服务的域名 
board_url = base_url + "/rest/agile/1.0/board/?projectKeyOrId=project_key"  # 获取board的api接口
# projectKeyOrId这个字段需要填写项目的key

res = requests.get(board_url, headers=headers, cookies=cookies)
print(res.json())

结果如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
	'maxResults': 50,
	'startAt': 0,
	'total': 6,
	'isLast': True,
	'values': [{
		'id': id1,
		'self': 'http://xxx',
		'name': 'xxx子任务看板',
		'type': 'kanban'
	}, {
		'id': id2,
		'self': 'http://xxx',
		'name': 'xxx故事看板',
		'type': 'scrum'
	}, {
		'id': id3,
		'self': 'http://xxx',
		'name': 'xxx缺陷看板',
		'type': 'kanban'
	}]
}

可以看到这个接口返回了这个项目下的所有面板,这里我需要故事看板对应的id(不过其实任取一个看板中的id也行,后面都能拿到sprint),后续调用获取sprint接口时,需要传这个值

官方接口文档:Get all boards

2、获取sprint

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sprint_url = base_url + "/rest/agile/1.0/board/" + str(id3) + "/sprint?state=future,active,closed"

"""
这是获取sprint的api接口
id3是刚才获取的board_id,
state参数指定提取哪种状态sprint,它有3个值可选:future(未来),active(激活的),closed(已关闭的)
""

res = requests.get(sprint_url, headers=headers, cookies=cookies)
print(res.json())

结果如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
	'maxResults': 50,
	'startAt': 0,
	'isLast': True,
	'values': [{
		'id': id1,
		'self': 'http://jira.xxx',
		'state': 'closed',
		'name': '故事看板-xx项目 Sprint 0',
		'startDate': '2021-08-23T13:47:00.000+08:00',
		'endDate': '2021-08-30T01:47:00.000+08:00',
		'completeDate': '2021-08-31T09:30:07.273+08:00',
		'activatedDate': '2021-08-23T13:47:47.796+08:00',
		'originBoardId': id
	}, {
		'id': id2,
		'self': 'http://jira.xxx',
		'state': 'closed',
		'name': 'xxx',
		'startDate': '2021-08-31T10:16:00.000+08:00',
		'endDate': '2021-09-14T20:16:00.000+08:00',
		'completeDate': '2021-09-13T11:44:07.732+08:00',
		'activatedDate': '2021-08-31T09:31:27.177+08:00',
		'originBoardId': id
	}]
}

这个接口会返回项目下的所有冲刺,其中的id就是sprint_id

官方接口文档如下:Get all sprints

综上我们就通过接口拿到了一个项目的sprint

整理下上述代码,新建文件jira_get_sprint.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# coding: utf-8
"""
author: hmk
detail: 
create_time: 
"""
from jira import JIRA
import requests


class JiraSprint:
    def __init__(self):
        self.jira = JIRA(auth=('user', 'password'), options={'server': 'http://jira.xxx/'})
        self.cookies = self.jira._session.cookies  # 获取登录jira后的cookie
        self.base_url = "http://jira.xxx"
        self.headers = {
            "Accept": "application/json",
        }

    def get_sprint_board(self, project):
        """
        获取项目的故事看板
        :param project: 
        :return:
        """
        board_url = self.base_url + "/rest/agile/1.0/board/?projectKeyOrId="+project
        try:
            res = requests.get(board_url, headers=self.headers, cookies=self.cookies)
            # print(res.json())
            values = res.json()["values"]  # 提取返回结果中的values列表
            if values:
                for i in values:
                    if "故事" in i["name"]:  # 取故事卡看板,如果name中包含"故事"2个字就认为这是故事看板
                        story_board_id = i["id"]
                        return story_board_id
                    # else:
                    #     continue

                return values[0]["id"]  # 如果不包含故事看板,则取第一个board_id

            else:
                return None

        except Exception as e:
            raise e

    def get_sprint_id(self, project):
        """
        获取sprint_id
        :param project:
        :return:
        """
        story_board_id = self.get_sprint_board(project)

        if story_board_id is not None:
            sprint_url = self.base_url + "/rest/agile/1.0/board/" \
                         + str(story_board_id) \
                         + "/sprint?state=future,active,closed"
            # state = future,active,closed,表示筛选指定sprint的状态,未来、活动、关闭
            try:
                res = requests.get(sprint_url, headers=self.headers, cookies=self.cookies)
                # print(res.json())
                values = res.json()["values"][::-1]  # 提取各个冲刺的数据,并倒序排列
                if values:
                    sprints = [{"id": sprint["id"], "name": sprint["name"], "state": sprint["state"]} for sprint in values]
                    # print(sprints)
                    return sprints
                else:
                    print("该项目下面没有冲刺记录")
                    return None

            except Exception as e:
                raise e

        else:
            print("当前没有故事看板")


if __name__ == '__main__':
    test = JiraSprint()
    # story_board_id = test.get_sprint_board("xxx")
    # print(story_board_id)
    sprint_id = test.get_sprint_id("xxx")
    # print(sprint_id)

参考博客:

https://blog.csdn.net/qq_19696631/article/details/116952066

https://blog.csdn.net/u013302168/article/details/121894843

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
质量看板开发实践(一):利用python获取jira数据-基础篇
最近一段时间,写了一个简易的测试质量看板,能够从不同维度查看缺陷分布情况;另外由于公司用的jira,所以也汇总了故事卡以及每个人的故事点情况
冰霜
2022/04/04
3K1
实战 | 如何用 Python 统计 Jira 数据并可视化
目前公司使用 Jira 作为项目管理工具,在每一次迭代完成后的复盘会上,我们都需要针对本次迭代的 Bug 进行数据统计,以帮助管理层能更直观的了解研发的代码质量
AirPython
2022/09/28
1.1K0
质量看板开发实践(六):添加一个列表,显示当前冲刺的故事标题
在这个基础上,希望能够看到这个冲刺中每个故事卡的标题内容,可以以弹窗列表的形式展示,如下
冰霜
2022/05/01
5961
质量看板开发实践(三):bug柱状图
el-date-picker组件也对应的有4种形式,当切换不同日期维度时,显示对应的日期组件
冰霜
2022/04/07
3.4K0
质量看板开发实践(四):按照bug优先级、状态绘制饼图
上一篇完成了按照日期范围查询bug的柱状图,本篇承接前面的内容,绘制2个柱状图,分别按照bug优先级和bug状态进行统计
冰霜
2022/04/07
5700
Python操作Jira提交BUG
Jira提供了完善的RESTful API,如果不想直接请求API接口可以使用Python的Jira库来操作Jira
王大力测试进阶之路
2020/05/28
2.8K0
在微信小程序上做一个「博客园年度总结」:后端部分
2022年马上要结束了,最近突然有个想法,利用微信小程序+博客园接口做了一个「博客园年度总结
冰霜
2023/02/24
1.2K0
在微信小程序上做一个「博客园年度总结」:后端部分
Spring Cloud Gateway简单使用
Gateway网关是我们服务的守门神,所有微服务的统一入口。Spring Cloud Gateway 是 Spring Cloud的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。在Gateway之前,SpringCloud并不自己开发网关,可能是觉得Netflflix公司的Zuul不行吧,然后自己就写了一个,也是替代Netflflix Zuul。其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
ha_lydms
2023/08/10
7490
Spring Cloud Gateway简单使用
接口测试和单元测试
了解cookie是先登录的时候会产生,然后在这个网站充值的时候直接就有cookie了。
清菡
2020/12/02
1.9K0
接口测试和单元测试
python自动化高效办公第二期,带你项目实战【二】{数据可视化、发送邮件(定时任务监控)、python聊天机器人(基于微信、钉钉)}
API商城_API_API接口大全_API一站式采购基地百度智能云API商城-API一站式采购基地,API商城提供天气查询API、实名认证API、短信验证码、OCR识别等海量API服务。选购API服务,首选百度智能云API商城。
汀丶人工智能
2022/12/21
1.2K0
python自动化高效办公第二期,带你项目实战【二】{数据可视化、发送邮件(定时任务监控)、python聊天机器人(基于微信、钉钉)}
用Python爬取芒果TV、腾讯视频、B站、爱奇艺、知乎、微博这几大平台的弹幕、评论,看这一篇就够了!
今天讲解如何用python爬取芒果TV、腾讯视频、B站、爱奇艺、知乎、微博这几个常见常用的影视、舆论平台的弹幕和评论,这类爬虫得到的结果一般用于娱乐、舆情分析,如:新出一部火爆的电影,爬取弹幕评论分析他为什么这么火;微博又出大瓜,爬取底下评论看看网友怎么说,等等这娱乐性分析。
Python与Excel之交
2021/09/03
3.5K0
用Python爬取芒果TV、腾讯视频、B站、爱奇艺、知乎、微博这几大平台的弹幕、评论,看这一篇就够了!
Python搭建接口测试自动化框架(二)
很早之前,我就准备做一个基于 Python 的自动化测试框架,当时仅仅写了第一篇,后面因为种种原因,就没有再写了,从今天开始,继续这个系列,一步一步的,搭建一个自己理想的自动化测试框架。 关于第一部分,可以戳这里(链接)
周萝卜
2019/07/17
2K3
Python搭建接口测试自动化框架(二)
Python网易云音乐爬虫进阶篇
年前写过一篇爬网易云音乐评论的文章,爬不了多久又回被封,所以爬下来那么点根本做不了什么分析,后面就再改了下,加入了多线程,一次性爬一个歌手最热门50首歌曲的评论,算是进阶版了~
Awesome_Tang
2018/09/11
2.8K0
Python网易云音乐爬虫进阶篇
python 自动抓取分析文章阅读量——掘金专栏版
进入掘金个人主页,打开开发者工具,点击“专栏” tab ,在开发者工具”Network->XHR->Name->get_entry_by_self->Headers->Request URL” 复制 url。
我是一条小青蛇
2019/10/23
7700
python 自动抓取分析文章阅读量——掘金专栏版
月薪40K+银行测试经理,自动化测试实践经验分享
大家好,我是Arthur,拥有超过10年以上的银行测试经验,目前在一家互联网创业公司担任测试经理。在我们那个年代,基本上都是不会写代码的做测试工作,而且基本都是纯手工;最近几年,测试开发开始流行,互联网行业越来越重视测试人员的综合能力,使得我们这些老测试也必须转型,才能跟上时代的步伐,因此我也报名了狂师老师的 全栈测开训练营,之前我也在一些网络培训网站上学习一些新的知识点,但我感觉狂师的课程无论是范围、广度、深度比大多数培训机构强很多,也正是工作当中经常能用到的内容,非常值得大家学习。那么,今天我将结合训练营课程的讲解,分享一些关于接口自动化测试学习实践总结,并且这些我已经应用到了实际工作上,希望对大家也有所帮助。
测试开发技术
2021/08/12
8100
Node.js 开发实践,前端工程师的 MVP 利器
本文经作者授权转载至公众号 “Nodejs技术栈”,作者:愚坤,掘金优秀作者,一名没上高中的前端工程师,目前就职水滴筹。 什么是 MVP,来自伟大的百科: Minimum Viable Product –最简化可实行产品。 是指以最低成本尽可能展现核心概念的产品策略,即是指用最快、最简明的方式建立一个可用的产品原型,这个原型要表达出你产品最终想要的效果,然后通过迭代来完善细节。该术语由弗兰克·罗宾逊和埃里克·里斯推广于Web应用程序 ,它也可能涉及到进行市场前手的分析。 前言: Node是前端工程师的贵人,
五月君
2020/11/30
1K0
Node.js 开发实践,前端工程师的 MVP 利器
利用Python开发七普数据在线可视化看板
这是我的系列教程「Python+Dash快速web应用开发」的第十八期,通过前面十七期的内容,如果你有用心学习的话,那么恭喜你已经具备使用Dash编写常规web应用的能力了。
派大星的数据屋
2022/04/03
1.6K0
利用Python开发七普数据在线可视化看板
EOS实践篇
账号的创建和管理交给插件Scatter,玩家进入游戏的时候获取账号,如果没有,则提示玩家创建账号
陨石坠灭
2020/01/21
2.8K0
EOS实践篇
利用Python做一个小姐姐词云跳舞视频
本文将以哔哩哔哩–乘风破浪视频为例,you-get下载视频,同时利用python爬取B站视频弹幕,并利用opencv对视频进行分割,百度AI进行人像分割,moviepy生成词云跳舞视频,并添加音频。
Python编程与实战
2021/03/10
8050
利用Python做一个小姐姐词云跳舞视频
点亮你的Vue技术栈,万字Nuxt.js实践笔记来了
作为一位 Vuer(vue开发者),如果还不会这个框架,那么你的 Vue 技术栈还没被点亮。
WahFung
2020/08/24
24.9K0
点亮你的Vue技术栈,万字Nuxt.js实践笔记来了
推荐阅读
相关推荐
质量看板开发实践(一):利用python获取jira数据-基础篇
更多 >
交个朋友
加入[后端] 腾讯云技术交流站
后端架构设计 高可用系统实现
加入前端工作实战群
前端工程化实践 组件库开发经验分享
加入云原生工作实战群
云原生落地实践 技术难题攻坚探讨
换一批
加入讨论
的问答专区 >
高级总监擅长4个领域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档