通过接口请求统计BUG数据

本文介绍了如何使用Python脚本从百度效率云接口获取BUG数据,并进行分析。通过导入requests、openpyxl等库,实现数据获取、处理及图表绘制,解决图表功能问题。
摘要由CSDN通过智能技术生成

公司BUG管理系统用的是百度效率云,上面的图表绘制功能有问题,遂手写了从接口查询的脚本。

需要用到的库:
import os
import json
import time
import parsel
#用于进行接口返回数据分析的库
import requests
from openpyxl import load_workbook, Workbook
from openpyxl.chart.label import DataLabelList
#添加图表数据标签
from openpyxl.chart import PieChart, Reference, Series, BarChart3D
#进行图表绘制用到的库

# -*- coding: gbk -*-
import os
import json
import time
import parsel
import requests
from openpyxl import load_workbook, Workbook
from openpyxl.chart.label import DataLabelList
from openpyxl.chart import PieChart, Reference, Series, BarChart3D


class GetBugInfo:
    def __init__(self, project, plan_name):
        self.test = requests.session()
        url = 'https://login.bce.baidu.com/login'
        data = {
   
                "accountId": "xxxxxxx",
                # 企业在百度效率云的id
                "username": "xxxxxx",
                # 自己的账号名称
                "password": "xxxxxx",
                # 自己的登录密码
                "redirect": "https://console.bce.baidu.com"
                # 效率云登录成功的跳转链接
            }
        self.test.post(url=url, data=data)
        cookies = requests.utils.dict_from_cookiejar(self.test.cookies)
        # 将登陆获取到的csrftoken存放到headers中
        self.test.headers["csrftoken"] = cookies["bce-user-info"]
        self.project = project
        self.project_uuid = None
        self.plan_name = plan_name
        self.plan_dict = {
   }
        self.status_dict = {
   }
        self.severity_dict = {
   }
        self.priority_dict = {
   }
        self.tester_dict = {
   }
        self.front_dict = {
   }
        self.back_dict = {
   }
        self.status_count_dict = {
   }
        self.severity_count_dict = {
   }
        self.priority_count_dict = {
   }
        self.tester_count_dict = {
   }
        self.front_count_dict = {
   }
        self.back_count_dict = {
   }
        self.front_all_bug_count = 0
        self.back_all_bug_count = 0
        self.all_plan_bug_count_dict = {
   }
        
    def get_project_uuid(self):
        # 获取项目对应的UUID
        get_uuid_url = 'https://xly.bce.baidu.com/api/facade/hrpackage/rest/v1/companies/hrpackage/projects?name=&tags=&_limit=49&_offset=0'
        resp = self.test.get(get_uuid_url)
        for project in json.loads(resp.content):
            if project["name"] == self.project:
                self.project_uuid = project["uuid"]
        if not self.project_uuid:
            raise ValueError(f"不存在此项目:【{
     self.project}】")

# 获取计划列表
    def get_plan_list(self):
        # 获取项目下计划列表
        get_plan_list_url = f'https://xly.bce.baidu.com/hrpackage/{
     self.project_uuid}/icafe//planAndTrack/{
     self.project_uuid}/getPlanBoxData'
        get_plan_list_data = {
   "scope": "all"}
        resp = self.test.post(url=get_plan_list_url, data=get_plan_list_data)
        plan_list = json.loads(resp.content.decode())
        for plan in plan_list:
            self.plan_dict[plan["name"]]= plan["id"]
            if "未计划" == plan["name"]:
                del self.plan_dict["未计划"]
            if "需求" in plan["name"]:
                del self.plan_dict[plan["name"]]

        if self.plan_name not in self.plan_dict.keys():
            raise ValueError(f"当前没有【{
     self.plan_name}】的计划!")

    def get_bug_count_func(self, data):
        # 基础方法
        url = f'https://xly.bce.baidu.com/hrpackage/{
     self.project_uuid}/icafe/planAndTrack/content/{
     self.project_uuid}/hierarchy'
        resp = self.test.post(url=url, data=data)
        select = parsel.Selector(resp.text.encode('utf-8').decode())
        bug_count = int(select.css('div.hierarchy-tool-bar-fromPlan div b::text').get().strip())
        return bug_count

    def get_plan_all_bug_count(self, plan_name):
        # 获取单个迭代的bug总数
        data = {
   
            "planBoxId": self.plan_dict[f"{
     plan_name}"],
            "containSubBox": True,
            "q": "[issueTypeId][in][5009]"
            # 获取计划下面的BUG数
        }
        bug_count = self.get_bug_count_func(data)
        return bug_count

    def get_status_bug_count(self):
        # 获取各流程状态的bug数量
        # 流程状态映射:新建:726      挂起:6035     验证中:2       已完成:3
        # 公司内部自己创建的流程字段,各公司可能不一样
        self.status_dict = {
   "新建": 726, "挂起": 6035, &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值