业内很多公司都会使用到的一个项目管理工具是JIRA,JIRA可以用来管理项目、流程、需求、版本、需求、缺陷等,JIRA包含了详细的字段信息,并且根据用户需要,支持自定义一些字段。
虽然JIRA本身有一些报表下载和统计的功能,但是也可以使用python对jira进行快捷的查询和分析。
JIRA官方有非常详细的API文档介绍,可以用来参考。
https://docs.atlassian.com/DAC/rest/jira/6.1.html
https://jira.readthedocs.io/en/latest/
安装JIRA依赖库
python调用Jira API,首先要安装第三方库,可以
直接: easy_install jira
或者:pip3 install jira
安装成功后,直接命令行里导入jira,或者Pycharm中使用 from jira import JIRA,没有报错则说明安装成功了。
登录JIRA
JIRA都有访问限制,在访问Jira项目时首先要进行认证,Jira Python库提供了3种认证方式:
- 通过Cookis方式认证(用户名,密码)
- 通过Basic Auth方式认证(用户名,密码)
- 通过OAuth方式认证
因为公司习惯是使用Google OAuth 方式登录的,所以一开始尝试使用Google OAuth的方式登录,但是折腾了一下午始终没成功。后来发现了更简单的Cookies方式认证。
from jira import JIRA
# 通过jira域名和账户密码登录
jira = JIRA('https://jira.xxx.xxx/', basic_auth=('auth_name', 'password'))
查询JIRA的project信息
#查询project信息
print (jira.projects()) #获取所有的projets
project =jira.project('SPDGT') #获取projet为SPDGT的信息
print (project.key) #获取项目的Key
print (project.name) #获取项目名称
print (project.lead) #获取项目负责人
print (project.description) #项目描述
print (project.components) #获取项目组件
print (project.raw) #获取项目的原始API数据
print (project.projectCategory) #获取项目分类
查询JIRA的issue信息
可以查询到信息有:
- 所属项目
- 问题类型和状态
- 标题和描述
- 干系人
- 时间点
- 附件和评论等
# coding:utf-8
issue = jira.issue('JIRA-999')
print (issue) #JiraID
print (issue.id) #缺陷ID
print (issue.fields.project) #所属项目
print (issue.fields.issuetype) #问题类型
print (issue.fields.status) #问题状态
print (issue.fields.subtasks) #关联的sub-task
print (issue.fields.issuelinks) #关联的blockissues
print (issue.fields.creator) #创建人
print (issue.fields.reporter) #报告人
print (issue.fields.assignee) #指派人
print (issue.fields.customfield_10307) #developer(自定义字段)
print (issue.fields.created) #创建日期
print (issue.fields.updated) #修改日期
print (issue.fields.lastViewed) #最后查看时间
print (issue.fields.summary) #主题
print (issue.fields.description) #描述
print (issue.fields.attachment) #附件信息
print (issue.fields.comment.comments) #评论
print (issue.fields.issuetype.avatarId) #类型ID
print (issue.fields.components) #所属模块
print (issue.fields.priority) #优先级
print (issue.fields.versions) #影响版本
print (issue.fields.fixVersions) #解决版本
print (issue.fields.resolution) #解决结果
print (issue.fields.resolutiondate) #解决时间
运行下就会发现出结果了。
但是有个地方我疑惑的是,如下几种情况效果等同,但我还没来及看API文档了解到具体用法,欢迎高人指点。
查询所属项目时:
- print (issue.fields.project)
- print (issue.fields.project.key)
查询问题类型时:
- print (issue.fields.issuetype)
- print (issue.fields.issuetype.name)
查询报告人时:
- print (issue.fields.reporter)
- print (issue.fields.reporter.displayName)
但在有一个地方存在差异,假设实现API,将获取到的issue信息作为json格式返回时,reporter不带displayname的做法会报错。
搜索Jira issue
Jira有一套专门的搜索语言,称为JQL(Jira Query Language),Jira的Python库便是基于JQL语法进行搜索的,返回的是搜索到的问题列表。使用语句为:
jira.search_issues('JQL语句')
默认最大结果数为1000,可以通过maxResults参数配置,参数为-1时不限制数量,返回所有搜索结果。
#查询姓名为devname的产生的bug总数并输出
issues=jira.search_issues('status=done and developer = "devname"', maxResults=-1)
print('共产生bug数:',issues.total)
print(issues)
#查询项目为ABC,issuetype为subtask,并且按照subtask排序,输出搜索结果的前10个
issues=jira.search_issues('project = ABC and issuetype = Sub-task ORDER BY subtasks ASC', maxResults=10)
for issue in issues:
print(issue.key, issue.fields.summary, issue.fields.status, issue.fields.customfield_10100)
来源:oschina
链接:https://my.oschina.net/u/4335406/blog/4437033