环境准备:
1、安装jdk
2、安装安卓sdk
3、配置环境变量:
ANDROID_HOME=../sdk(sdk的目录下)
PATH=%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;%ANDROID_HOME%uild-toolsandroid-4.4.2;
注意:jdk和sdk的版本必须一致(要么都是32位,要么都是64位)
安装genymotion
1、双击genymotion-2.8.0.exe开始软件的安装,默认显示English
2、点击OK,设置选择软件的安装位置,默认为C:Program FilesGenymobileGenymotion,也可以选择别的位置
3、设置开始菜单文件的名称,默认为Genymotion
4、建立桌面快捷方式图标
5、继续下一步安装即可
6、完成后将将translations文件夹放到安装目录下,覆盖原来的文件,默认安装文件夹位置在:
C:Program FilesGenymobileGenymotion
7、运行程序就是中文版了
使用教程
1、在主界面上点击Add按钮
2、然后在弹出来的界面输入你注册的账号和密码然后点击connect按钮,在我们下载的时候填写的邮箱中大家可以看到两个邮件,在里面的链接可以激活,应该是Genymotion那个邮件,点击里面的Click here,然后账号就是你的邮箱,密码就是我们填写的密码,然后会选择手机型号,看大家自己的选择啦
3、然后再添加虚拟机设备,基本都会自动跳出来,不需要大家自己手动点击的,记住修改名称
4、点击next,一直next,等模拟器安装完成
5、然后再给已经创建好的模拟器命名
6、名好了以后再回到模拟器的主窗口,选择→添加的模拟器,这就看我们刚才是怎么命名的了,比如Nexus 7,然后点击Play启动模拟器
7、启动Nexus 7,几秒钟的事,速度非常快
8、打开genymotion,切换到Use custom Android SDK tools,然后选择自己安装的sdk的路径,然后重启genymotion
9、把百度助手的ListenerApk.apk拖到genymotion里,打开百度助手,,进入如下的页面
10、点击创建测试按钮,进入创建项目页面,输入任务名称,点击查看安装的app的按钮,选择一个需要测试的apk,cpu正常区间和内存正常区间勾选到一个合适的范围(视频类、直播类的cpu一定很高),点击提交按钮,如下图设置
11、提交后会自动启动apk,然后点击点击测试按钮,然后选择一个视频或者业务场景,跑一会然后停止,跳转到如下图所示
12、点击查看详情按钮,可以看到下图
13、点击内存右侧的大于号,可以看到三条线,分别是Pss、Uss和Dss,如果没有Pss,看Iss,Pss是实际占用的物理内存,再点击cpu右侧的大于号,可以看到一条曲线,把异常次数的标记出来,cpu和内存的范围是在第10步里设置的范围,20%和20M,再点击电量右侧的大于号,电量正常,什么都不显示,再看流量,正常有两条线,上传和接收,所有的图表都可以保存到本地,然后生成报告
下面过滤语句只显示优先级为warning或更高的日志信息
adb logcat *:W > 1.txt
monkey的特点
1、运行时机:一般是产品稳定后(首轮功能测试完成的夜间进行)
2、需要知道packageName
3、目的:主要测试产品是否存在崩溃问题和ANR问题
Monkey的基本命令
1、标准monkey命令:adb shell monkey -p com.android.calculator2 -v 50
-p:packageName
-v:日志级别
50:事件数
2、adb shell monkey -p com.android.calculator2 -v -v --pct-touch 50 --throttle 500 100
--pct-touch 50:设置整个过程中点击操作所占的百分比
--throttle 500:每个事件间隔500ms
3、adb shell monkey -p packagename --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > monkey_test.txt
adb shell monkey 100,100个事件,未指定包名,monkey执行出现错误就停止了不会往下进行
adb shell monkey -p 包名 100,100个事件,如果没有问题会出现Events injected 100,输入adb shell "logcat|grep START",再点击要测试的app就可以找到包名和activity
adb shell monkey -p 包名 --throttle 500 100,100个事件,--throttle 500是指事件和事件之间的间隔是500ms
adb shell monkey -p 包名 --throttle 500 -v 100,100个事件 -v是代表日志等级,3个v是日志最全的
adb shell monkey -p 包名 --throttle 500 -v -v --pct-touch 50 100,--pct-touch是触摸事件占50%
ignore是忽略,可以忽略crashes,也可以忽略timeouts等,因为只要遇到crashes就会停止,所以要加上ignore crashes
Monkey的日志级别
参数:-v,用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
1、日志级别 Level 0
示例:adb shell monkey -p com.htc.Weather -v 100
说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息
2、日志级别 Level 1
示例:adb shell monkey -p com.htc.Weather -v -v 100
说明:提供较为详细的日志,包括每个发送到Activity的事件信息
3、日志级别 Level 2
示例:adb shell monkey -p com.htc.Weather -v -v -v 100
说明:最详细的日志,包括了测试中选中/未选中的Activity信息
Monkey的其他参数
--ignore-crashes 用于指定当应用程序崩溃时(Force&Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成
--ignore-timeouts 用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成
--ignore-security-exceptions 用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成
--kill-process-after-error 用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)
--monitor-native-crashes 用于指定是否监视并报告应用程序发生崩溃的本地代码
Monkey的参数 -s
参数:-s用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的
示例:
Monkey测试1:adb shell monkey -p com.htc.Weather -s 10 100
Monkey测试2:adb shell monkey -p com.htc.Weather -s 10 100
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的,操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的
在输出的日志里可以看到seed值,-s指定一个seed值,如果开发让回归测试的话,就用设置的这个值,adb shell monkey -p 包名 -s 1234561 100
Monkey的日志分析
1、按关键字进行搜索,ANR、Exception、Crash、Error
2、找到有问题的地方,查看上下文信息
3、注意第一个switch上下文信息
4、查看monkey里面出错前的一些事件动作,可以手动执行该动作
5、进行问题复现,可以使用之前执行的monkey命令在执行一遍,注意seed值要一样
touch有ACTION_DOWN和ACTION_UP的操作,就是按下和抬起,后面括号里的数字是坐标
crashTest.apk,ANRTest.apk,crashTest-normal.apk,ANRTest-normal.apk四个apk,主要测试crashTest.apk和ANRTest.apk(包名cn.besttest.anrtest),在模拟器上安装crashTest.apk,然后找到包名cn.besttest.crashtest
adb shell monkey -p cn.besttest.crashtest -v -v -v --ignore-crashes 1000 > crash.txt
Crash专项
1、安装可能引起Crash的app
2、执行压力测试
3、分析Crash的Exception信息
查看Exception的三种方式:
1、查看monkey的log
2、/data/com.swftcoin.client.android/cache/crash/traces.txt
3、查看logcat日志Crash
MonkeyScript
MonkeyScript是一组可以被Monkey识别的命令集合
优点:MonkeyScript可以完成重复固定的操作
使用:adb shell monkey -f <scriptfile> <event-count>
MonkeyScript命令1
DispatchTrackball
轨迹球事件
DispatchTrackball(long downtime,long eventtime,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)
注意:按一个键需要两个轨迹球事件
DispatchTrackball参数详解
# long downtime 指按键最初被按下的时间
# long eventtime 指事件发生的时间
# int action 指具体操作的动作,如按下(记住这个就行,别的可以不动)
# float x,float y 指x和y的坐标(记住这个就行,别的可以不动)
# float pressure 压力事件的大小(0-1)
# float size 触摸近似值(0-1)
# int metastate 指当前按下meta键的标识
# float xprecision,float yprecision 指x和y坐标的精确值
# int device 事件的来源(0~x)
# int edgeflags 指超出了屏幕范围
action:0代表按下,1代表弹起
MonkeyScript命令2
DispatchPointer
点击事件,上边有参数详解
DispatchPointer(long downtime,long eventtime,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)
注意:按一个键需要两个点击事件,点击事件和轨迹球是一样的
MonkeyScript命令3
DispatchString
输入字符串命令
DispatchString(String text)
MonkeyScript命令4
LaunchActivity
启动应用
LaunchActivity(package,Activity)
MonkeyScript命令5
UserWait
等待事件
UserWait(1000),单位:ms
MonkeyScript命令6
DispatchPress
按下键值
DispatchPress(int keycode)
keycode 66 回车键
上面四行记住了就行,固定格式
adb push 本地路径monkey-aisi.script /data/local/tmp # 先把脚本上传到手机上
adb shell monkey -f /data/local/tmp/monkey-aisi.script 2 # 执行两次