python脚本统计jira内BUG

该Python脚本通过JIRAAPI连接到服务器,进行BUG的分页查询,按照创建时间、报告人、问题阶段等条件筛选,并对查询结果进行统计和汇总,包括报告人、项目、影响版本、问题阶段以及经办人的BUG数量。同时,它计算了测试准备阶段的BUG前置率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码,注释都有

# coding=utf-8
from jira import JIRA
import collections
options = {'server': 'https://jira.xxx.com/jira'}
jira = JIRA(basic_auth=("admin", "admin"),options=options)

# jql = f'issuetype = BUG AND created >= "2023-05-01 00:00" AND created <= "2023-06-30 23:59"'
jql = f'issuetype = BUG AND created >= "2023-01-01 00:00" AND created <= "2023-06-30 23:59" AND reporter in(ru,wang,jing)'    # 指定创建人的BUG汇总
# jql = f'issuetype = BUG AND created >= "2023-05-15 00:00" AND created <= "2023-05-20 23:59" AND reporter in(ruying,wangshuang,jingxia) AND 问题阶段=测试准备'    # 自定义查询条件
block_num = 0
stage_num = 0
issues = []


# 分页查询所有BUG_ID,存进issues
while True:
    start_idx = block_num*1000
    add_issues = jira.search_issues(jql, start_idx, maxResults=1000)   # 时间段内的BUG,单次最多只能返回1000条
    if len(add_issues) == 0:
        break
    block_num += 1
    for issue in add_issues:
        issues.append(issue)
print('总BUG数:' + str(len(issues)))

# 获取BUG详情,并按查询维度汇总BUG数
summary, summary_stage, summaryA, summaryB, summary_assignee = collections.defaultdict(int), collections.defaultdict(int), collections.defaultdict(int), collections.defaultdict(int), collections.defaultdict(int)  #   定义字典value类型int
for issue in issues:
    reporter = issue.fields.reporter.displayName    # 报告人
    project = issue.fields.project.name    # 项目
    affected_versions = issue.fields.versions[0].name    # 影响版本
    assignee = issue.fields.assignee    # 经办人
    stage = issue.fields.customfield_10406.value    # 问题阶段(自定义项)
    if stage == '测试准备':
        stage_num += 1
    summary[(reporter, project, affected_versions)] += 1    # 汇总“报告人、项目、影响版本”维度,样式:('王', '项目A', '迭代1'): 32
    summary_stage[(reporter, project, affected_versions, stage)] += 1   # 汇总“报告人、项目、影响版本、问题阶段”维度
    summaryA[(project, affected_versions)] += 1  # 汇总“项目、影响版本”维度
    summaryB[reporter] += 1     # 汇总“报告人”维度
    summary_assignee[assignee] += 1     # 汇总“经办人”维度
summary, summary_stage, summaryA, summaryB, summary_assignee = sorted(summary.items(), key=lambda x: x[1], reverse=True), sorted(summary_stage.items(), key=lambda x: x[1], reverse=True), sorted(summaryA.items(), key=lambda x: x[1], reverse=True), sorted(summaryB.items(), key=lambda x: x[1], reverse=True) , sorted(summary_assignee.items(), key=lambda x: x[1], reverse=True) # 按BUG数降序
print(f'BUG前置率:{stage_num}/{len(issues)}={int(stage_num*10000/len(issues))/100}%')
print('================“报告人、项目、影响版本”汇总==============')
for key, count in summary:
    reporter, project, affected_versions = key
    print(f'报告人: {reporter}, 项目: {project}, 影响版本: {affected_versions}, BUG数量: {count}')

print('================“报告人、项目、影响版本、问题阶段=测试准备”汇总==============')
for key, count in summary_stage:
    reporter, project, affected_versions, stage = key
    if stage == '测试准备':
        print(f'报告人: {reporter}, 项目: {project}, 影响版本: {affected_versions}, 问题阶段:{stage} BUG数量: {count}')
    else:
        pass

print('===============“项目、影响版本”汇总===============')
for key, count in summaryA:
    project, affected_versions = key
    print(f'项目: {project}, 影响版本: {affected_versions}, BUG数量: {count},本周测试人日,比例')

print('===============“报告人”汇总===============')
for key, count in summaryB:
    reporter = key
    print(f'报告人: {reporter}, BUG数量: {count}')

print('===============“经办人”汇总===============')
for key, count in summary_assignee:
    assignee = key
    print(f'经办人: {assignee}, BUG数量: {count}')


'''
1、脚本名不能用jira
2、单次查询BUG数,默认返回50条,加条数后 实际最多只1000条
3、BUG无‘问题阶段’时,会直接脚本抛错,未给默认值
'''

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值