一般的自动化测试中都会有这样一个需求,就是需要监控设备资源利用率并输出
那我们就来分析下这个需求
1.监控资源(linux环境有命令查看,也有专门的位置取存放信息)
2.输出图标(python的数据可视化)
那我就来简单介绍下这次使用到的psutil和matplotlib库
一.psutil模块
python获取系统信息的渠道有很多,如内置的Subprocess模块,os.popen()和os.popen(cmd).read()方法
不过他们都需要解析返回的大量信息,
使用psutil就很简单了,它有封装的方法是帮你解析好的
(1)获取CPU信息:使用psutil.cpu_times()获取CPU的完整信息
import psutil
print(psutil.cpu_times())
>>>>scputimes(user=5681.026016599999, system=1444.0388566000001, idle=11999.59692, interrupt=90.9641831, dpc=205.5625177)
(2)获取内存信息:使用psutil.virtual_memory() 获取系统内存的使用情况;
print(psutil.virtual_memory())
svmem(total=8553431040, available=4593131520, percent=46.3, used=3960299520, free=4593131520)
psutil.swap_memory()获取系统交换内存的统计信息
print(psutil.swap_memory())
svmem(total=8553431040, available=4593131520, percent=46.3, used=3960299520, free=4593131520)
剩下的我会针对进程来说
1.psutil.pids()获取所有进程号(列表)
2.p = psutil.Process(进程号)
p.name()#获取该进程的进程名
p.cpu_times()#该进程所有cpu信息,为元组
p.memory_info()#该进程所有内存信息,为元组
剩下的信息,可以自己去了解下,以下为源码的索引地址,包括返回值的内容都有介绍
https://github.com/giampaolo/psutil/blob/master/docs/index.rst
二.matplotlib模块
现在关于数据可视化这块也有matplotlib和Pyecharts这2种,下一次会写篇文字专门介绍他们的不同
matplotlib模块核心代码很简单,所以使用范围很广,但是matplotlib是可以玩出花活的,大致为散点的
形状和颜色,还有画布的一些设置(当然涉及numpy复杂的数学画图那就比较麻烦了)
matplotlib主要画图代码,一般就用到下面这些
import matplotlib.pyplot as plt
import psutil
plt.rcParams['font.sans-serif']=['SimHei'] #中文标示
x = [1,2,3,4,5,6,7,8]
y = [5,2,4,2,1,4,5,2]
x1 = [8,7,6,5,4,3,2,1]
y1 = [4,9,5,6,7,8,7,4]
plt.legend(loc='best') #图例显示及位置
plt.plot(x,y,'r',label='cpu') #红色标示cpu,且图例名字为cpu
plt.plot(x1,y1,'b',label='内存') #蓝色标示内存,且图例名字为内存
plt.xlabel('时间') #X轴标题
plt.ylabel('cpu占用率')#y轴标题
plt.title('某某进程cpu内存占用图') #标题
plt.grid(True)#显示网格
plt.show()
目前库方法就介绍到这里
剩下的部分看起来就是结合着两部分,但是实际遇到了很多困难
1.表中的时间戳怎么设置?
2.获取的内存cup信息的间隔时间怎么确定?
3.对于这些信息是写入文件,还是放入缓存
4.进程退出报错如何处理?
因为时间有限,我下面的代码,只解决的几个问题,也希望你能多多指点
import matplotlib.pyplot as plt
import psutil
import time
import datetime
#获得想要进程的信息(用进程名找到进程号)
def get_process_info(process_name):
'''
获取进程信息
:param process_name: 输入进程名
'''
for i in psutil.pids():
pid = None
p = psutil.Process(i)
if p.name() == process_name:
pid = i
break
with open("E:\python\Py_29\data.txt",mode="a") as f:
for i in range(10):
cpu_list = psutil.Process(pid).cpu_times()
mem_list = psutil.Process(pid).memory_info()
time_ack = datetime.datetime.now().strftime("%M:%S")
mem_prent = mem_list[0] / mem_list[1]
f.write(str(time_ack) + "-" + str(mem_prent) + "-" + str(cpu_list[0]) + "-" +"\n")
time.sleep(1)
get_process_info("TXEDU.exe")
with open("case.log") as f:
cenent = f.readlines()
cpu_list = []
mem_list = []
time_list = []
for i in cenent:
list_a = i.split("-")
time_list.append(list_a[0])
cpu_list.append(list_a[2])
mem_list.append(list_a[1])
plt.rcParams['font.sans-serif']=['SimHei'] #中文标示
plt.legend(loc='best') #图例显示及位置
plt.xticks(rotation=60)
plt.plot(cpu_list,time_list,'r',label='cpu') #红色标示cpu,且图例名字为cpu
# plt.plot(y,x1,'b',label='men') #红色标示cpu,且图例名字为cpu
plt.xlabel('时间') #X轴标题
plt.ylabel('cpu占用率')#y轴标题
plt.title('某某进程cpu内存占用图') #标题
plt.grid(True)#显示网格
plt.gcf().autofmt_xdate()
plt.show()