准备工作
环境:
- 配置环境变量: tools 和 platform-tools 在Android 的 SDK 目录下
- 安装Python 并配置环境变量
adb 相关:
- adb devices 查看链接设备名称 比如:8a791904 (我的手机)
- adb shell pm list package -3 (3列出第三方的包名)
Monkey — 模拟猴子在键盘上乱敲
cat monkey - > $base/framework/monkey.jar (存在于每个手机Android系统中)
命令参数 及 作用
-p 选择报名 获取包名 adb shell pm list package -3 (3列出第三方的包名)
-v 制定日志级别
-s 随机事件的中子数,中子数相同则生成相同随机操作序列
–throttle 操作的延时
-s seed值,可以理解为猴子的编号,测试事件的比例不同
–ignore 在monkey 的执行过程中,忽略掉部分引起monkey停止的事件,继续执行
- crashes L应用崩溃
- timeouts:ANR 未响应
- security:安全验证
- native:系统崩溃
测试命令行
adb shell monkey -s 805 -p com.example.monkeytestdemo --pct-touch 100 -v -v 50
指令意思 : 805 编号的猴子,100%执行触摸事件 ,2级日志 ,50次 (息屏)
命令行导出测试报告
adb shell monkey -p com.xxxx.xxx -v -v -v 500>F:\report.txt
指定进行测试事件 的占比 --pct-xxx
adb shell monkey -p com.xxxx.xxx --pct-touch 100 -v -v 500 (点击事件 占比100%)
adb shell monkey -v --pct-touch 50 --pct-motion 30 100 (触摸50% 运动事件30%)
其他事件 对照 查询
[--pct-touch PERCENT] [--pct-motion PERCENT] 触摸
[-pct-motion PERCENT] [--pct-motion PERCENT] 运动
[--pct-trackball PERCENT] 轨迹球 (鼠标滚轮)
[--pct-syskeys PERCENT] 系统导航键 (HOME BACK 拨号音量键 相机等)
[--pct-nav PERCENT] 导航 (上 下 左 右)
[--pct-majornav PERCENT] 主要导航 (中间键 返回键 菜单键)
[--pct-appswitch PERCENT] Activity 之间切换
[--pct-flip PERCENT] 键盘翻转事件,类似点击输入框,键盘弹起,点击其他区域,键盘收起
[--pct-rotationPERCENT] 调整屏幕旋转
[--pct-anyevent PERCENT] 不常用事件
[--pct-pinchzoom PERCENT] 调整缩放
[--pct-permission PERCENT]
白名单黑名单
monkey --pkg–whitelist-file /data/white.txt (执行指定的包名)
monkey --pkg–blacklist-file /data/black.txt (不执行指定的包名)
看日志时,只要关注 error ANR exception crash 即可
当测试时名不需要点击 statusBar 时 可以将其关闭 :
adb shell settings put global policy_control immersive.full=* 关闭手机的状态栏
adb shell settings put global policy_control null 开启手机状态栏
MonkeyScript – 让猴子做指定的事情
monkeyScript 是 一组可以被Monkey 识别的命令集合
可以完成重复固定的操作。
可以做的一些事件可以参考下图或 这个链接
命令实践
adb shell monkey -f scriptfile event-conut
scriptfile 是要执行的脚本文件
执行前需要 将 脚本推送到 手机目录中执行:
adb push monkey.script /data/local/tmp
执行命令:
adb shell monkey -f monkey.script 2 // 执行这个脚本文件 2次
日志日志:
adb shell monkey -f monkey.script -v -v 3 >F:/MonkeySpLog.txt //
将日志输出到 MonkeySpLog.txt 中
脚本文件 monkey.script
typ=user
count=10
speed=1.0
start data >>
LaunchActivity(com.example.monkeytestdemo,.MainActivity)
UserWait(2000)
DispatchPointer(10,10,0,100,100,1,1,-1,1,1,0,0)
DispatchPointer(10,10,1,100,100,1,1,-1,1,1,0,0)
DispatchString(test)
UserWait(1000)
DispatchPress(66)
DispatchPointer(10,10,0,40,100,1,1,-1,1,1,0,0)
DispatchPointer(10,10,0,40,100,1,1,-1,1,1,0,0)
UserWait(6000)
上面指令 执行的是:
启动 App — 等待两秒 — 点击输入框 — 等待两秒 — 输入“test” — 等待一秒
— 输入回车— 点击 “提示” 按钮 —用户等待六秒
通过上面的指令可以了解到,他的是通过点击界面上的坐标点来完成点击事件的,那怎么才能知道,目标控件的坐标点?就需要借助 uiautomatorviewer 工具
位置 在 …/android/sdk/tools/bin/uiautomatorviewer
命令行命令行 ./uiautomatorviewer 启动后,看到这样的界面,就可以在右边的窗口中获取到页面信息了。
MonkeyRunner – 比上面两种功能更多
所属位置:…/android/sdk/tools/bin/monkeyrunner
简介:
MonkeyRunner 可以通过API 执行特定的命令和事件,精准可控
可以进行:点触屏、拖拽、长按、键盘事件
还可以 :智能截图对比和判断 ,回溯具体的BUG路径
API 分为三大模块
MonkeyRunner:用来链接设备或模拟器。
MonkeyDevice:提供安装、卸载应用,发送模拟事件
MonkeyImage:完成图像保存,及对比的操作。
测试的类型
- 多设备控制
可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
- 功能测试
- 回归测试
1、多设备控制:monkeyrunnerAPI可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2、 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果
3、 回归测试:可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
命令实践:
monkeyrunner demo.py 或者 ./monkeyrunner demo.py
脚本文件 demo.py
from com.android.monkeyrunner import MonkeyRunner
from com.android.monkeyrunner import MonkeyDevice
from com.android.monkeyrunner import MonkeyImage
import os
import datetime
import time
import shutil
import subprocess
import random
import time#链接设备
device=MonkeyRunner.waitForConnection(3,“R22M600P53A”)
#启动App
device.startActivity(“com.example.monkeytestdemo/com.example.monkeytestdemo.MainActivity”)
#点击输入框
device.touch(100,100,“DOWN_AND_UP”)
MonkeyRunner.sleep(1)
#输入内容 下面是python 语法的 while 循环
num = 1
while num<=5:
s = random.randint(0,9)
ticks = time.time()
num = num + 1
device.type(‘testText’+str(ticks)+‘randomNum:’+str(s))
MonkeyRunner.sleep(2)
#点击按钮
device.touch(1050,100,“DOWN_AND_UP”)
MonkeyRunner.sleep(2)
#截屏并保存
image = device.takeSnapshot()
image.writeToFile(’…/test.png’,‘png’)