前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python操作Jira提交BUG

Python操作Jira提交BUG

作者头像
王大力测试进阶之路
发布于 2020-05-28 14:59:11
发布于 2020-05-28 14:59:11
2.6K00
代码可运行
举报
文章被收录于专栏:橙子探索测试橙子探索测试
运行总次数:0
代码可运行

Jira提供了完善的RESTful API,如果不想直接请求API接口可以使用Python的Jira库来操作Jira

jira Python文档https://jira.readthedocs.io/en/latest/

安装:pip install jira

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

通过Cookis方式认证(用户名,密码)

通过Basic Auth方式认证(用户名,密码)

通过OAuth方式认证

认证方式只需要选择一种即可,以下代码为使用Cookies方式认证。

代码语言:javascript
代码运行次数:0
运行
复制
from jira import JIRA
jira=JIRA(server='http://jira.xxx.com/jira',auth=('账号','密码'))

返回的jira对象便可以对Jira进行操作:

项目(Project)

项目对象的主要属性及方法如下:

key: 项目的Key

name: 项目名称

description: 项目描述

lead: 项目负责人

projectCategory: 项目分类

components: 项目组件

versions: 项目中的版本

raw: 项目的原始API数据

代码语言:javascript
代码运行次数:0
运行
复制
# 访问权限的项目列表
print(jira.projects())
 
# 项目key
print(jira.project("KB").key)
 
# 项目名称
print(jira.project("KB").name)
 
# 项目描述
print(jira.project("KB").description)
 
# 项目负责人
print(jira.project("KB").lead)
 
# 项目模块
print(jira.project("KB").components)
 
# 项目版本
print(jira.project("KB").versions)
 
# 项目的原始API数据
print(jira.project("KB").raw)

问题(Issue)

Issue是Jira的核心,Jira中的任务,用户Story,Bug实质上都是一个Issue。

单个问题对象可以通过jira.issue("问题的Key")得到,问题的主要属性和方法如下:

id: 问题的id

key: 问题的Key

permalink(): 获取问题连接

fields: 问题的描述,创建时间等所有的配置域

raw: 问题的原始API数据

代码语言:javascript
代码运行次数:0
运行
复制
#问题的id
print(jira.issue('KB-18900').id)
 
#问题的Key
print(jira.issue('KB-18900').key)
 
#问题的描述,创建时间等所有的配置域
print(jira.issue('KB-18900').permalink())
 
#问题的原始API数据
print(jira.issue('KB-18900').raw)

配置域(Fields)

一般问题的ields中的属性分为固定属性和自定义属性,自定义属性格式一般为类似customfield_10012这种。常用的问题的Fields有:

assignee:经办人

created: 创建时间

creator: 创建人

labels: 标签

priority: 优先级

progress:

project: 所示项目

reporter: 报告人

status: 状态

summary: 问题描述

worklog: 活动日志

updated: 更新时间

watches: 关注者

comments: 评论

resolution: 解决方案

subtasks: 子任务

issuelinks: 连接问题

lastViewed: 最近查看时间

attachment

代码语言:javascript
代码运行次数:0
运行
复制
#经办人
print(jira.issue('CB-18900').fields.assignee)
 
#创建人
print(jira.issue('CB-18900').fields.creator)
 
#报告人
print(jira.issue('CB-18900').fields.reporter)
 
#责任人
print(jira.issue('CB-18900').fields.customfield_10316)
 
#创建时间
print(jira.issue('CB-18900').fields.created)
 
#标签
print(jira.issue('CB-18900').fields.labels)
 
#优先级
print(jira.issue('CB-18900').fields.priority)
 
#问题类型
print(jira.issue('CB-18900').fields.issuetype)
 
#所示项目
print(jira.issue('CB-18900').fields.project)
 
#状态
print(jira.issue('CB-18900').fields.status)
 
#问题描述
print(jira.issue('CB-18900').fields.summary)
 
#活动日志
print(jira.issue('CB-18900').fields.worklog)
 
#更新时间
print(jira.issue('CB-18900').fields.updated)
 
#关注着
print(jira.issue('CB-18900').fields.watches)

关注者/评论/附件

jira.watchers(): 问题的关注者

jira.add_watcher(): 添加关注者

jira.remove_watcher(): 移除关注者

jira.comments(): 问题的所有评论

jira.comment(): 某条评论

jira.add_comment():添加评论

comment.update()/delete(): 更新/删除评论

