APP测试(四)

稳定性测试之Monkey简介(二)

Posted by MiaoMiaoMiao on October 3, 2020

稳定性测试之Monkey简介(二)

好了,让大家久等了吧。这次给大家介绍MonkeyScript和其中应用的一个框架

MonkeyScript使用

总概

主要还是基于坐标点的操作,包含常用的:点击、长按、输入、等待等操作

  1. 通过坐标来实现;
  2. 可以针对某一个操作进行重复压力测试;
  3. 会以.script或者.mks.txt作为后缀、标记他是一个MonkeyScript

语法

通过控制monkey发送消息的monkey头 adb shell monkey -f <MonkeyScript> <EventCount>

通过-f参数即可用于指定一个MS脚本进行执行.

常用API

点击事件(DispatchPointer)
  • 用于向一个指定的坐标位置,发送单个手势消息;
  • DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags)
  • action:事件按下还是抬起,0表示按下,1表示抬起;
  • x,y:表示当前事件触发的X轴和Y轴的坐标

  • 两个 DispatchPointer 命令加在一起,分别表示 按下 和 抬起 ,这表示一次点击操作,其余的参数,统一设置为 0 即可。
按键消息(DispatchKey)

DispatchKey 消息的方法前面和 DispatchPointer 一样,所以同样也只需要关注 action、x、y 三个参数即可。

开启关闭软键盘(DispatchFIip)

DispatchFlip 命令用于打开或者关闭软键盘。 DispatchFlip (keyboardOpen)

  • 其中的参数,true 表示打开,false 表示关闭。
打开指定的Activity(LaunchActivity)
  • LaunchActivity 命令用于打开任意应用的一个页面,但是前提条件是打开的Activity 需要属性 android:exported 被设定为true,才可以通过 LaunchActivity 打开。
  • LaunchActivity ( pkg_name , act_name )——分别表示打开的 App 的包名和打开的 Activity 的名称。
等待(UserWait)
  • UserWait 命令用于让脚本中断执行一段时间
  • UserWait ( sleepTime ) 单位是毫秒
输入字符串(DispatchString)

DispatchString( input_string )

运行Shell命令(RunCmd)

RunCmd (cmd) cmd 就是需要执行的 shell 命令。

键盘事件(DispatchPress)

DispatchPress(keyName)命令用于模拟敲击键盘;

案例

# Start of Script
type= user (指明类型)
count= 49 (说明执行次数,但是改成任何职都执行1次,monkey命令里面可以指定执行次数)
speed= 1.0 (命令执行种子,改动无影响,可以通过monkey命令指定)
start data >> (相当于一个入口,说明脚本从下面开始执行)
LaunchActivity(com.asn.nuonuo,com.asn.nuonuo.home.activity.SplashActivity2)
UserWait(100)
# 点击"我的“
DispatchPointer(10000,10000,0,1000,1800,0,0,0,0,0,0,0)
DispatchPointer(10000,10000,1,1000,1800,0,0,0,0,0,0,0)
UserWait(100)
# 点击"首页“
DispatchPointer(10000,10000,0,200,1800,0,0,0,0,0,0,0)
DispatchPointer(10000,10000,1,200,1800,0,0,0,0,0,0,0)

后续

  • 编写好脚本,保存为monkey.mks文件,并通过adb push将其上传到待测试的设备中.adb push monkey.mks /data/local/tmp/
  • 然后通过monkey -f 执行此脚本,例如下面执行100次;adb shell monkey -f /data/local/tmp/monkey.mks 100

应用框架

Maxium

https://github.com/zhangzhao4444/Maxim

Maxium是基于遍历规则的高性能Android Monkey,适用于真机/模拟器的APP 稳定性测试; 直接运行命令进行稳定性测试,错误日志会直接显示到命令行;当然可以通过命令输出到Log文件查看稳定结果; 框架的基本原理:基于源生Android Monkey做的二次开发定制;

安装
  • adb push framework.jar /sdcard
  • adb push monkey.jar /sdcard
DEMO

命令行: adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin com.kubi.kucoin.debug -p com.kubi.kucoin.debug --uiautomatormix --running-minutes 60 -v -v

命令行展示: 15773513446437.jpg

15773513960587.jpg

从结果上可以看出我们这次我们运行稳定性测试一共持续了1分钟,遍历检查了3个功能页面分别是KuCoinMainActivity,KuCoinMarketActivity,KlineLandscapeActivity,均没有崩溃和错误发生;同时框架支持其他的遍历方式和命令组合方式,可以根据自己的测试策略做不同的转换,这里就不一一介绍了。有兴趣的同学可以了解一下;

命令解读
  • --uiautomatordfs—— 增加深度遍历算法(模式 DFS)
  • --uiautomatormix——直接使用底层accessibiltyserver获取界面接口 解析各控件,随机选取一个控件执行touch操作;(模式Mix);默认70%控件解析随机点击,其余30%按原Monkey事件概率分布)--pct-uiautomatormix n 可自定义混合模式中控件解析事件概率
  • accessibilityserver action占比50%,其余各action分剩余的50%;accessibilityserver action占比可配置--pct-uiautomatormix n;
  • --running-minutes 3——总运行时长,运行3分钟
  • --act-whitelist-file /sdcard/xxx.strings 定义白名单
  • --act-blacklist-file /sdcard/xxx.strings定义黑名单
  • --uiautomatortroyTROY模式(支持特殊事件、黑控件等) 配置 max.xpath.selector troy控件选择子来定制自有的控件选择优先级
  • Max.config :(高速截图 及 dump xml) /sdcard/将该文件push到/sdcard/max.config;--output-directory /sdcard/max1/会自动保存到max1中.(每分钟100-200截图,故因大量截图对手机空间要求较高,仅为复现崩溃时建议开启截图)
  • --imagepolling开启崩溃回澍截图、关闭原截图逻辑

bye