【转】Emmagee app性能测试工具使用教程
简介
Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化,且用户可自定义配置监控的频率以及性能的实时显示,并最终生成一份性能统计文件。
实现原理
1、监控应用CPU原理
Android系统是基于Linux内核的,所以系统文件的结构和Linux下一样,系统总体CPU使用信息放在/proc/stat文件下,/proc/cpuinfo文件存放CPU的其它信息,包括CPU名称,直接读取即可。Emmagee是将选中应用的PID传入,读取/proc/PID/stat文件信息及可获取该PID对应程序的CPU信息。
2、监控应用消耗流量
系统中有存放整体流量和针对当程序的流量统计,/proc/net/dev和/proc/uid_stat/UID下存放tcp_rcv和tcp_send文件,分别存放下行流量和上行流量,操作前后相减就得出结果 。
3、监控内存实现原理
获取到当被测应用的PID,然后按照PID调用android的API获取当前被测应用占用的内存。/proc/meminfo文件记录了系统内存信息。
Emmagee-2.2.apk为例
1、 下载Emmagee.apk安装包
下载地址:https://github.com/NetEase/Emmagee/releases
2、 安装Emmagee.apk
3、 打开Emmagee
4、 点击左上角的设置按钮,可进行采集频率,邮件发送等相关设置
5、 返回步骤3中,点选要测试的应用,然后点击“开始测试”
6、 对app进行相关操作,完成后返回到Emmagee界面,点击 停止测试
停止测试后,Emmagee会自动生成.csv测试结果文件。
7、 把文件导出来,分析数据和统计
8、 难点在哪里?
工具使用似乎不难,那难点在哪里?
个人觉得难在场景设计。笔者实践也不多,这里就简单说说设计思路吧。
前提条件:保证测试环境的干净
第一种类型:测试app中某个相对独立的功能
这种一般就是保证其它条件不变,重复操作这个单一功能,然后分析数据。
例子1:app首次启动的相关性能状态
场景描述:点击app,启动app直到出现app主页面。
测试操作:
1.打开Emmagee
2.选择app,点击“开始测试”,出现主页面后,点击“停止测试”
3.用手机清理软件,清理“被测app”。
4.重复步骤2
数据分析:
一般情况下,2.2版本的Emmagee会自动为我们生成CPU,内存,流量,电量,电流数据,但是启动耗时就不一定了,实践中发现启动耗时经常是获取不到的,但是做性能测试,很关心的一点就是响应时间,不能获取咋办?笔者是这么做的,设置采集频率的时间为最小值,比如1s,这样Emmagee就可以根据测试报告中,“时间”一栏大致统计出这个功能的耗时情况。
这些数据都有了,那么就可以根据多次的测试数据,求出各类数据的“均值”,“峰值”
例子2:app二次启动的相关性能状态
场景描述:点击app,启动app直到出现app主页面,退出app
测试操作:
1.打开Emmagee
2.选择app,点击“开始测试”,出现主页面后,退出app,点击“停止测试”
3.重复步骤2
注:和例子一不一样的地方在于,是否在前一次操作的基础上进行操作,即“测试起点”不一样。幸运的是,Emmagee是有这种“记忆”功能的。
数据分析:
参考例子1
第二种:测试某个流程,目的在于找出性能“瓶颈”
针对某个业务流,做一个完整的业务过程的操作
这里重点要说的数据分析具体咋做。个人的想法是这样的:根据测试生成的.csv文件,绘制相关数据的曲线图,查看曲线变化--平稳?起伏不定?还是“峰回路转”?如果不是很平稳,则说明性能上可能存在瓶颈,需要进一步分析是那个操作步骤中出现的。
关于咋看步骤,测试结果中,有一栏“栈顶Activity名称”可以看到大致的操作(如果看不懂咋办?测试前先操作看看,对比着看吧)
【转】Emmagee app性能测试工具使用教程的更多相关文章
- Emmagee app性能测试工具使用教程
Emmagee app性能测试工具使用教程 by:授客 QQ:1033553122 简介 Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个Ap ...
- APP性能测试工具GT的使用总结:app内存测试
APP性能测试工具GT的使用总结:app内存测试 GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment). ...
- APP性能测试工具-GT(随身调)
GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment).利用GT,仅凭一部手机,无需连接电脑,您即可对AP ...
- App性能测试工具使用说明-MobilePerformance
一. 环境搭建 安装Android SDK 1.6或者1.7版本均可,建议1.7,环境变量的配置,Java SDK的安装很简单,不赘述了. 安装SDK 1.安装Android SDK: 2.安装完毕后 ...
- APP性能测试工具
各种自动化工具作用: 自动化:appium 针对接口做压测:jmeter 执行一段脚本,随机乱点:monkey 如果有用loadrunner12的话 也可以用mobilerecoder录制脚本(lr1 ...
- Emmagee——开源Android性能测试工具
工具:Emmagee作者:孔庆云 网易(杭州)质量保证部 开源地址:https://github.com/NetEase/Emmagee Wiki:https://github.com/NetEase ...
- Emmagee—开源Android性能测试工具
下载:https://github.com/NetEase/Emmagee/releases/download/V2.5/Emmagee.apk 1.Emmagee——Android性能测试工具 Em ...
- App测试工具大全,收藏这篇就够了
随着移动互联网的高速发展,App 应用非常火,测试工程师也会接触到各种 app 应用.除了人工测试之外,也可以通过一些测试工具来提高我们的测试效率,以下对于我用过或听过的 app 测试工具做了一个统一 ...
- Android性能测试工具(一)之Emmagee
Android性能测试工具(一) 之Emmagee Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具. 支持SDK:Android2.2以及以上版本 Emm ...
随机推荐
- 【JS】Advanced1:Object-Oriented Code
Object-Oriented Code 1. var Person = function (name) { this.name = name; }; Person.prototype.say = f ...
- C语言基础--宏
宏在C语言中经常使用,在linux的源码中可以看到很多宏的高级应用.因此不理解宏,就很难理解代码.本文参考一些互联网资料做一些总结,希望给大家带来帮助. 先说说使用宏的优点及缺点: 优点: 1.提高代 ...
- 2015长春 HDU 5534 Partial Tree
题意:有n个结点,n-1条边,现在要把这n个结点连成一棵树,给定了f(i),表示度为i的结点的价值是f(i).现在问如何连能够使得Σf(i)的值最大. 思路:每个点至少一个度,所以可分配的度数为n-2 ...
- Guide to make CentOS 7 the perfect desktop
原文地址: http://www.dedoimedo.com/computers/fedora-pimp.html My original review of CentOS 7 was less e ...
- AndroidManifest笔记
1.android:configChanges如果配置了这个值,比如"orientation",在屏幕旋转时会调用Activity的onConfigurationChanged,而 ...
- DS18B20 for STM32 源代码 【worldsing笔记】
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式:温度测量范围为-55℃-+125℃,可编程为9位-12位A/D转换精度,测温分辨率可达0.0625℃.主 ...
- Modbus调试利器 Modbus Poll
Modbus Poll是一个非常不错的工具,支持TCP/串口 下载地址:http://pan.baidu.com/share/link?shareid=2880213929&uk=248325 ...
- 【Linux】多睡/少睡一小时!冬夏令时全解析
多伦多2016年11月6日凌晨2点开始起时间调回一小时,时间到凌晨2点时自动跳回到1点,大家可以多睡一小时(或者多一小时写essay的时间)~ 多伦多2017年3月12日凌晨2点开始时间拨快一小时时间 ...
- Oracle中的AS和IS
Oracle中的AS和IS是ORACLE为了方便而设置的同义词基本上没有不同 . 使用规则: 1.在创建存储过程(PROCEDURE)/函数(FUNCTION),以及自定义类型(TPYE)和包(PAC ...
- JNI函数复杂对象传递
主要操作内容,包括如下几个部分: 1.在Native层返回一个字符串 2.从Native层返回一个int型二维数组(int a[ ][ ]) 3.从Native层操作Java层的类: 读取/设置类属性 ...