直接上代码,注释都有

# 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无‘问题阶段’时,会直接脚本抛错,未给默认值
'''

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