Android性能测试——应用内存测试

Android性能测试——应用内存测试

一、通过top获取内存值,生成内存趋势

1.如何获取内存的值,可以参考本人之前写的文章https://blog.csdn.net/zly_ir/article/details/105707618
2.在了解如何获取内存值得基础上,我们可以在测试应用的过程中,全程记录应用的内存使用情况,写入文件中,如使用如下指令:

#1秒输出一次top使用情况,输出使用量排名前5的应用的情况
adb shell top -d 1 > D:\DailyWork\top.log

如在测试过程中,记录的top文件内容结果如下
在这里插入图片描述
可以将需要的内容用脚本处理出来,比如,抽取出com.android.systemui的cpu和RSS使用量,以python脚本为例:

def process_log(self):
    """
    处理输入的日志
    :return: 是否处理成功
    """
    try:
    	process_name = 'com.android.systemui'
        with open('D:/DailyWork/top.log', 'r+', encoding='utf-8', errors='ignore') as f:
            file_director = 'D:/DailyWork/result/'
            if not os.path.isdir(file_director):
                os.makedirs(file_director)
            try:
                f_memory = open(file_director + '/' + process_name + '.mem.txt', 'w+')
                f_cpu = open(file_director + '/' + process_name + '.cpu.txt', 'w+')
                # 控制应用的
                system_mem_cpu_line_number = 0
                process_mem_cpu_line_number = 0
                # 按行读文件,遇到相应应用的信息,则进行处理
                for line in f.readlines():
                	if ('User' in line) and ('System' in line):
                        system_mem_cpu_line_number = system_mem_cpu_line_number + 1
	                if process_name in line:
	                    process_mem_cpu_line_number = process_mem_cpu_line_number + 1
	                    while process_mem_cpu_line_number < system_mem_cpu_line_number:
	                        process_mem_cpu_line_number = process_mem_cpu_line_number + 1
	                        f_cpu.write('0\n')
	                        f_memory.write('0\n')
	                    tmp = line.split()
	                    f_cpu.write(self.replace_str(tmp[2]) + '\n') # cpu值的位置可以自行确定,不一定是第二列
	                    f_memory.write(self.replace_str(tmp[6]) + '\n') 
                # 如果进程从未启动,也写入0值至文件夹
                while process_mem_cpu_line_number < system_mem_cpu_line_number:
                    process_mem_cpu_line_number = process_mem_cpu_line_number + 1
                    f_cpu.write('0\n')
                    f_memory.write('0\n')

                f_memory.flush()
                f_memory.close()
                f_cpu.flush()
                f_cpu.close()
            except IOError as err:
                print("File write error:" + str(err))
                return False
    except IOError as err:
        print('File read error:' + str(err))
        return False
    return True

处理后得到内存的值如下:
在这里插入图片描述

得到值就可以自己放excel里生成趋势图,观察内存使用情况,或者使用python脚本生成趋势图

import matplotlib

# 画折线图
def draw_line_img(xlabel, ylabel, xticks, y_tuple_list, img_path, figure_size):
    plot.figure(figsize=figure_size, frameon=False)
    plot.xlabel(xlabel)
    plot.ylabel(ylabel)
    for label, y_list, line_color in y_tuple_list:
        plot.plot(tuple(range(len(xticks))), y_list, line_color, label=label)
    plot.legend(fontsize=10)
    plot.margins(0.08)
    plot.savefig(img_path)
    plot.close()

x_mem = []
y_mem = []
with open('D:/DailyWork/result/com.android.systemui.mem.txt', 'r+', encoding='utf-8', errors='ignore') as f:
    x_index = 0
    for line in f.readlines():
        x_index = x_index + 1
        x_mem.append(x_index)
        y_mem.append(float(line) / 1024) # 转换成MB
draw_line_img(u'时间轴', u'Mem使用情况(MB)', x_mem, [("MEM", y_mem, 'lightskyblue')], "D:/DailyWork/result/mem_line.png", (15, 5))

生成的折线图如下:
在这里插入图片描述
从折线图中可以初步断定是否有明显的内存泄露发生。

对于疑似的内存泄露,可以使用leakCanary进行检测,关于leakCanary的使用,会在后续的文章进行介绍。

二、通过Android Studio的Android Profiler获取实时内存值

实时的内存和cpu测试,可以通过Android Studio工具获取实时的内存使用情况。
打开Android Studio,在导航栏找到view,然后找到Android Profiler即可打开。设备连接上电脑后即可开始获取实时的内存使用情况。
关于Android Profiler的使用,参考Android studio 开发文档: https://developer.android.com/studio/profile/memory-profiler

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值