jira.add_attachment(): 添加附件

代码语言:javascript
代码运行次数:0
运行
复制
issue = jira.issue('JRA-1330')
 
print(jiaa.watchers(issue)) # 所有关注者
jira.add_watcher(issue, 'username') # 添加关注者
 
print(jira.comments(issue)) # 所有评论
comment = jira.comment(issue, '10234') # 某条评论
jira.add_comment(issue, 'new comment') # 新增评论
comment.update(body='update comment') # 更新评论
comment.delete() # 删除该评论
 
print(issue.fields.attachment) # 问题附件
jira.add_attachment(issue=issue, attachment='/some/path/attachment.txt') # 添加附件

创建/分配/转换问题

jira.create_issue(): 创建问题

jira.create_issues(): 批量创建问题

jira.assign_issue(): 分配问题

jira.transitions(): 获取问题的工作流

jira.transition_issue(): 转换问题

代码语言:javascript
代码运行次数:0
运行
复制
# 创建问题
issue_dict = {
  'project': {'id': 123},
  'summary': 'New issue from jira-python',
  'description': 'Look into this one',
  'issuetype': {'name': 'Bug'},
}
new_issue = jira.create_issue(fields=issue_dict)
 
# 批量创建问题
issue_list = [
{
  'project': {'id': 123},
  'summary': 'First issue of many',
  'description': 'Look into this one',
  'issuetype': {'name': 'Bug'},
},
{
  'project': {'key': 'FOO'},
  'summary': 'Second issue',
  'description': 'Another one',
  'issuetype': {'name': 'Bug'},
},
{
  'project': {'name': 'Bar'},
  'summary': 'Last issue',
  'description': 'Final issue of batch.',
  'issuetype': {'name': 'Bug'},
}]
issues = jira.create_issues(field_list=issue_list)
 
# 分配问题
jira.assign_issue(issue, 'newassignee')
 
# 转换问题
jira.transition_issue(issue, '5', assignee={'name': 'pm_user'}, resolution={'id': '3'})

提交bug

