
python脚本统计jira内BUG
直接上代码,注释都有。
·
直接上代码,注释都有
# 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无‘问题阶段’时,会直接脚本抛错,未给默认值
'''
更多推荐
所有评论(0)