目前公司使用Jira作为项目管理工具。在每次迭代后的评审会上,我们需要对本次迭代的bug进行统计,帮助管理层更直观的了解研发的代码质量。本文将介绍如何使用Jira统计数据并将其可视化。1、准备工作首先安装Python依赖库#安装依赖库pip3installjirapip3installhtml-tablepip3installpyechartspip3installsnapshot_selenium其中jira使用jsql语法从项目中获取需要的数据html-table用于生成表格数据inHTML格式,pyecharts和snapshot_selenium用于数据可视化二、实战下面通过7个步骤来实现以上功能2-1登录获取客户端连接对象fromjiraimportJIRAclassJiraObj(object):def__init__(self,bug_style,project_type):""":paramproject_name:paramsprint:iterationnumber:parambug_style:BUGstatus"""#Jira主页地址self.server='https://jira.**.team'#Jira登录账号信息self.basic_auth=('username','password')#创建客户端连接信息self.jiraClinet=JIRA(server=self.server,basic_auth=self.basic_auth)2-2根据项目类型获取kanbanid...#获取看板n#所有看板信息板=[(item.id,item.name)foriteminself.jiraClinet.boards()]board_id=self.__get_board_id(boards,project_type)print("Boardid:",board_id)...def__get_board_id(self,boards,project_type):"""Getboardid:paramproject_type::return:"""board_id=1对于板中的项目:if(project_type==PROJ_TYPE.Type1anditem[1]=='t1')or(project_type==PROJ_TYPE.Type2anditem[1]=='t2'):board_id=item[0]breakreturnboard_id..2-3根据看板id获取迭代id和迭代名称...#获取项目Sprint,让用户选择sprints=self.jiraClinet.sprints(board_id=board_id)foritemin冲刺:ifstr(sprint_no)initem.name:self.sprint_id=item.idself.sprint_name=item.nameprint(f"SelectSprint,id:{self.sprint_id},name:{self.sprint_name}")break...2-4根据项目名称、bug类型、迭代id组成jsql语句,查询数据...defget_bug_status_jsql(self,bug_status:BUG_STATUS):"""通过bug状态获取jsql:parambug_status::return:"""status_jsql=''ifbug_status==BUG_STATUS.ALL:status_jsql=''elifbug_status==BUG_STATUS.TO_VERIFY:#待验证(已解决)status_jsql='ANDstatus=resolved'elifbug_status==BUG_STATUS.TO_FIXED:#待解决(打开,重新打开,处理)status_jsql='ANDstatusin(open,reopen,Processing)'elifbug_status==BUG_STATUS.CLOSED:#关闭status_jsql='ANDstatus=Closed'elifbug_status==BUG_STATUS.TO_FIXED_CONTAIN_DELAY:#待解决(打开、重新打开、处理、延迟处理)status_jsql='ANDstatusin(open,deferred,重新打开,进行中)'返回status_jsql...jql=f'project={project_name}andissuetype=fault{self.get_bug_status_jsql(self.bug_style)}ANDSprint={self.sprint_id}ORDERBYprioritydesc,updatedDESC'print(jql)lists=self.get_issue_list(jql)...2-5生成本地HTML统计数据需要注意的是,用a标签组装的链接不能直接重定向,需要替换两次数据才能normal执行链接跳转fromHTMLTableimport(HTMLTable)...defgen_html_table(self,datas):"""初始化表单样式:return:"""table=HTMLTable(caption=f'实时BUG统计【{self.project_name}],一共{len(datas)}')#表头行table.append_header_rows((('ID','status','priority','负责人','terminal','URL'),))#添加数据table.append_data_rows(datas)#设置样式table.caption.set_style({'font-size':'15px'})#其他样式设置...#替换数据,方便显示href地址html=表。to_html().replace("<","<").replace(">",">").replace(""",'"')与open(f"./output/{self.project_name}-bug_{current_time()}.html",'w',encoding='utf-8')asfile:file.write(html)...#生成本地文件数据output_tuples=tuple([(item.get("key"),item.get("status"),item.get("priority"),item.get('duty'),item.get('end_type'),f'
