Android压力测试-Monkey

来源:互联网 发布:dvr1080p监控软件下载 编辑:程序博客网 时间:2024/05/22 16:56

一  背景

1. 为什么开展压力测试

 目标1:提高产品稳定性(产品稳定性是一项重要指标,据统计百分之七十用户会遇到不稳定问题,这时有的会忍受继续使用(比如QQ、微信等成熟产品),有的直接放弃(使用一些新产品),百分之五用户在遇到页面缓慢等问题会直接卸载)

目标2:提高产品的留存率

2. 什么时候开展压力测试

    首轮功能测试后(开发提测时会有一些bug,此时若开展压力测试会误报一些问题)

   下班后夜间进行(只需对工具进行设置,晚上进行压力测试,提高效率)

二 理论部分

1.手工测试场景

找陌生人聊天:查找->添加->聊天

2.自动测试场景

   模拟事件流


3.Monkey(可帮助我们完成一系列的随机事件)

a. Monkey 是发送伪随机用户事件的工具

b.Monkey 在手机系统里,为了实现与其通信,需要使用ADB。

4.ADB

使终端(CMD)与手机之间建立连接:硬链接(usb线),软连接(adb)

5.Monkey Script(可以完成重复固定的操作)

定义:MonkeyScript是一组可以被Monkey识别的命令集合

但不能实现截图操作,这时可借助MonkeyRunner

6.MonkeyRunner

Monke Runner提供了一系列的API,可以完成模拟事件及截图操作。

与Monkey区别:

a. Monkey:在adb shell中,生成用户或系统的伪随机事件;

b.MonkeyRunner:通过API定义特定命令和事件控制设备。


测试类型:

多设备控制,功能测试,回归测试


7.压力测试结果

(1)什么是Crash

         定义:即崩溃,应用程序在使用过程中,非正常退出

 (2)什么是ANR

        全称:Application Not Responding

      

8.命令参数

三 实践部分

1.一个APP的压测实践

环境:Android SDK,Python

步骤:1.手机和终端建立连接,adb devices(手机的开发者选项打开),获取手机的唯一标识名

            2.往手机上安装测试app,adb install package.apk

            3.发送压力指令,adb shell monkey 1000 (工具名称:monkey,1000:让monkey执行1000个随机命令,包括音量键up、down,home键,截屏键,各种输入键等)


           4.获取app包名:adb logcat | grep START(logcat是输出手机上所有app的log信息,|:管道,将前一个命令的输出作为下一个命令的输入,grep start,抓取log信息中含有start标签的log信息进行输出) 

在Windows系统中,可以用adb shell命令  pm list packages去获取APP包名

   5.给指定包打压力

        adb shell monkey -p package 1000

2.Monkey高级参数的应用

a.throttle 参数---指定事件之间的间隔,adb shell monkey  --throttle <milliseconds>  (两个-,毫秒为单位)

b.seed 参数--指定随机生成数的seed值,adb shell monkey -s<seed> <event-count> (<seed>是数字,100.... 后边是事件数)

Monkey所谓的随机操作是基于seed值产生的,每一个seed值产生唯一的随机序列,对应唯一的操作,只要两个seed值相同,操作就相同,这样就可以复现bug。

要进行压力测试时,那么首先自己先定义一个seed值,然后让他去跑,等之后发现APP出现excpetion时,则只需要重新加上seed值就可以复现
c. 触摸事件--设定触摸事件百分比
只完成某种触摸操作,比如点击事件,adb shell monkey --pct-touch <percent>,点击事件百分比
-v 输出记录,加上这个参数,可以看到执行的详细操作
d.动作事件--设定动作事件百分比,adb shell monkey --pct-motion <percent>
e. 轨迹球事件:设定轨迹球事件百分比,adb shell monkey --pct-trackball<percent>f. 基本导航事件:输入设备的上下左右方向键的导航,adb shell monkey --pct-nav<percent>
g.主要导航事件:中间键、返回键、菜单按钮键,adb shell monkey --pct-majornav<percent>h. 系统导航事件:HOME键、BACK键、拨号、音量键,adb shell monkey --pct-syskeys<percent>i.  启动Activity事件:在已有的Activity之间进行切换,adb shell monkey --pct-appswitch<percent>j.不常用事件:adb shell monkey --pct-anyevent<percent>
k. 奔溃事件:忽略奔溃和异常,直到Events injected等于设定的值为止,adb shell monkey --ignore-crashes<event-count>l. 超时时间:忽略超时时间,直到Events injected等于设定的值为止,adb shell monkey --ignore-timeouts<event-count>
注意:如果想指定两个事件,比如touch和motion那就让这两个事件的百分比之和是一百,否则,剩余的百分比会执行随机操作。

3.测试Log获取

用Monkey test测试,为了方便分析问题,可以在命令monkey命令后面加上 “|logcat -v time”,这样就能边测试边打印Log(记得用终端保存Log文本)例如:

 adb shell monkey –p com.dianping.XXX  –v 20000|logcat -v time

 但是这个组合在monkey测试完成后,logcat仍然在执行,测试时需要注意

 如果测试monkey碰到crash或者anr(程序强制性退出或不响应)现象时,在抓取log的同时需要提供traces.txt,

 步骤如下:{ adb pull /data/anr/traces.txt .}

1. 测试版本需要具备root权限

 2. 进入data/anr目录下面

 3. 将traces.txt文件拷贝到TF卡中,然后拷贝出来发给软件分析即可  eg. trace view

4.1Crash结果析取


注意:crash关键字,开始crash log,在log的最后有一个seed值,我们可以用它来复现crash。如果加上ignore crash,不会有seed值,因为每次crash之后都是一次重新的开始。

4.2ANR结果析取


注意:ANR log是以ANR开头。

没有使用monkey的情况下app出现anr情况,可以在手机中找到log文件,会放在traces文件的上边。



5.Monkey Script 实例

执行Monkey脚本的命令:adb shell monkey -f <scriptfile> <event-count.>

《Scriptfile》是编写的脚本文件。<event-count>是脚本执行的次数。
常用命令介绍:
实例讲解:在浏览器进行搜索关键字
脚本的格式:test.script
写完脚本开始执行,因为脚本是由monkey执行的,monkey是在手机里,所以需要把脚本push到手机上
adb push test.script /data/local/tmp/
然后开始执行,adb shell monkey -f /data/local/tmp/test.script  2
所启动的app需要允许adb 命令外界调起
6.手动停止Monkey

adb shell ps(查找进程PID)

adb shell kill pid (杀掉进程)

7Monkey实例测试

Mac下:

1、 通过eclipse启动一个Android的emulator或者连接真机

 

 

2、 在命令行中输入:adb devices查看设备连接情况

 

3、 在有设备连接的前提下,在命令行中输入:adb shell 进入shell界面。如果有多个device的时候,加-s参数指定:adb -s devicename shell

 

4、在其中找到我们需要测试的包名com.dianping.XXX

5、 查看data/data文件夹下的应用程序包(可测试的应用程序包都在这个目录下面)

ls data/data

如果出现opendir failed,Permission denied 则可用root解决

键入 su root

然后键入 ls data/data 查看包

 

6、 以com.dianping.XXX 作为对象进行MonkeyTest  命令行》》monkey -p com.dianping.XXX -v 500  其中-p表示对象包 –v 表示事件数量

运行过程中,Emulator/真机中的应用程序在不断地切换画面。

 

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。

8、测试用例

monkey -p com.dianping.XXX --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100 >/mnt/sdcard/monkey.txt

cd /Users/wengyb/Documents

adb pull /mnt/sdcard/monkey.txt 

原创粉丝点击