0
点赞
收藏
分享

微信扫一扫

使用python-matplotlib绘制linux-GUI软件性能测试曲线

追梦人的自留地 2022-04-27 阅读 48

一、效果图

 

二、实现步骤:绘制软件性能曲线(以load为例)

1.准备测试脚本

GUI操作脚本

2.提取关键性能分析点

1.what?

  • load负载值

    • load average:系统平均负载是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。这个数字越小越好。

    • 负载高、使用率低

    • 利用率高、负载低

      • 说明等待执行的任务很多。很可能是进程僵死了。通过命令 ps -aux 查看是否存在D状态的进程,该状态为不可中断的睡眠状,态。处于D状态的进程通常是在等待IO,通常是IO密集型任务,如果大量请求都集中于相同的IO设备,超出设备的响应能力,会造成任务在运行队列里堆积等待,也就是D状态的进程堆积,那么此时Load Average就会飙高。

      • 说明任务少,但是任务执行时间长,有可能是程序本身有问题,如果没有问题那么计算完成后则利用率会下降。这种场景,通常是计算密集型任务,即大量生成耗时短的计算任务。

    • 使用率低、负载低、IOPS 高

      • 通常是低频大文件读写,由于请求数量不大,所以任务都处于R状态(表示正在运行,或者处于运行队列,可以被调度运行),负载数值反映了当前运行的任务数,不会飙升,IO设备处于满负荷工作状态,导致系统响应能力降低。

2.when?

  • 软件运行时,各种操作、等待页面时,提取load

3.where?

  • linux环境下的GUI软件

4.why?

  • 当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。 当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。 当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。

  • 以上指标都是基于单CPU的,但是现在很多电脑都是多核的。所以,对一般的系统来说,是根据cpu数量去判断系统是否已经过载(Over Load)的。如果我们认为0.7算是单核机器负载的安全线的话,那么四核机器的负载最好保持在3(4*0.7 = 2.8)以下。

  • 还有一点需要提一下,在Load Avg的指标中,有三个值,1分钟系统负荷、5分钟系统负荷,15分钟系统负荷。我们在排查问题的时候也是可以参考这三个值的。

  • 一般情况下,1分钟系统负荷表示最近的暂时现象。15分钟系统负荷表示是持续现象,并非暂时问题。如果load15较高,而load1较低,可以认为情况有所好转。反之,情况可能在恶化。

5.who?

  • 单用户

3.log管理

记录load 1值

  • test.log

记录测试操作步骤

  • atp.log

4.matplot下性能曲线绘制

1)x轴

  • 时间戳

2)y轴

  • load1值

3)折线*1

  • 时间戳-load1折线图

4)散点图*1

  • 测试操作散点图

5)水平线*2

  • 负载区间

三、文件目录

四、文件详情

1)软件自动化测试脚本log:atp.log

2022_04_22_10_36_37_607;click, 0.85, 0.68

2022_04_22_10_37_26_919;sta1, 0.89, 0.70

2022_04_22_10_39_22_940;click, 0.95, 0.75

2022_04_22_10_39_23_150;sta1:卡死, 0.95, 0.75

2022_04_22_10_39_23_360;sta2:闪退, 0.95, 0.75

2)test.log3)

2022_04_22_10_36_37_607;0.92, 0.85, 0.68

2022_04_22_10_37_26_919;1.21, 0.89, 0.70

2022_04_22_10_39_22_940;0.97, 0.95, 0.75

2022_04_22_10_39_23_150;0.97, 0.95, 0.75

2022_04_22_10_39_23_360;0.28, 0.95, 0.75

 3)绘制程序

import time as t
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import numpy as np
import cv2
# matplotlib 中文转义
plt.rcParams['font.sans-serif'] = ['SimHei']



def curve_plot(name1,name2):
    t_start = 2022_04_22_10_37_26_919
    t_end = 2022_04_22_10_39_22_940
    lines = open(name1, encoding='utf-8').readlines()
    lines2 = open(name2, encoding='utf-8').readlines()
    xlist,timelist,txt1list,y1list=[],[],[],[]
    for line in lines2:
        if len(line) != 1:
            time,txt = line.strip().split(';')
            txt1,txt2,txt3 = txt.split(',')
            for lineq in lines:
                if len(lineq)!= 1:  #如果不为空
                    x,y = lineq .strip().split(';')
                    y1, y2, y3 = y.split(',')
                    y1 = float(y1)
                    if x == time:
                        xlist.append(x)
                        timelist.append(time)
                        txt1list.append(txt1)
                        y1list.append(y1)

    #绘制
    plt.plot(xlist, y1list,color='g') #
    plt.xticks(rotation=10)  # 旋转x度
    plt.scatter(xlist, y1list, marker='o')
    for i in range(len(xlist)):
        plt.annotate(txt1list[i], xy=(xlist[i], y1list[i]), xytext=(xlist[i], y1list[i]))  # 这里xy是需要标记的坐标,xytext是对应的标签坐标
    plt.hlines(0.7, xmin=0, xmax=10, ls='--', color='royalblue', label='normal')
    plt.hlines(1.0, xmin=0, xmax=10, ls='--', color='orange', label='alarm')
    plt.show()



curve_plot('test.log','atp.log')
举报

相关推荐

0 条评论