JQL语法及Python查询 Jira issue信息

文章目录

    • 一、JQL语法
      • [1.1 JQL语法简介](#1.1 JQL语法简介)
      • [1.2 Jira中常用的JQL搜索语句](#1.2 Jira中常用的JQL搜索语句)
    • 二、查询issue信息
      • [2.1 安装JIRA依赖库](#2.1 安装JIRA依赖库)
      • [2.2 登录JIRA](#2.2 登录JIRA)
      • [2.3 查询JIRA的project信息](#2.3 查询JIRA的project信息)
      • [2.4 查询JIRA的issue信息](#2.4 查询JIRA的issue信息)
      • [2.5 搜索Jira issue](#2.5 搜索Jira issue)

一、JQL语法

1.1 JQL语法简介

JIRA 的 JQL 语法由以下几个元素组成:

  • field (字段) : 就是要搜索的JIRA Issue 的各个字段
  • operator(运算符或者也叫操作符):如 =, < , > , in 等
  • value(值):具体要查询的字段匹配的值
  • keyword(关键字): keyword这个字面上理解可能会带来些歧义, 主要有以下作用
    (1)连接两个表达式,即通常我们所说的逻辑运算符:AND, OR, NOT
    (2)排序运算符:ORDERBY
    (3)还有一部分就是表示空的关键字: NULL 和 EMPTY,这两个貌似才是通常意义上的关键字
  • function(方法):即JIRA提供的一些方法,如 now()表示当前时间,currentUser()表示当前用户等

语法示例如下:

其中field可用接口中获取:

1.2 Jira中常用的JQL搜索语句

序号 搜索需求 JQL语句
1 分配给我的待处理任务 assignee = currentUser() AND resolution is EMPTY
2 我报告的并且没处理完成的任务 reporter = currentUser() AND resolution is EMPTY
3 某项目中已经过期的任务 project = "XXX" AND due < now()
4 某项目中3天后要过期的任务 project = "XXX" AND due <= endOfDay(3d)
5 某项目中待办和处理中状态上的任务 project = "XXX" AND status in (待办, 处理中)
6 某项目中48小时内没变化过的任务 project = "XXX" AND updated <= -48h ORDER BY updated DESC
7 某项目中没上传附件的Bug project = "XXX" and type= Bug and attachments is EMPTY
8 某项目中测试组用户处理完成的任务 project = "XXX" and assignee in membersOf("testers") and status = 已完成
9 某项目中最近30天解决的任务 project = "XXX" and resolved >= startOfDay(-30d)
10 某项目上即将发布的版本中还没解决的任务 project = "XXX" and fixVersion = earliestUnreleasedVersion() and resolution is EMPTY
11 某项目中重新打开的Bug project = "XXX" and type = Bug and resolution changed from fixed to empty
12 某项目中标题包含"服务器异常"的Bug project = "XXX" and type = Bug and summary ~ "服务器异常"
13 某项目上当前进行的Sprint中被标记的任务 project = "XXX" and Sprint in openSprints() and Flagged = Impediment
14 昨天我将状态从待办改为处理中的任务 status changed FROM 待办 TO 处理中 BY currentUser() AFTER startOfDay(-1d)
15 用户User1在2019年修改过的Issue issue in updatedBy(User1, 2019-1-1, 2019-12-31)
16 某项目中已发布版本中包含的任务 project = "XXX" and fixVersion in releasedVersions()
17 上周发生状态变化的Issue status changed DURING (startOfWeek(-1), endOfWeek(-1))
18 以"is duplicated by"关系链接到某个Issue的任务 issue in linkedIssues(PRO-1,"is duplicated by")
19 3天以来关闭的Issue status = Closed and status was not Closed ON startOfDay(-3)

二、查询issue信息

2.1 安装JIRA依赖库

bash 复制代码
pip3 install jira

2.2 登录JIRA

JIRA都有访问限制,在访问Jira项目时首先要进行认证,Jira Python库提供了3种认证方式:

  • 通过Cookis方式认证(用户名,密码)
  • 通过Basic Auth方式认证(用户名,密码)
  • 通过OAuth方式认证
python 复制代码
from jira import JIRA
# 通过jira域名和账户密码登录
jira = JIRA('https://jira.xxx.xxx/', basic_auth=('username', 'password'))

创建JIRA对象需要server处传入公司JIRA服务器的IP,basic_auth里传入登入用户名和密码

2.3 查询JIRA的project信息

python 复制代码
from jira import JIRA

jira = JIRA('https://jira.xxx.xxx', basic_auth=('username', 'password'))
# 查询project信息
print(jira.projects())  #获取所有的projets

project = jira.project('KKQA') #获取projet为KKQA的信息
print(project.key)             # 获取项目key
print(project.name)            # 获取项目名称
print(project.lead)            # 获取项目负责人
print(project.description)     # 项目描述
print(project.components)      # 获取项目组件
print(project.raw)             # 获取项目的原始API数据

2.4 查询JIRA的issue信息

可以查询到信息有:

  • 所属项目
  • 问题类型和状态
  • 标题和描述
  • 干系人
  • 时间点
  • 附件和评论等
python 复制代码
from jira import JIRA

jira = JIRA('https://jira.xxx.xxx', basic_auth=('username', 'password'))
issue = jira.issue('KKQA-57857')
print(issue)                # jiraID
print(issue.id)             # internalID
print(issue.fields.project) # 所属项目
print('-----------------------------------')

print(issue.fields.issuetype)    # 问题类型
print(issue.fields.status)       # 问题状态
print(issue.fields.timetracking) # 时间跟踪
print(issue.fields.issuelinks)   # 链接的问题
print('-----------------------------------')

print(issue.fields.creator)           # 创建人
print(issue.fields.reporter)          # 报告人
print(issue.fields.assignee)          # 经办人
print(issue.fields.customfield_10202) # 缺陷类型(自定义字段)
print(issue.fields.labels)            # 标签
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('-----------------------------------')

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)     # 解决时间
print(issue.fields.environment)        # 环境

2.5 搜索Jira issue

Jira有一套专门的搜索语言,称为JQL(Jira Query Language),Jira的Python库便是基于JQL语法进行搜索的,返回的是搜索到的问题列表。使用语句为:

python 复制代码
jira.search_issues('JQL语句')

默认最大结果数为1000,可以通过maxResults参数配置,参数为-1时不限制数量,返回所有搜索结果。

python 复制代码
from jira import JIRA

jira = JIRA('https://jira.xxx.xxx', basic_auth=('username', 'password'))
jql = 'status in (等待修复, 修复中, 自测中) AND affectedVersion = A7.60.0'
issues = jira.search_issues(jql, 0, 9999, 1, '', '', '')
print(issues)
for issue in issues:
    print(f'经办人: {issue.fields.assignee}, {issue.fields.summary}')

参考文档:

https://doc.devpod.cn/jira/jql-3244098.html

https://blog.csdn.net/alice_tl/article/details/101784046

相关推荐
进击的六角龙1 小时前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
一只爱好编程的程序猿1 小时前
Java后台生成指定路径下创建指定名称的文件
java·python·数据下载
Aniay_ivy1 小时前
深入探索 Java 8 Stream 流:高效操作与应用场景
java·开发语言·python
gonghw4032 小时前
DearPyGui学习
python·gui
向阳12182 小时前
Bert快速入门
人工智能·python·自然语言处理·bert
engchina2 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
兆。2 小时前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
南宫理的日知录2 小时前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
coberup3 小时前
django Forbidden (403)错误解决方法
python·django·403错误
龙哥说跨境3 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