app性能测试

环境准备:

1、安装jdk

2、安装安卓sdk

3、配置环境变量:

ANDROID_HOME=../sdk(sdk的目录下)

PATH=%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\android-4.4.2;

注意:jdk和sdk的版本必须一致(要么都是32位,要么都是64位)

 

安装genymotion

1、双击genymotion-2.8.0.exe开始软件的安装,默认显示English

2、点击OK,设置选择软件的安装位置,默认为C:\Program Files\Genymobile\Genymotion,也可以选择别的位置

3、设置开始菜单文件的名称,默认为Genymotion

4、建立桌面快捷方式图标

5、继续下一步安装即可

6、完成后将将translations文件夹放到安装目录下,覆盖原来的文件,默认安装文件夹位置在:
C:\Program Files\Genymobile\Genymotion

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 # 执行两次

posted @ 2019-11-06 14:14  laosun0204  阅读(268)  评论(0编辑  收藏  举报