JIRA 模塊 bug管理工具


 

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/ 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM