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

132人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册