monkey脚本编写实例(tempermonkey脚本)
Android APP 测试之Monkey
1
安装Androidsdk
2
运行cmd
查看导出文件,此文件无crash和anr报错信息
3
在Monkey测试过程中可能会出现程序崩溃(CRASH)和程序无响应的情况(ANR),要将测试的log信息获取到,从而解决bug
测试过程中出现crash现象时,根据seed值来完成bug的复现:adbshell monkey -p (包名?) -s (seed值) -v 1000?
测试过程中出现ANR现象,会输出相应的信息,以ANR开头,获取到信息进行问题的解决,同样可以通过seed来进行复现adbshell cd /data/anr切换到设备路径下ls可以看到traces.txt里面即为log信息
4
monkeyscriptmonkeyscript是monkey的脚本语言,是一组可以被monkey识别的命令集合,可以帮我们完成一系列的被固定的重复性操作,monkey通过脚本来进行测试,只是一个记事本文件,缺点是在坐标、按键等方面没有逻辑性。
常用API的介绍
完成monkey.txt脚本的编写,保存到某一路径下 切换到monkey.txt路径下adbpush monkey.txt /data/local/temp/(设备的任一路径,无规定)adbshell切换到设备下 cd /data/local/temp 切换到monkey.txt路径下 monkey -f monkey.txt -v 10 执行monkey脚本及执行次数。
完成MonkeyScript的自动化Monkey测试
adb shell monkey的脚本怎么写
参数详细说明如下:
long downtime ,键最初被按下的时间
long eventTime ,事件发生的时间
int action ,动作: ACTION_DOWN=0 , ACTION_UP=1 ,ACTION_MULTIPLE=2
float x , x 坐标
float y , y 坐标
float pressure ,当前事件的压力,范围 0-1
float size ,触摸的近似值,范围 0-1
int metaState ,当前按下的 meta 键的标识
float xPrecision , x 坐标精确值
float yPrecision , y 坐标精确值
int device ,事件来源,范围 0-x , 0 表示不来自物理设备
int edgeFlags ,坐标是否超出了屏幕范围
巧用批处理工具分析monkey日志
我们用monkey做压力测试后,会保存一个monkey日志,那如果想快速的分析日志中有哪些异常,我们可以用批处理工具进行快速的筛查,我们一起来看看吧。
先编写个小脚本,然后修改为bat后缀即可;然后把monkey日志拖动到bat工具中即可快速筛查。
小脚本如下:
@ECHO OFF
ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
ECHO.:: 分析Monkey日志 ::
ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
REM 方法一:手动设置Monkey日志路径
SET monkeyLogFile=D:*info.log
REM 方法二:直接将Monkey日志拖到此bat文件上
IF NOT "%1"=="" SET monkeyLogFile=%1
ECHO.[ INFO ] Monkey日志: %monkeyLogFile%
ECHO.[ INFO ] 开始分析
SET blnException=0
ECHO.
ECHO.
REM 如果觉得分析太快,没有感觉,把下面注释去掉假装分析中,有停顿感
REM ping -n 2 127.0.0.1nul
::ANR日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO (
SET strANR=%%a
)
::崩溃日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO (
SET strCRASH=%%a
)
::异常日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO (
SET strException=%%a
)
::正常
FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO (
SET strFinished=%%a
)
IF NOT "%strANR%"=="" (
ECHO.[ INFO ] 分析Monkey日志存在: ANR
ECHO.[ INFO ] ------------------------------------
ECHO. "%strANR%"
SET /a blnException+=1
ECHO.
)
IF NOT "%strCRASH%"=="" (
ECHO.[ INFO ] 分析Monkey日志存在: CRASH
ECHO.[ INFO ] ------------------------------------
ECHO. "%strCRASH%"
SET /a blnException+=1
ECHO.
)
IF NOT "%strException%"=="" (
ECHO.[ INFO ] 分析Monkey日志存在: 异常
ECHO.[ INFO ] ------------------------------------
ECHO. "%strException%"
SET /a blnException+=1
)
IF NOT "%strFinished%"=="" (
ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记
ECHO.[ INFO ] ------------------------------------
ECHO. "%strFinished%"
ECHO.
) ELSE (
IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本!
ECHO.
)
REM 如果blnException不为0,说明存在异常,改变字体为淡紫色
IF %blnException% NEQ 0 (
Color 0D
ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查!
ECHO.
) ELSE (
ECHO.[ INFO ] 分析Monkey日志结果:正常
ECHO.
)
ECHO.
ECHO.[ EXIT ] 按任意键关闭窗口...
PAUSEnul
Monkey自动化测试脚本以及电量记录脚本
Monkey自动化测试过程中发现monkey进程重启,因此加入检测monkey进程重启脚本。
#!/system/bin/sh while true do echo "checking monkey..." monkeyPID=$(pgrep com.android.commands.monkey) echo $monkeyPID if [ -z "$monkeyPID"] ; then echo "monkey is died, reboot monkey..." monkey --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --kill-process-after-error --pkg-whitelist-file /data/local/tmp/monkey-whitelist.dat --throttle 250 -v -v -v 99999999 sdcard/monkey_log/monkey.log else echo "monkey exist, continue..." fi sleep 30 done
另外加入monkey测试过程中记录电量变化的脚本
#!/system/bin/shfile_date=$(date +'%Y%m%d-%H%M')chmod 777 /sdcardmkdir /sdcard/Atestlogmkdir /sdcard/Atestlog/bqmkdir /sdcard/Atestlog/logchmod 777 /sdcard/Atestlogchmod 777 /sdcard/Atestlog/bqchmod 777 /sdcard/Atestlog/logecho 'file qpnp-bms.c +p' /sys/kernel/debug/dynamic_debug/controlcat /proc/kmsg /sdcard/Atestlog/log/kmsg_$file_date.txt logcat -v time /sdcard/Atestlog/log/logcat_$file_date.txt 把当前的时间和电量值写入文件record(){echo $(date +'%Y/%m/%d %H:%M:%S ')$(cat /sys/class/power_supply/bq27542/voltage_now)' '$(cat /sys/class/power_supply/bq27542/current_now)' '$(cat /sys/class/power_supply/bq27542/temp)' '$(cat /sys/class/power_supply/bq27542/capacity)%' ' "
" /sdcard/Atestlog/bq/bq_$file_date.txt}#无限循环执行写电量值操作,每次循环间隔count=0while truedo? record $count? sleep 5? let count=$count+1done