from jira import JIRA #导入jira
jira=JIRA(server='http://127.0.0.1:8080', basic_auth=('name', 'password')) #和jira服务器建立连接

#获取当前用户
jira.user(jira.current_user()) #获取当前用户所有项目,返回项目字典
for j in jira.projects():
  print j, j.name #打印项目名称;
#通过字段id号获取issu
issue = jira.issue('JRA-1330', fields='summary,description,comment')
summary = issue.fields.summary
description = issue.fields.description
#查询issues
jql = "project=PROJ AND component = 模块 AND status=closed AND summary ~标题 AND description ~描述"
try:
issues = self.jira.search_issues(jql, maxResults=500) #maxResults参数是设置返回数据的最大值,默认是50。
except Exception as e:
print(e)
sys.exit(-1)
bug_count=len(issues) #查询的bug数
for issue in issue_search():
  issue = str(issue) + issue.fields.summary #标题
projectKey = issue.key.split("-")[0]  # 获得bug的项目key
  print issue return issue

components = jira.project_components(jira.project("项目key"))  # 获得某项目的所有模块名称
# 创建项目模块
jira.create_component(compoment, project, description=description, leadUserName=None, assigneeType=None, isAssigneeTypeValid=False) 
#查询相关参数
projects #所有项目,projects = jira.projects()
project #项目
components #模块
summary #标题
issuetype #获取缺陷类型,如缺陷,线上问题、改进等
deion #获取缺陷的具体描述内容
assignee #经办人,currentUser()现在的用户
reporter #报告人
resolution #解决结果,重复Duplicate,开始unresolved,
status #bug状态,关闭closed,已解决resolved
due #到期时间,due < endOfWeek()
created #创建时间
updated #更新时间
priority #优先级,按优先级排序orderby priority desc
#评论
comments_a = issue.fields.comments.comments
comments_b = jira.comments(issue) # comments_b ==comments_a
#更新bug信息
issue = jira.issue('JIRA-2')
issue.update(versions=[{"name":'V1.1'}])
issue.update(labels=['Label A','Label B'])
issue.update(components=[{'name': 'component'}])
issue.update(summary='new summary', description='description')
issue.update(assignee={'name': 'new_user'})
issue.update(issuetype={'name': 'Task'})
#更改bug状态status
transitions=self.jira.transitions(issue)
print([(t['id'],t['name']) for t in transitions])
self.jira.transition_issue(issue, 'To Do')
#或者
self.jira.transition_issue(issue, 11) issue_dict= {
'summary': 'issue概要',
'description': 'issue描述',
}
issue.update(fields=issue_dict)

def create_issue(self, summary, description, assignee, compoment, project, issuetype='Task', priority='Medium'):
    """
    创建提交bug
    :param project: 项目
    :param issuetype: 问题类型,Task
    :param summary: 主题
    :param compoment: 模块
    :param description: 描述
    :param assignee: 经办人
    :param priority: 优先级
    :return:
    """
    issue_dict = {
        'project': {'key': project},
        'issuetype': {'name': issuetype},
        'summary': summary,
        'components': [{'name': compoment}],
        'description': description,
        'assignee': {'name': assignee},
        'priority': {'name': priority},
    }
    return self.jira.create_issue(issue_dict)