代码语言:javascript
代码运行次数:0
运行
复制
# 提交BUG
issue_dict = {
  'project': {'id': 10202},#项目id
  'summary': '测试',#BUG概要
  'description': '测试',#BUG详情
   'priority': {'name':'Low'},#bug优先级
  'assignee':{'name':'chengzi@x.com'},#分配人
  'customfield_10316':{'name':'chengzi@x.com'},#责任人
  'labels': ['大大项目'],#所属项目
  'issuetype': {'id': 10004}#问题类型-故障
}
new_issue = jira.create_issue(issue_dict)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
C++11的简单介绍(下)
上述代码就是使用C++11中的lambda表达式来解决,可以看出lambda表达式实际是一个匿名函数。
ahao
2024/03/19
1330
C++11的简单介绍(下)
C++11常用的一部分新特性
C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自 定义的类型,使用初始化列表时,可添加等号(=),也可不添加。
有礼貌的灰绅士
2023/06/14
4780
C++11常用的一部分新特性
C++11(3)
C++11 的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含 固定数量 的模版参数,可变模版参数无疑是一个巨大的改
啊QQQQQ
2024/11/19
1030
C++11(3)
【c++】一篇文章带你了解c++11的新特性&&c++11详解
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。
用户10925563
2024/08/06
2410
【c++】一篇文章带你了解c++11的新特性&&c++11详解
【c++11】包装器
包装器(Wrapper) 是一个常见的编程设计模式,通常用于封装或“包装”某个现有的对象、函数、数据结构或者操作,以提供额外的功能或简化接口。在不同的上下文中,包装器可能有不同的实现方式和目的,但核心思想都是“将现有功能封装起来,以实现更强的扩展性、易用性或者功能分离”。
用户11029103
2025/02/03
1470
【c++11】包装器
【C++航海王:追寻罗杰的编程之路】C++11(四)
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。
枫叶丹
2024/06/04
1600
【C++航海王:追寻罗杰的编程之路】C++11(四)
【C++高阶】:C++11的深度解析下
C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比C++98,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。
IsLand1314
2024/10/15
1410
【C++高阶】:C++11的深度解析下
[C++11札记]: std::function
在C/C++中函数指针作为一种回调机制被广泛使用,但是函数指针在C++面向对象编程中有些不足,比如无法捕捉上下文。举个例子,使用对象的非静态成员函数作为函数指针就无法做到。
云水木石
2019/07/01
1.4K0
【C++】C++11
C++11 是 C++ 的第⼆个主要版本,并且是从 C++98 起的最重要更新。它引⼊了⼤量更改,标准化了既 有实践,并改进了对 C++ 程序员可⽤的抽象。在它最终由 ISO 在 2011 年 8 ⽉ 12 ⽇采纳前,⼈们曾使⽤名称“C++0x”,因为它曾被期待在 2010 年之前发布。C++03 与 C++11 期间花了 8 年时间,故⽽这是迄今为⽌最⻓的版本间隔。从那时起,C++ 有规律地每 3 年更新⼀次。
用户11290673
2025/02/05
1270
【C++】C++11
C++11特性大杂烩
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。
梨_萍
2023/05/11
9520
C++11特性大杂烩
跟Google学写代码--Chromium工程中用到的C++11特性
Ttile 跟Google学写代码--Chromium工程中用到的C++11特性 Chromium是一个伟大的、庞大的开源工程,很多值得我们学习的地方。 《跟Google学写代码–Chromium/base–stl_util源码学习及应用》 《跟Google学写代码–Chromium/base–windows_version源码学习及应用》 《跟Google学写代码–Chromium/base–cpu源码学习及应用》 今天就与大家一起分享一下Chromium中所用到的C++11特性,有的是之前博客没介绍过
程序员的酒和故事
2018/03/12
1.4K0
C++11
相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中 约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个 重点去学习。
小灵蛇
2024/06/06
1760
C++11
【C++11】解锁C++11新纪元:深入探索Lambda表达式的奥秘
前言:在C++编程语言的悠久历史中,每一次标准的更新都带来了革命性的变化,推动了编程范式和性能优化的新边界。C++11标准,作为这一漫长演进过程中的一个重要里程碑,不仅巩固了C++作为高性能系统级编程语言的地位,还引入了众多现代编程特性,极大地丰富了C++的表达力和易用性。其中,lambda表达式和std::function无疑是这些新特性中最引人注目且影响深远的两个
Eternity._
2024/08/05
1350
【C++11】解锁C++11新纪元:深入探索Lambda表达式的奥秘
C++11中lambda表达式与包装器
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。
用户11317877
2024/10/31
1020
C++11中lambda表达式与包装器
C/C++开发基础——函数对象与std::function模板
函数对象可以被当作一个值赋给另一个变量,也可以作为实参传递给其他函数,或者作为其他函数的返回结果。
Coder-ZZ
2023/02/23
9270
C/C++开发基础——函数对象与std::function模板
C++可调用Callable类型的总结
自从在使用 std::thread 构造函数过程中遇到了 Callable 类型的概念以来用到了很多关于它的使用. 因此本文把使用/调查结果总结出来. 包括 Callable 的基础概念, 典型的 Callable 类型介绍. 例如函数对象(狭义), 函数指针, lambda 匿名函数, 函数适配器, std::function 仿函数等.
高性能架构探索
2023/09/05
3380
C++可调用Callable类型的总结
C++11-lambda表达式/包装器/线程库
捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用
用户9645905
2022/11/30
1.2K0
C++11-lambda表达式/包装器/线程库
【C++11】C++11——包装器
function包装器也叫做适配器,C++11中的function本质是一个类模板,也是一个包装器。
平凡的人1
2023/10/15
3070
【C++11】C++11——包装器
【C++】————C++11
1998年是C++标准委员会成立的第一年,本来计划以后每5年视实际需要更新一次标准,C++国际标准委员会在研究C++ 03的下一个版本的时候,一开始计划是2007年发布,所以最初这个标准叫C++07。但是到06年的时候,官方觉得2007年肯定完不成C++ 07,而且官方觉得2008年可能也完不成。最后干脆叫C++0x。x的意思是不知道到底能在07还是08还是09年完成。结果2010年的时候也没完成,最后在2011年终于完成了C++标准。所以最终定名为C++11。
用户11036582
2024/08/16
960
【C++】————C++11
C++11新特性概览
今天买的《C++ Primer 第五版》到了,这一版本一个比较好的地方是。在开始的目录里面列出来了全书中涉及到的C++11新特性的地方,标明了页码,可以直接到对应的页面去看新特性的东西。于是我对照书上的例子,写了一些简单的示例,用来大概的了解C++11的新特性,总结在这里,以后可以查查。
王云峰
2019/12/25
4520
相关推荐
C++11的简单介绍(下)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档