【Android】 andorid camera自动化测试入门【三】

1 前言

在之前的内容里面已经大致介绍了python如何实现自动化的操作android设备。

这边细分下读取文件内容并且根据相关的数据来画对应的图。

首先我上一个系统做的是python自动化测试android设备camera并且记录其内存PSS部分的内容。

我们需要使用相关的命令把camera 对应的PSS dump下来保存到一个文件中。

对应的adb命令如下,只要把这个命令嵌入到python脚本中即可。

adb  shell dumpsys meminfo camerahalserver |grep -iE "TOTAL PSS" >> hal_PSS.txt

然后我们写个函数去读取这个文件的内容解析数据并画图即可。

是不是很简单。

2 读取文件

filename = "hal_PSS.txt" #文件名字,我这边是做成一个函数,所以我并不在乎实际的文件名。反正都可以随便拼接

逐行读取文件里面的内容,在这个循环内进行操作:

for line in fileinput.input(filename):

然后我们分析下hal_PSS.txt文件里面的内容,相关的内容如下:

           TOTAL PSS:    79355            TOTAL RSS:   104520      TOTAL SWAP (KB):        0
           TOTAL PSS:    79372            TOTAL RSS:   104520      TOTAL SWAP (KB):        0
           TOTAL PSS:    86361            TOTAL RSS:   111872      TOTAL SWAP (KB):        0
           TOTAL PSS:    91069            TOTAL RSS:   116888      TOTAL SWAP (KB):        0
           TOTAL PSS:   360285            TOTAL RSS:   386116      TOTAL SWAP (KB):        0
           TOTAL PSS:   351685            TOTAL RSS:   377516      TOTAL SWAP (KB):        0
           TOTAL PSS:   348977            TOTAL RSS:   374808      TOTAL SWAP (KB):        0
           TOTAL PSS:   359813            TOTAL RSS:   385644      TOTAL SWAP (KB):        0
           TOTAL PSS:    89932            TOTAL RSS:   115696      TOTAL SWAP (KB):        0
           TOTAL PSS:    92000            TOTAL RSS:   117764      TOTAL SWAP (KB):        0
           TOTAL PSS:    91940            TOTAL RSS:   117704      TOTAL SWAP (KB):        0
           TOTAL PSS:    92296            TOTAL RSS:   118060      TOTAL SWAP (KB):        0
           TOTAL PSS:    92273            TOTAL RSS:   118080      TOTAL SWAP (KB):        0
           TOTAL PSS:    92310            TOTAL RSS:   118124      TOTAL SWAP (KB):        0
           TOTAL PSS:    92326            TOTAL RSS:   118140      TOTAL SWAP (KB):        0
           TOTAL PSS:    92250            TOTAL RSS:   118064      TOTAL SWAP (KB):        0
           TOTAL PSS:    92310            TOTAL RSS:   118124      TOTAL SWAP (KB):        0
           TOTAL PSS:    92322            TOTAL RSS:   118136      TOTAL SWAP (KB):        0

我们需要的是PSS之后的第一个字段内容。

先过滤出PSS之后的内容存到textPSS中。

        textPSS = line.split('TOTAL PSS:')[1]  

好了 到这一步打印出textPSS看

     79355            TOTAL RSS:   104520      TOTAL SWAP (KB):        0
     79372            TOTAL RSS:   104520      TOTAL SWAP (KB):        0
     86361            TOTAL RSS:   111872      TOTAL SWAP (KB):        0
     91069            TOTAL RSS:   116888      TOTAL SWAP (KB):        0
    360285            TOTAL RSS:   386116      TOTAL SWAP (KB):        0
    351685            TOTAL RSS:   377516      TOTAL SWAP (KB):        0
    348977            TOTAL RSS:   374808      TOTAL SWAP (KB):        0
    359813            TOTAL RSS:   385644      TOTAL SWAP (KB):        0
     89932            TOTAL RSS:   115696      TOTAL SWAP (KB):        0
     92000            TOTAL RSS:   117764      TOTAL SWAP (KB):        0
     91940            TOTAL RSS:   117704      TOTAL SWAP (KB):        0
     92296            TOTAL RSS:   118060      TOTAL SWAP (KB):        0
     92273            TOTAL RSS:   118080      TOTAL SWAP (KB):        0
     92310            TOTAL RSS:   118124      TOTAL SWAP (KB):        0
     92326            TOTAL RSS:   118140      TOTAL SWAP (KB):        0
     92250            TOTAL RSS:   118064      TOTAL SWAP (KB):        0
     92310            TOTAL RSS:   118124      TOTAL SWAP (KB):        0
     92322            TOTAL RSS:   118136      TOTAL SWAP (KB):        0

