Skip to content
look edited this page Jul 3, 2020 · 11 revisions

开源出于公益,若觉得对您有帮助,请给个star,若觉得不满足自己业务的需求,fork下,可以定制开发,欢迎宣传转发,感激不尽,至少能让业界少踩点坑

工具介绍

工具方案选型 实现 效果参考阿里巴巴Android性能测试工具mobileperf开源(天猫精灵Android性能测试-线下篇) 由于Android权限控制越来越严格,通过APP跨进程获取性能数据在Android高版本已越来越困难,由于adb shell权限比较高,相信Android会一直开放开发者权限,故方案选型阶段,采用了依赖adb的方案,开发了一套Android性能稳定性工具mobileperf,跟GT APP对比如下:

工具对比 注:GT github上已表示Android GT后续不再支持GT APP,只支持GT SDK

优点:

对app零侵入,无需root手机,只要能使用adb,方便做竞品测试,也能跟自动化、稳定性测试结合

使用方法:

安装 :

  1. 安装python3.7 python下载链接 mac上执行python3 --version确认下版本,或者保证python指向python3,就可以直接用python来执行 windows上执行python --version,确保是python3 ,加入到环境变量中

  2. 直接下载压缩包解压缩或通过git操作,不要放在有中文 空格的目录下

  3. 安装adb,确保adb devices能找到设备

使用:

配置文件

开始:性能采集工具采用配置文件,根目录下的config.conf文件,改一次,后面都可用,不用每次都传参,参考配置如下

config file

运行

进入工程根目录,mac linux执行sh run.sh  window双击执行run.bat

结束方式

1、采集时长到

2、接受终端命令行 Ctrl+C

以上两种方式都会在本地生成summary_结束时间点.xlsx的汇总文件

生成结果会在配置项save_path下或工程下results目录下(save_path为空时)会创建包名/测试时间的目录,里面有cpu、内存、fps 启动时间 线程数 全量logcat日志 异常日志 进程堆栈 流量的测试结果

结果查看

测试结果会保留在包名/测试开始时间的目录下,目录结构如下

test result 性能测试完成之后需要验证以下几点:

  1. 进程内存占用  cpu是否正常
  2. 性能结果文件夹中的 exception.log,是用户自己在config文件中填的logcat关注错误日志(默认fatal exception;has died),工具发现了会提取出来写到exception.log文件中,然后根据这些日志从logcat日志里找上下文去排查
  3. /data/anr/ 目录查看有无anr,需要手机有pull权限,工具会自动pull到PC上

汇总summary.xlsx文件

cpu信息在cpuinfo表中,表中各列解释 cpu table 测试进程CPU使用率曲线图 cpu trend

在测试过程中会生成一个meminfo.csv文件,可以查看,表中各列解释 mem table

这个csv表格是用dumpsys meminfo得出的,汇总xlsx文件会在测试结束后生成,对应meminfo这个表格 mem trend

每个进程会有pss部分包名的csv表格,这个表格是用dumpsys meminfo package得出的 pss table 能把每个进程的详细内存展示出来 汇总xlsx中对应pss部分包名这个表格

pss table 如果进程发生了内存泄露,根据曲线,很方便一眼就看出是哪部分导致泄漏

测试设备版本信息汇总

会将测试设备adb serialnum 、手机型号、测试包名 系统版本 APP版本信息放在device_test_info.txt文件中

test info

CPU

在测试过程中会生成一个cpuinfo.csv文件,可以测试过程中查看,表中各列解释 cpu table 上面汇总xlsx文件会在测试结束后生成,xlsx数据跟csv数据完全一致,xlsx汇总是根据csv的数据画的曲线(csv没有画图功能),汇总xlsx中对应cpuinfo这个表格 cpu trend

测试过程中,windows打开后记得关闭csv文件,否则会有写入没权限,会报错

内存

在测试过程中会生成一个meminfo.csv文件,可以查看,表中各列解释 mem table

这个csv表格是用dumpsys meminfo得出的,汇总xlsx文件会在测试结束后生成,对应meminfo这个表格

每个进程会有pss部分包名的csv表格,这个表格是用dumpsys meminfo package得出的 能把每个进程的详细内存展示出来,汇总xlsx中对应pss部分包名这个表格 pss table 如果进程发生了内存泄露,根据曲线,很方便一眼就看出是哪部分导致泄漏,java_heap native_heap system分别对应的是dumpsys meminfo package结果中 Java Heap: Native Heap: System: 后面的数字

工具会把dumpsys meminfo的结果保存在dumpsys_meminfo.txt中,把dumpsys meminfo package的详细结果都会保存在dumpsys_meminfo_package.txt文件中,若有疑问,可以看txt里的详情数据

如果手机和app有权限能am dumpheap,需要apk支持导出hprof,mobileperf还会自动导出hprof文件

mem hprof

logcat日志(支持异常日志检测)

工具会保留全量logcat日志,每隔60万行会新建文件,辅助定位问题

logcat file 如果配置文件中配置了异常日志 image.png 会将logcat中出现的异常日志都保存在exception.log中 image.png

monkey(可限制activity)

mobileperf调用了Android原生的monkey,如果您想限制在指定内activity内跑monkey ,可以通过配置项,开启monkey 后,会在测试目录下生成monkey.log,monkey=true 前提下再增加main_activity 、activity_list两个配置项

#如果需要在限定activity内做monkey test,main_activity是模块的几个主入口,用分号; 分隔
#main_activity=com.alibaba.ailabs.genie.contacts.MainActivity
#activity_list是准许的activity,main_activity开启前提下有效
activity_list=com.alibaba.ailabs.genie.contacts.MainActivity;
        com.alibaba.ailabs.genie.contacts.cmd.CmdDispatchActivity;
        com.alibaba.ailabs.genie.contacts.cmd.transform.VoipToPstnActivity;
        com.alibaba.ailabs.genie.contacts.add.AddContactsActivity;
        com.alibaba.ailabs.genie.contacts.avatar.TakePhotoActivity;
        com.alibaba.ailabs.genie.contacts.details.DetailsActivity;
        com.alibaba.ailabs.genie.contacts.add.RelationshipActivity;
        com.alibaba.ailabs.genie.contacts.details.DownloadTipsActivity;
        com.alibaba.ailabs.genie.contacts.details.DownloadTipsMiniActivity;
        com.alibaba.ailabs.genie.contacts.cmd.selectlist.call.VCallListActivity;
        com.alibaba.ailabs.genie.contacts.cmd.selectlist.contacts.VContactListActivity;
        com.alibaba.ailabs.genie.contacts.message.VoiceDetailsActivity

ANR

如果手机有权限,会把/data/anr里的trace文件pull出来,结构图如下 anr

pid进程号变化

常驻进程,需要关注pid变化,需在config.conf中增加pid_change_focus_package配置项,多个进程,英文分号分隔 pid_change_focus_package=com.alibaba.ailabs.genie.smartapp;com.alibaba.ailabs.genie.smartapp:core

工具会把pid变化保存在pid_change.csv文件中 pid change 有可能Crash,有可能进程自杀,有可能被系统杀掉,可以根据pid变化时间点附件的日志排查问题

流畅度FPS/jank

流畅度数据在fps.csv中 表中各列解释

fps table

流量

流量数据在traffics_uid.csv中 通过cat /proc/net/xt_qtaguid/stats获取,表中各列解释 image.png

电量

电量数据在powerinfo.csv中,先通过dumpsys batteryproperties获取,如果获取不到,再通过dumpsys battery获取(Android9),表中各列解释

image.png 不足:插着usb,这两种方式获取到的并不精准,并非专业级电流电量测试,只能作为参考