#封装jira一些方法
from jira import JIRA
import sys class JiraTool():
def __init__(self, server, username, password, maxResults = 500):
self.server = server
self.basic_auth = (username, password)
# issues查询的最大值
self.maxResults = maxResults def login(self):
self.jira = JIRA(server=self.server, basic_auth=self.basic_auth)
if self.jira == None:
print('连接失败')
sys.exit(-1) def get_projects(self):
"""
获得jira 的所有项目
:return:
"""
return [(p.key, p.name, p.id) for p in self.jira.projects()] def get_components(self, project):
"""
获得某项目的所有模块
:param project:
:return:
"""
return [(c.name, c.id) for c in self.jira.project_components(self.jira.project(project))] def create_component(self, project, compoment, description, leadUserName=None, assigneeType=None, isAssigneeTypeValid=False):
"""
# 创建项目模块
:param project: 模块所属项目
:param compoment:模块名称
:param description:模块描述
:param leadUserName:
:param assigneeType:
:param isAssigneeTypeValid:
:return:
"""
components = self.jira.project_components(self.jira.project(project))
if compoment not in [c.name for c in components]:
self.jira.create_component(compoment, project, description=description, leadUserName=leadUserName,
assigneeType=assigneeType, isAssigneeTypeValid=isAssigneeTypeValid) def create_issue(self, project, compoment, summary, description, assignee, issuetype, priority='Medium'):
"""
创建提交bug
:param project: 项目
:param issuetype: 问题类型,Task
:param summary: 主题
:param compoment: 模块
:param description: 描述
:param assignee: 经办人
:param priority: 优先级
:return:
"""
issue_dict = {
'project': {'key': project},
'issuetype': {'id': issuetype},
'summary': summary,
'components': [{'name': compoment}],
'description': description,
'assignee': {'name': assignee},
'priority': {'name': priority},
}
return self.jira.create_issue(issue_dict) def delete_issue(self, issue):
"""
删除bug
:param issue:
:return:
"""
issue.delete() def update_issue_content(self, issue, issue_dict):
"""
更新bug内容
:param issue:
:param issue_dict:
issue_dict = {
'project': {'key': project},
'issuetype': {'id': issuetype},
'summary': summary,
'components': [{'name': compoment}],
'description': description,
'assignee': {'name': assignee},
'priority': {'name': priority},
}
:return:
"""
issue.update(fields=issue_dict)
def update_issue_issuetype(self, issue, issuetype):
"""
更新bug 状态
:param issue:
:param issuetype: 可以为id值如11,可以为值如'恢复开启问题'
:return:
"""
transitions = self.jira.transitions(issue)
# print([(t['id'], t['name']) for t in transitions])
self.jira.transition_issue(issue, issuetype) def search_issues(self, jql):
"""
查询bug
:param jql: 查询语句,如"project=项目key AND component = 模块 AND status=closed AND summary ~标题 AND description ~描述"
:return:
"""
try:
# maxResults参数是设置返回数据的最大值,默认是50。
issues = self.jira.search_issues(jql, maxResults=self.maxResults)
except Exception as e:
print(e)
sys.exit(-1)
return issues
def search_issue_content(self, issue, content_type):
"""
获取bug 的相关信息
:param issue:
:param content_type:项目project; 模块名称components; 标题summary; 缺陷类型issuetype; 具体描述内容description; 经办人assignee; 报告人reporter; 解决结果resolution; bug状态status; 优先级priority; 创建时间created; 更新时间updated; 评论comments
:return:
"""
# 评论
if content_type == 'comments':
return [c.body for c in self.jira.comments(issue)]
if hasattr(issue.fields, content_type):
result = getattr(issue.fields, content_type)
if isinstance(result, list):
return [c.name for c in result if hasattr(c, 'name')]
return result
if __name__ == '__main__':
jiratool = JiraTool('http://127.0.0.0:8080', '用户名', '密码')
jiratool.login()
issues = jiratool.search_issues('project=项目名称 AND component = 模块名称')
for issue in issues:
print(jiratool.search_issue_content(issue,'comments'))

参考官网官网:https://jira.readthedocs.io/en/master/