再把空格给去掉,保证数字存储在数组的第一个字段先

        textPSS = textPSS.strip()  				  #去掉空格

打印出来的显示内容如下:

79355            TOTAL RSS:   104520      TOTAL SWAP (KB):        0
79372            TOTAL RSS:   104520      TOTAL SWAP (KB):        0
86361            TOTAL RSS:   111872      TOTAL SWAP (KB):        0
91069            TOTAL RSS:   116888      TOTAL SWAP (KB):        0
360285            TOTAL RSS:   386116      TOTAL SWAP (KB):        0
351685            TOTAL RSS:   377516      TOTAL SWAP (KB):        0
348977            TOTAL RSS:   374808      TOTAL SWAP (KB):        0
359813            TOTAL RSS:   385644      TOTAL SWAP (KB):        0
89932            TOTAL RSS:   115696      TOTAL SWAP (KB):        0
92000            TOTAL RSS:   117764      TOTAL SWAP (KB):        0
91940            TOTAL RSS:   117704      TOTAL SWAP (KB):        0
92296            TOTAL RSS:   118060      TOTAL SWAP (KB):        0
92273            TOTAL RSS:   118080      TOTAL SWAP (KB):        0
92310            TOTAL RSS:   118124      TOTAL SWAP (KB):        0
92326            TOTAL RSS:   118140      TOTAL SWAP (KB):        0
92250            TOTAL RSS:   118064      TOTAL SWAP (KB):        0
92310            TOTAL RSS:   118124      TOTAL SWAP (KB):        0
92322            TOTAL RSS:   118136      TOTAL SWAP (KB):        0

剩下把数字给过滤出来

        textPSS = re.findall("\d+\.?\d*",textPSS) #过滤出对应的数字

打印出来的内容显示如下

['79355', '104520', '0']
['79372', '104520', '0']
['86361', '111872', '0']
['91069', '116888', '0']
['360285', '386116', '0']
['351685', '377516', '0']
['348977', '374808', '0']
['359813', '385644', '0']
['89932', '115696', '0']
['92000', '117764', '0']
['91940', '117704', '0']
['92296', '118060', '0']
['92273', '118080', '0']
['92310', '118124', '0']
['92326', '118140', '0']
['92250', '118064', '0']
['92310', '118124', '0']
['92322', '118136', '0']

我们只要第一段PSS的内容。后面的RSS和SWAP的内容都不需要。

由于dump下来的单位是kb,需要/1024转换成MB,加载到y_list中用作纵坐标。

        y = round(int(textPSS[0])/1024, 2)
        y_list.append(y)

横坐标就以行数为基准cnt 在循环开始前赋值为0,每一个读取行数增加1然后给到x_list中。

        x = cnt + 1
        x_list.append(x)
        cnt = cnt+1

3 画图

横坐标和纵坐标都有了。接下来都正常画图即可。

全部的画图demo代码如下。

#画图函数
def plot(filename):
    global a
    cnt = 0
    y_list = list()
    x_list = list()
    for line in fileinput.input(filename):
        #print(cnt+1,line)
        #print("测试次数",cnt)
        textPSS = line.split('TOTAL PSS:')[1]  
        textPSS = textPSS.strip()  				  #去掉空格
        textPSS = re.findall("\d+\.?\d*",textPSS) #过滤出对应的数字
        y = round(int(textPSS[0])/1024, 2)
        y_list.append(y)
        
        x = cnt + 1
        x_list.append(x)
        cnt = cnt+1

    print("总共测试",cnt,"次")

    y_max = y_list.index(max(y_list))
    #a.testCase为对应的测试模块/ open/photo/switch
    print(a.testCase,"最大PSS测试是第",y_max+1,"次,测试PSS为",max(y_list),"MB")  
    #画图
    plt.figure()
    plt.scatter(x_list, y_list, c='red', s=10, label='mb')
    plt.xticks(range(x_list[0], x_list[cnt-1], int(cnt/4)))
    plt.yticks(range(0, int(max(y_list)+100), int((max(y_list)+100)/5)))
    peaks, _ = find_peaks(y_list)
    plt.xlabel("time", fontdict={
    
    'size': 16})
    plt.ylabel("PSS", fontdict={
    
    'size': 16})
    plt.title(a.testCase, fontdict={
    
    'size': 20})
    plt.legend(loc='best')
    plt.savefig(outJPG)

整体的呈现效果如下:

猜你喜欢

转载自blog.csdn.net/qq_38753749/article/details/128738089