手机app性能测试 手机app性能测试方法
移动端手机 App 耗电量测试:Monkey 电量测试基本操作及 Android 性能优化
Monkey 测试简介
手机app性能测试 手机app性能测试方法
存放路径:Monkey程序是Android系统自带的,由Java语言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar。
大致操作流程:通过名为“monkey”的Shell脚本去启动Monkey.jar程序(shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey),在你指定的APP应用上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。
主要目的:测试app 是否会是否会Crash。
操作命令格式:adb shell monkey {+命令参数}
获取Android包名方法:(注意:请开启手机开发者模式,请开启手机USB调试模式)
查看正在运行的程序的包名:adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p' (例如:我清理手机后台之后,开启了QQ,输入命令之后,就会出现QQ的进程,框的地方就是qq的包名)
monkey常用操作命令简介
-p 包名:指定应用程序。例如:adb shell monkey -p 包名 事件总数
-v:打印log级别,-v越多日志信息越详细,最多支持3个。例如:adb shell monkey -p 包名 -v -v -v 事件总数
-s:伪随机数生成器的 seed 值,通俗的说就是个标记,后面跟数字,例如:执行adb shell monkey -s 1 -p 包名 事件总数,这个我标记了-s 1,命令操作完之后,我发现有日志报错,我想重新执行这个monkey操作,那你就可以继续执行这个命令,排错时常用。
-f:后接测试脚本名,例如:adb shell monkey -f 脚本名 事件总数
-throttle:翻译减速的意思,后面接时间,单位为ms,,表示事件之间的固定延迟,如果不接该项,monkey将不会延迟,例如:adb shell monkey --throttle 500 -p 包名 事件总数
--pct-事件类别 11个事件百分比控制(有的是9种事件,没有--pct-pinchzoom,--pct-rotation事件)由安卓SDK决定
11种事件,按顺序罗列的
--pct-touch {+百分比}:0
翻译触摸,触摸事件泛指发生在某一位置的一个down-up事件,点击
--pct-motion {+百分比}:1
翻译动作,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出(即up事件)
--pct-pinchzoom {+百分比}:2
翻译二指缩放,智能机上的放大缩小手势操作事件
--pct-trackball {+百分比}: 3
翻译轨迹,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件
--pct-rotation {+百分比}:4
翻译屏幕旋转,横屏竖屏事件
--pct-nav {+百分比}:5
翻译基本导航,基本导航事件主要来自方向输入设备的上、下、左、右事件
--pct-majornav {+百分比}:6
翻译主要导航,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等
--pct-syskeys {+百分比}:7
翻译系统按键,系统按键事件通常指仅供系统使用的保留按键,HOME键、BACK键、拨号键、挂断键、音量键等
--pct-appswitch {+百分比}:8
翻译应用启动,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用
--pct-flip {+百分比}:9
翻译翻转,键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
--pct-anyevent {+百分比}:10
翻译其他类型,其他类型事件指上文中未涉及的所有其他事件,keypress、不常用的button等
百分比控制以及使用
首先注意一点,这个Event percentages在不同版本的SDK版本中顺序可能会不一样。
如果在monkey参数中不指定事件参数,这些动作都是随机分配的,11个动作其分配的百分比之和为100%,通过添加命令选项来控制每个事件的百分比。
添加事件百分比之后的情况,举例添加--pct-touch事件百分比为100:
命令: adb shell monkey -v -p 包名 --pct-touch 100 100
结果:
说明:尴尬啊,我这个vent percentages竟然有12种,多了一种什么我也不知道,但我敢肯定这跟SDK版本有关系,想知道的同学可以自己从安卓SDK中反编译出monkey源码,通过查看源码中的MonkeySourceRandom.java文件获知!查出来的同学可以告知我下。
说明:尴尬啊,我这个vent percentages竟然有12种,多了一种什么我也不知道,但我敢肯定这跟SDK版本有关系,想知道的同学可以自己从安卓SDK中反编译出monkey源码,通过查看源码中的MonkeySourceRandom.java文件获知!查出来的同学可以告知我下,我想做伸手党
-ignore-crashes:翻译忽略崩溃,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。如果不设置此项,monkey遇到上述崩溃或异常将停止运行。
-ignore-timeouts:翻译忽略超时,当应用程序发生任何超时错误(如ANR,即Application Not Responding)时,monkey将继续运行直到计数完成。如果不设置此项,monkey 遇到此类超时将停止运行。
monkey测试中,如何终止运行:
方法一:
新建一个窗口
执行: adb shell ,
再执行ps | grep monkey,返回来的第一个数字,即是monkey的进程号
然后kill pid 进程号。如图
对手机进行重启
新建一个窗口
执行adb reboot
log日志导出
保存到电脑上。
执行:adb shell monkey -p 包名 -v 1000 > /Users/weixiangyang/Desktop/monkey.txt
例如:保存到电脑上标准流与错误流分开保存,分别命名为info.txt,error.txt
info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。
error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。 执行:adb shell monkey -p 包名 -v 1000 1>/Users/weixiangyang/Desktop/info.txt 2>/Users/weixiangyang/Desktop/error.txt
例如:保存到电脑上并命名为monkey.txt
保存到手机上。注意:手机要root
例如:保存到手机上并命名为monkey.txt
执行:
adb shell说明:进入adb shell后就相当于进入linux的root下面,但是没有权限在里面创建文件,所以手机要root
monkey -p 包名 -v 1000 > /mnt/sdcard/monkey.txt
注意:我的 adb shell 跟monkey XXX是分开执行的,分两行!!!
例如:保存到电脑上标准流与错误流分开保存,分别命名为info.txt,error.txt
执行:adb shell monkey -p 包名 -v 1000 1>/mnt/sdcard/info.txt 2>/mnt/sdcard/error.txt
软件测试必学基本理论知识-APP测试
业务功能测试
APP专项测试(兼容性测试、安装、卸载、升级、交叉事件、Push消息推送、性能测试、用户体验、极限、边界、权限
手机型号、操作系统、分辨率(Android:1080x1920,720x1280;IOS:2208x1242,1334x750)尺寸(4.7,5.5)、网络环境(Wi-Fi、2G、3G、4G、5G)
拨打接听电话
接收/发送短信
插拔耳机
网络切换
1.一定数量的真机上进行
2.借助testin等云平台
3.模拟器:Xcode、Genymotion()
第三方在线统计排名(腾讯移动分析、百度研究院)
官方数据(Android、IOS官网)
埋点技术(技术手段)
push消息应该按设定规则发送特定用户
APP在后台运行时,应能正常收到其push消息
设备锁屏状态下,应能正常收到APP的push消息
设置网络段断开后再一次建立连接是,应能收到push消息
系统设置不接收APP通知消息时,用户应该不再接收push消息
安装渠道:Android-应用商城、IOS-APP Store
正常情况 :
正常安装测试、检查是否安装成功
APP本本覆盖测试
回退版本测试
在不同型号、系统、屏幕大小、分辨率上的手机进行安装
安装完成后能否正常启动应用程序
异常情况
安装时内存不足
安装过程中的意外情况(强行断电、断网、来电话、查看信息)等
能否取消安装
正常情况:
用自己的卸载程序进行卸载,检查是否卸载干净
用第三方工具,检查是否卸载干净
不同系统、硬件环境、网络环境下进行卸载
卸载后再次安装、是否正常使用
异常情况:
卸载中出现异常情况能否恢复(比如手机关机、内存、没电等),程序是否还能运行
卸载后是否有残留,是否能够再次进行安装
是否可以取消卸载,软件恢复使用
更新版本需要提示用户
考虑是否进行强制升级(软件存在严重缺陷、软件不能够向前兼容)
是否能够跨版本升级
性能测试指标:内存、CPU、流量、电量、启动速度、界面切换速度
内存溢出与内存泄漏
1.内存溢出out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现溢出
2.内存泄漏out of leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏危害可以忽略,但内存泄漏堆积后果很严重,无论多少内存,迟早会被占光
3.二者的关系:内存泄漏会导致内存溢出
冷启动与热启动
1.指app被后台杀死后,在这个状态打开app,这种启动方式叫做冷启动
2.热启动:指app没有被后台杀死,仍然在后台运行,通常我们再次打开这个app,这种启动方式叫做热启动
用户体验
边界(极限测试)
权限测试
App的兼容性测试尤为重要:由于手机厂商生产的手机型号及相关软硬件存在千千万万的差异性,进而APP端需要着重考虑分辨率,系统版本,尺寸,主流机型等
App性能测试指标不一样,除了需要和web一样考虑APP客户端的性能外,我们还需要考虑电量、流量的消耗、GPU渲染等
APP网络测试场景的复杂性:如2G、3G、4G、5G、Wi-Fi、弱网环境等
APP基于手机载体存在的交叉事件测试、前后台切换,安装/卸载/升级测试
APP基于手机载体特有的一些用户操作习惯类测试,如横竖屏切换,多点触控,事件触发区域等
内测发布平台
工作流程:1.开发将打好的程序包上传到内测发布平台上2.内测分发平台基于上传的安装包生成唯一的二维码3.测试扫描二维码即可进行下载,安装并测试
蒲公英:
fir.im(
线上发布平台:
应用商店、APP Store
前置基础:瀑布模型(不适用快速变化的需求)、快速原型
互联网特点:请求创新、要求的高度不确定性
移动互联网的解决方案:快速的反馈机制、快速试错
基本可以和快速原型划等号。
scrum:提供了一套基于团队的敏捷方法。
角色:产品负责人(整理需求)、项目经理、开发团队
输出物:产品待办列表、迭代待办列表、产品增量(可工作的软件)
5个活动:迭代、迭代计划、每日站会、评审会、迭代回顾
1.需求分析与评审
2.编写测试计划(测试方案)
3.设计测试用例与评审
4.执行测试用例与缺陷跟踪
5.编写测试报告
兼容测试
交叉事件
弱网测试
极限边界
权限测试
删除请求:remove all
设置过滤
查看请求和响应数据
修改响应数据
辅助定位bug
构建模拟测试场景
APP弱网模拟测试
前端性能分析及优化
重定向、API接口测试
为什么抓包?
通过抓包工具截取观察网站的请求信息,帮助我们更深入了解系统
通过用抓包工具截取,观察网站的请求与返回信息,帮助我们进行bug的定位与描述
步骤
1.打开Fiddler,设置代理(tools-option-connection-勾选Allow remote computers to connect,并允许远程连接
2.手机连接电脑的热点网络或者在同一个局域网内
3.手机网络连接中,设置网络代理,IP是电脑的同网段IP地址,端口是8888
4.手机访问APP或者用手机浏览器访问网络,电脑Fiddler观察抓包情况
1.概念
在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/Edge/4G/Wi-Fi
等多种手机网络连接方式,不同的协议、不同的制式、不同的速率使移动应用运行的场景更加丰富。
2.原理
通过Fiddler来模拟限速,提供客户端请求前和服务器响应前的回调接口,Fiddler的模拟限速是在客户端请求前自定义限速,通过延迟发送数据或接收数据的时间来限制网络的下载和上传速度,从而达到限速的效果
打开网速模拟模式开关(Rules-Performances-simulate Modem speeds)
自定义网络:rules-customize rules
(知识就是力量,我将会持续更新软件测试相关知识哟 )
手机app性能有哪些具体的指标
APP类型众多,根据具体类型划分,性能指标的维度和优先级各不相同。
1、视频类APP归属于娱乐游戏型的APP,因此性能测试维度优先级排序为:流畅度、crash、内存、流量、响应时长、功耗、CPU;
2、游戏APP指标CPU占用率,内存使用,电量 ,流量,包体大小能被列为性能指标,是从APP性能指标及游戏运营两个维度考虑的,玩家是更希望包体小的同时性能要好,有时它们会是一个互相取舍的关系;
3、其他APP指标:机器型号,运行内存总量,内存,屏幕分辨率,像素密度,电池类型,传感器等。