JIRA 模块 bug管理工具的更多相关文章

  1. windows系统搭建禅道系统(BUG管理工具)

    我也呆过三家公司了,用过的BUG管理工具也是五花八门的,常见的一般有禅道,bugzilla,jira等 个人比较推荐禅道,功能强大,主页的说明文档也是相当详细,最主要的是,用的人比较多,出现使用问题一 ...

  2. 开发人员必备的几款bug管理工具

    Bug是软件开发过程中的“副产品”,也是开发人员最不想见到的状况.如果没有跟踪和梳理各种bug和问题并及时解决,项目就会花费非常多的时间,导致整个项目的重心偏移.如果在产品开发过程中,使用一个合适的B ...

  3. 五款轻量型bug管理工具横向测评

    五款轻量型bug管理工具横向测评 最近正在使用的本地bug管理软件又出问题了,已经记不清这是第几次了,每次出现问题都要耗费大量的时间精力去网上寻找解决方案,劳心劳力.为了避免再次出现这样的情况,我决定 ...

  4. 将BUG管理工具(禅道)部署到服务器(测试服务器、云服务器)

      禅道是一个开源的项目管理软件,用来记录软件项目的开发过程.bug跟踪以及任务分配,它是基于PHP语言开发的.   https://www.zentao.net/download/80111.htm ...

  5. bug管理工具为开发者工作带来哪些改变?

    BUG管理工具的主要功能是对软件开发测试过程中出现的BUG进行跟踪管理,提高开发者的工作效率与工作质量. 在实际工作中,如果没有bug管理工具的帮助,就可能会出现如下一系列的影响: 1.软件测试人员将 ...

  6. iOS 开发 需要的版本管理工具,UI图,bug管理工具等

    1.版本管理工具  或直接 终端敲命令SVN(smartSvn 或者cornerstone/终端)  或git (sourceTree/终端) 2. 原型管理工具 使用墨刀(https://modao ...

  7. Bug管理工具MantisBT-2.18.0安装教程

    Bug管理工具MantisBT安装教程 MantisBT官网下载地址:https://sourceforge.net/projects/mantisbt/# 写于:2018.12.1 如上传博客资料图 ...

  8. bug管理工具

    1..禅道 禅道项目管理软件(简称:禅道)集产品管理.项目管理.质量管理.文档管理.组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程. 禅道的主要管理思想基于国际 ...

  9. 常用的bug管理工具

    1. QC(Quality Center)是原Mercury Interactive公司(现已被HP收购)生产的企业级基于WEB測试管理工具,须要安装配置IIS和数据库.系统资源消耗比較 大:功能非常 ...

随机推荐

  1. PHP特性整合(PHP5.X到PHP7.1.x)

    Buid-in web server内置了一个简单的Web服务器 把当前目录作为Root Document只需要这条命令即可: php -S localhost:3300 也可以指定其它路径 php ...

  2. oracle /plsql 计算平闰年天数函数

    --计算平闰年天数函数 CREATE OR REPLACE FUNCTION f_ping_run_nian (i_year NUMBER --定义函数名 ) RETURN VARCHAR2 IS - ...

  3. c++的set_unexpected不起作用

    代码是从:http://www.cplusplus.com/referen ... /?kw=set_unexpected找的 // set_unexpected example #include & ...

  4. spoj7001 Visible Lattice Points 莫比乌斯反演+三维空间互质对数

    /** 题目:Visible Lattice Points 链接:https://vjudge.net/contest/178455#problem/A 题意:一个n*n*n大小的三维空间.一侧为(0 ...

  5. 自动化软件部署的shell脚本

    在实际项目中,我们经常用到需要自动化部署软件的情况,这种情况下,我们就不能人为地在命令行下敲击命令了,一切都需要通过shell脚本自动化完成.所谓自动化完成,其实也就是通过写shell程序,模拟人为敲 ...

  6. SpringBoot 获取前端页面参数的集中方式总结

    SpringBoot的一个好处就是通过注解可以轻松获取前端页面的参数,之后尅将参数经过一系列处理传送到后台数据库,前端时间正好用到.大致分为一下几种: 1.指定前端URL请求参数名称与方法名称一致,这 ...

  7. android 开发积累

    1.ListView滚动黑屏问题 ListView滚动时,数据项变成黑色 问题解决办法:通过添加 android:cacheColorHint = "#00000000" 将背景设 ...

  8. C语言 百炼成钢25

    /* 题目61:编写一个名为removestring的函数,该函数用于从一个字符串中删除一定量的字符. 该函数接受三个参数: 第1参数代表源字符串 第2参数代表需要删除字符的起始位置(位置从0开始) ...

  9. HTML基本元素的运用

    段落相关标签<p><br><hr> 格式化相关标签<small><sub><sup><pre> 列表相关标签< ...

  10. Android Canvas和Paint基本使用

    这篇文章主要介绍下画笔Paint和画布Canvas的基本使用  1.Paint 创建对象Paint mPaint = new Paint(); 常用的基本方法有 :                mP ...