基于jira的缺陷自动化报表分析 (八)matplotlib 折线图:缺陷发现、修复、遗留数量趋势分析

一、获取数据

之前的文章 基于jira的缺陷自动化报表分析 (五)按项目统计缺陷情况 我们有按照项目每天统计了项目缺陷发现数量、遗留数量、修复数量。

 

这里我们可以直接获取该数据使用

基于jira的缺陷自动化报表分析 (八)matplotlib 折线图:缺陷发现、修复、遗留数量趋势分析_第1张图片

 

二、绘制折线图

我们接 基于jira的缺陷自动化报表分析 (七)matplotlib 饼图:缺陷严重性分布 一文,在 Draw 类新增一个绘制折线图方法

从数据我们可以看出,每天的数据都分别有缺陷发现、修复、遗留数量三条数据,意味着以日期为横轴、数量为纵轴,需要绘制三条折线

# coding=utf-8
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

plt.rcParams['font.sans-serif'] = ['simhei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号


class Draw:
    """
    绘图
    """
    def __init__(self, reportpath):
        self.reportpath = reportpath

    # 只显示>1标签
    def my_autopct(self, pct, limit=1):
        return ('%.2f%%' % pct) if pct > limit else ''

    def drawing_cake(self):
        """
        绘制饼状图
        """
        pass
        

    def drawing_histogram(self):
        """
        柱状图
        """
        pass 
        

    def drawing_linechart_more(self, project_name, title, x_lebal, *y_labels, **kw):
        """
        绘制折线图:支持多折线
        """
        fig, ax = plt.subplots(1, 1)
        # 设置 x 轴显示密度
        tick_spacing = 10
        ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
        for i in range(len(y_labels)):
            plt.plot(x_lebal, y_labels[i], kw['marker'][i], linewidth=1, label=kw['label'][i])
        plt.legend()  # 让图例生效
        x = range(len(x_lebal))
        plt.xticks(x, x_lebal, rotation=90, fontsize=6)
        plt.margins(0)
        plt.subplots_adjust(bottom=0.15)
        plt.xlabel("Date(day)")  # X轴标签
        plt.ylabel("Number")  # Y轴标签
        plt.title(project_name + title)  # 标题
        plt.savefig(self.reportpath + "/" + project_name + title + '.png')
        plt.show()
        plt.cla()
        plt.close("all")

 

三、统计数据并绘图

1、导入依赖模块

from ana_jira import Ana_jira
from draw import Draw
from common.mysqluntil import MysqlUntil

2、定义一个类用来统计折线数据

class Line:
    def __init__(self, project_name, test_jira, first_day, last_day, types, weeks, report_path):
        self.project_name = project_name
        self.test_jira = test_jira
        self.first_day = first_day
        self.last_day = last_day
        self.types = types
        self.weeks = weeks
        self.report_path = report_path

    
    # 折线图——发现、修复、遗留数量趋势图
    def line_lave(self):
        sql = '''
        SELECT
            `date`,
            `amount_find`,
            `amount_lave`,
            `amount_repair`
        FROM
            `project_issues`
        WHERE
            `project` = '{}'
        AND `date` BETWEEN '{}'
        AND '{}';
        '''.format(self.project_name, self.first_day, self.last_day)
        datas = MysqlUntil().mysql_select(sql)
        date, amount_find, amount_lave, amount_repair = [], [], [], []
        for data in datas:
            date.append(data['date'] if data['date'] else '未填写')
            amount_find.append(int(data['amount_find']) if data['amount_find'] else 0)  #
            amount_lave.append(int(data['amount_lave']) if data['amount_lave'] else 0)  # 遗留数量
            amount_repair.append(int(data['amount_repair']) if data['amount_repair'] else 0)
        if date:
            marker = ('b-.', 'r-', 'g--')  # 线段样式、颜色
            label = ('find', 'lave', 'repair') # 图例
            Draw(self.report_path).drawing_linechart_more(self.project_name,
                                                          " Issues Trend Analysis (IT WEEK)",
                                                          date,
                                                          amount_find, amount_lave, amount_repair,
                                                          marker=marker, label=label
                                                          )
            print('缺陷综合趋势图:最近{}周数据统计完成'.format(self.weeks))
        else:
            print('缺陷综合趋势图:最近{}周无数据'.format(self.weeks))

3、拓展统计方法

上述是按照每日统计的项目缺陷数据进行统计,除此之外,我们还可以直接执行JQL查询数据

例如,统计发现数量趋势图

def days(start_time, weeks, m=0):
    days = []
    for i in range(m, 7*weeks+m):
        enddays = start_time + datetime.timedelta(days=i)
        time_Stamp1 = int(time.mktime(enddays.timetuple()))  # 转换为时间戳:
        t1 = time.localtime(time_Stamp1)  # 转换成时间元祖
        day = time.strftime("%Y-%m-%d", t1)  # 转换为其他字符串格式:
        days.append(day)
    return days
def line(self):
    """
    绘制折线图:发现数量
    :param project_name:
    :return:
    """
    start_time = datetime.datetime.strptime(self.first_day + ' 00:00:00', "%Y-%m-%d %H:%M:%S")
    # x轴
    start = days(start_time, self.weeks)
    end = days(start_time, self.weeks, 1)
    y_lebal = []
    for m, n in zip(start, end):
        everyday_find_jql = 'project="{}" AND created >= {} AND created <= {}'.format(self.project_name, m, n)
        one_line = Ana_jira(self.test_jira, everyday_find_jql).req_jira()  # 缺陷数量
        y_lebal.append(one_line)
    if sum(y_lebal) > 0:
        marker = ('b-.')
        label = ('find')
        Draw(self.report_path).drawing_linechart_more(self.project_name,
                                                      " Issues Discovery Trend Analysis (IT WEEK)",
                                                      start,
                                                      y_lebal,
                                                      marker=marker, label=label
                                                      )
        print('项目{}最近{}周缺陷发现趋势统计完成'.format(self.project_name, self.weeks))
    else:
        print('项目{}最近{}周未提交BUG,无法分析缺陷发现趋势'.format(self.project_name, self.weeks))

 

四、执行统计

li = Line(project_name, test_jira, first_day, last_day, types, weeks, project_report_path)
# li.line()  # (项目)发现数量趋势
li.line_lave()  # (项目) 综合趋势分析:发现、修复、遗留数量(趋势是否收敛)

基于jira的缺陷自动化报表分析 (八)matplotlib 折线图:缺陷发现、修复、遗留数量趋势分析_第2张图片

你可能感兴趣的:(PYTHON,jira,缺陷自动化分析,python,数据可视化,matplotlib,jira)