目录
App稳定性测试
定义
稳定性测试是指软件长时间的持续运行中,系统版本是否稳定,能否持续的为用户提供服务
方法
自动化测试:工具或代码 --Monkey工具随机测试事件 Appium自动化测试代码固定测试事件
人工测试:人工操作
Monkey工具
定义
Monkey向系统发送随机的事件流(如按键输入、触摸屏输入和手势输入等),实现对正在测试的应用程序进行稳定性测试。帮助测试人员更好的模拟用户操作,确保测试App的稳定性
实现原理
通过adb命令调用monkey.shell文件,再执行monkey.jar文件,调用安卓守护进程,在设备上进行随机测试
使用步骤
1.连接设备
2.输入命令 adb shell monkey
命令大全
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pct-permission PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
[--permission-target-system]
COUNT
2.1 事件数
count: 事件数
测试时间=(事件数*延迟时间)通过事件数来测试稳定性
2.2 选项
基本配置选项参数
如设置只针对单独的一个包进行测试,设置等待时间等
- -p
- --throttle
- -v
- -s
-p:ALLOWED_PACKAGE
指定允许进行测试的应用包名,可多次使用该选项指定多个包名。指定包后,Monkey将只允许系统启动指定的APP。如无指定包,Monkey将允许系统启动设备中的所有APP
adb shell monkey -p com.example.app1 -p com.example.app2 100
此命令会对 com.example.app1 和 com.example.app2 这两个应用进行 100 次随机事件测试
--throttle:MILLISEC
这个选项用于设置随机事件之间的延迟时间,单位是毫秒。借助设置延迟时间,你能够控制事件的发送频率,从而模拟出不同的用户操作速度
adb shell monkey --throttle 500 -p com.example.app 200
此命令会向 com.example.app 应用发送 200 个随机事件,并且每个事件之间会间隔 500 毫秒
-v:
该选项用于设置日志的详细级别。-v
可以使用多次,每多使用一次,日志的详细程度就会增加一级。具体分为以下三个级别
-v Level 0 除启动提示、测试完成和最终结果外,提供较少的信息
-v-v Level 1 提供较为详细的测试信息,如逐个发送到Activity的事件
-v-v-v Level 2 提供最为详细的设置信息,包含各种调试信息,如测试中被选中和未被选择的Activity
adb shell monkey -v -v -p com.tencent.mobileqq 100 >> D:/logs/logcat.txt
此命令会输出更详细的日志信息,同样向 com.tencent.mobileqq 应用发送 100 个随机事件,最好将日志导出到本地
-s:SEED
在Monkey运行过程中,肯定会发现异常、崩溃、无响应等问题,对于此类问题如何如何进行复现呢? 答:借助-s <seed>
seed为伪随机数生成器生成的值。如果用相同的seed值再次运行Monkey,它将执行相同的事件序列。这在需要重现某个测试场景时非常有用(复现Bug、回归测试)
调试选项
- --ignore-crashes 忽略在应用程序出现crash时导致的monkey停止
- --ignore--timeouts 忽略在应用程序出现ANR问题时导致monkey停止
- --ignore-security-exceptions 忽略应用程序发生许可错误时导致monkey停止
- --kill-process-after-error 当应用程序发生错误时,应用程序停止运行并保持在当前错误状态
--ignore-crashes:
使用 monkey
命令对应用进行测试时,应用可能会因为各种原因(如代码逻辑错误、内存泄漏等)而崩溃。如果使用了 --ignore-crashes
选项,monkey
命令在遇到应用崩溃的情况时,会忽略这个错误,继续向应用发送后续的随机事件,而不会因为崩溃就停止测试
adb shell monkey --ignore-crashes -p com.example.app 500
此命令会对 com.example.app 应用发送 500 个随机事件,若应用在测试过程中崩溃,monkey 命令会继续执行后续事件的注入
--ignore--timeouts
应用在处理某些复杂操作时,可能会出现无响应(ANR,Application Not Responding)的情况,也就是所谓的超时。当使用 --ignore-timeouts
选项后,monkey
命令在遇到应用无响应的情况时,会忽略这个超时错误,继续向应用发送随机事件,而不是停止测试
adb shell monkey --ignore-timeouts -p com.example.app 800
该命令会向 com.example.app 应用发送 800 个随机事件,若应用出现无响应的情况,monkey 命令会继续执行测试。
--ignore-security-exceptions
在应用运行过程中,可能会触发一些安全异常,例如权限不足、非法访问等。使用 --ignore-security-exceptions
选项后,monkey
命令在遇到这些安全异常时,会忽略它们,继续向应用发送随机事件,而不是停止测试
adb shell monkey --ignore-security-exceptions -p com.example.app 600
此命令会对 com.example.app 应用发送 600 个随机事件,若应用触发了安全异常,monkey 命令会忽略该异常并继续测试
--kill-process-after-error
当应用在测试过程中出现错误(如崩溃、超时、安全异常等)时,--kill-process-after-error
选项会让 monkey
命令在检测到错误后,停止应用程序的运行并保持在当前错误状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)
adb shell monkey --kill-process-after-error -p com.example.app 300
该命令会向 com.example.app 应用发送 300 个随机事件,若应用在测试过程中出现错误,monkey 命令会杀死该应用的进程
事件类型和频率参数
- --pct-touch PERCENT
- --pct-motion PERCENT
- --pct-trackball PERCENT
- --pct-syskeys PERCENT
- --pct-nav PERCENT
- --pct-majornav PERCENT
- --pct-appswitch PERCENT
- --pct-flip PERCENT
- --pct-anyevent PERCENT
- --pct-pinchzoom PERCENT
- --pct-permission PERCENT
事 件 | 事件名称 | 事件描述 |
---|---|---|
--pct-touch | 触摸事件百分比 | 实际操作类似于点击 |
--pct-motion | 滑动事件百分比 | 实际操作是一个没有拐弯的直线滑动操作 |
--pct-pinchzoom | 缩放事件百分比 | 智能手机上的放大缩小手势操作 |
--pct-trackball | 轨迹球事件百分比 | 一系列的曲线滑动操作(目前很少用) |
--pct-rotation | 手机屏幕在横竖屏之间不断地切换 | |
--pct-permission | 权限 | 替换掉了老版本中的 --pct-rotation 屏幕旋转 |
--pct-nav | 基本导航事件百分比 | 设备上、下、左、右键(目前很少用) |
--pct-majornav | 主要导航事件百分比 | 键盘的中间键、回退按键、菜单按键 |
--pct-syskeys | 系统事件百分比 | 点击 Home 键、返回键、音量调节键等 |
--pct-appswitch | Activity 启动事件百分比 | 某个页面切换事件 |
--pct-flip | 键盘翻转事件百分比 | 点击输入框、键盘弹起、点击输入框以外区域、键盘收回等 |
--pct-anyevent | 其他事件百分比 | 除了上面的一些其他事件,如按键、其他不常用的设备上的按钮等(目前很少用) |
--pct-touch PERCENT(序号0)
该参数用于设置触摸事件(如屏幕点击)在所有随机事件中所占的百分比。触摸事件模拟用户用手指点击屏幕上的某个位置
adb shell monkey --pct-touch 30 -p com.example.app 500
此命令会向 com.example.app 应用发送 500 个随机事件,其中大约 30%(即 150 个左右)为触摸事件
--pct-motion PERCENT(序号1)
用于设置滑动事件的百分比。滑动事件模拟用户在屏幕上进行滑动操作,像上下滑动屏幕浏览内容、左右滑动切换页面等
adb shell monkey -p com.tencent.mobileqq --pct-motion 40 100
该命令发送的 100 个随机事件中,约 40%(40 个左右)为滑动事件
--pct-trackball PERCENT(序号3)
设置轨迹球事件的百分比。虽然现在很多 Android 设备没有物理轨迹球了,但该参数可模拟类似轨迹球的操作,如在虚拟轨迹球区域的滚动操作
adb shell monkey --pct-trackball 10 -p com.example.app 500
意味着 500 个随机事件中约 10%(50 个左右)是轨迹球事件
--pct-syskeys PERCENT(序号8)
设置系统按键事件的百分比。系统按键事件包括返回键、菜单键、主页键等系统级按键的操作
adb shell monkey -p com.example.app --pct-syskeys 15 100
表示 500 个随机事件中约 15%(75 个左右)为系统按键事件
--pct-nav PERCENT(序号6)
设置基本导航事件的百分比。基本导航事件通常指上下左右方向键的操作,用于在应用界面中进行导航
adb shell monkey --pct-nav 12 -p com.example.app 500
即 500 个随机事件中约 12%(60 个左右)为基本导航事件
--pct-majornav PERCENT(序号7)
设置主要导航事件的百分比。主要导航事件包括确定键、返回键等在应用导航中起关键作用的按键操作
adb shell monkey --pct-majornav 8 -p com.example.app 500
说明 500 个随机事件中约 8%(40 个左右)为主要导航事件
--pct-appswitch PERCENT (序号9)
设置应用切换事件的百分比。应用切换事件模拟用户在不同应用之间进行切换的操作
adb shell monkey --pct-appswitch 5 -p com.example.app 500
表明 500 个随机事件中约 5%(25 个左右)为应用切换事件
--pct-flip PERCENT(序号10)
设置键盘翻转事件的百分比。在一些支持物理键盘翻转的设备上,该参数可模拟键盘展开或收起的操作
adb shell monkey --pct-flip 3 -p com.example.app 500
表示 500 个随机事件中约 3%(15 个左右)为键盘翻转事件
--pct-anyevent PERCENT (序号11)
设置其他类型事件的百分比。当以上特定类型事件都不匹配时,就归为其他类型事件
adb shell monkey --pct-anyevent 7 -p com.tencent.mobileqq 500
意味着 500 个随机事件中约 7%(35 个左右)为其他类型事件
--pct-pinchzoom PERCENT(序号2)
设置缩放事件的百分比。缩放事件模拟用户在屏幕上进行双指缩放的操作,如放大或缩小图片、地图等
adb shell monkey --pct-pinchzoom 6 -p com.tencent.mobileqq -v 500
说明 500 个随机事件中约 6%(30 个左右)为缩放事件
--pct-permission PERCENT(序号5)
设置权限请求事件的百分比。权限请求事件模拟应用向用户请求各种权限的操作,如请求访问相机、存储等权限
adb shell monkey --pct-permission 15 -p com.tencent.mobileqq -v 500
表示 500 个随机事件中约 4%(20 个左右)为权限请求事件
日志分析
经过Monkey测试出现异常后,需要去查看日志信息,检查在运行过程中是否有相应Exception错误出现。如NullPointerException空指针、ClassCastException类型转换异常等
adb shell monkey -p com.tencent.mobileqq -v 100 >D:\log.txt
导出日志
1. 在日志找有哪些错误
2. 找到错误后再定位是哪些APP或者事件出错
3. 提交BUG,并附上日志信息
4. 开发修复BUG后,进行回归测试【设置SEED值】
常见错误结果
程序无响应,ANR问题:查找ANR
崩溃问题:查找CRASH
其他问题:查找Exception、FATAL
关闭正在运行的Monkey
重新打开CMD
adb shell ps | find "monkey" 查看正在运行monkey进程的pid
adb shell kill 进程号