• app测试之monkey


    一 Monkey简介

    Monkey是一款app的自动化测试工具,monkey是猴子的意思,所以从原理上说,它的自动化测试就类似猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱。Monkey原理也是类似,通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、滑动Trackball、手势输入等操作),来对设备上的程序进行测试,检测程序长时间的稳定性,多久的时间会发生异常。

    Monkey工具存在Android系统中,使用Java语言写成,jar包在Android文件系统中的存放路径是:/system/framework/monkey.jar;Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;

    monkey需要通过adb来唤醒,即通过在cmd窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试;

    二 Monkey 工作原理

    在Monkey运行的时候,它会生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:

    (1) 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止;

    (2) 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错;

    (3) 如果应用程序产生了应用程序不响应ANR(application not responding)的错误,Monkey将会停止并报错;

    按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。

    ### 

    Monkey特点

    1、运行时机:一般是产品稳定后 首轮功能测试完成的夜间进行

    2、需要知道packageName

    3、目的:主要测试产品是否存在崩溃问题和ANR问题。

    ANR(Application Not Responding):即应用无响应。主线程在超时时间内没有做完特定的事情,就会发生ANR。 

    ###

    三 monkey使用

    获取包名的两个方法

    首先安装到模拟器上想获取的包:adb install <带路径的包名>

    1、通过adb logcat获取
    adb shell “logcat | grep START”【如果直接使用不出现log,可以先进入linux命令:adb shell,然后再执行:logcat | grep START】
    然后打开apk ,就可以出现包名

    2、aapt  dump badging apk名称

    Monkey的基本命令

    1、标准monkey命令:adb shell monkey -p com.android.calculator2 -v 50

    -p:packageName

    -v:日志级别

    50:事件数

    2、adb shell monkey -p com.android.calculator2 -v -v --pct-touch 50 --throttle 600 88

    --pct-touch 50 设置整个过程中点击操作所占的百分比

    --throttle 600每个事件间隔600ms

    3、adb shell monkey -p packagename --throttle 500 --ignore-crashes --ignore-timeouts --ignoresecurity-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000>c:\monkey_test.log

    --ignore-crashes 用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果 使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

    --ignore-timeouts 用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是 否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计 数完成。

    --ignore-security-exceptions 用于指定当应用程序发生许可错误时(如证书许可,网络许可等), Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误Monkey依然会发送事件,直 到事件计数完成。

    --kill-process-after-error 用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应 用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时 的状态,系统并不会结束该应用程序的进程)。

    --monitor-native-crashes 用于指定是否监视并报告应用程序发生崩溃的本地代码

    四、Monkey的日志级别

    参数: -v 用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

    1、日志级别 Level0

    示例 adb shellmonkey -p com.htc.Weather –v 100

    说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

    2、日志级别 Level 1

    示例 adb shell monkey -p com.htc.Weather –v -v 100

    说明 提供较为详细的日志,包括每个发送到Activity的事件信息

    3、日志级别 Level 2

    示例 adb shell monkey -p com.htc.Weather –v -v –v 100

    说明 最详细的日志,包括了测试中选中/未选中的Activity信息

    五、Monkey的事件类型

    1、--pct-touch:指定触摸事件的百分比,如:--pct-touch 5

    2、 --pct-motion (滑动事件)

    3、 --pct-trackball (轨迹球事件)

    4、 --pct-nav (导航事件 up/down/left/right)

    5、 --pct-majornav (主要导航事件 back key 、 menu key)

    6、 --pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)

    7、 --pct-appswitch (activity之间的切换)

    8、--pct-anyevent (任意事件)

    六、Monkey的参数 -s

    参数: -s 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。 示例:

    Monkey测试1:adb shell monkey -p com.htc.Weather –s 10 100

    Monkey 测试2:adb shell monkey -p com.htc.Weather–s 10 100 两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列 操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可 以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;

    七、Monkey的日志分析

    1、按关键字进行搜索,ANR、Exception、Crash、Error。

    2、找到有问题的地方,查看上下文信息。

    3、注意第一个switch上下文信息。

    4、查看monkey里面出错前的一些事件动作,可以手动执行该动作。

    5、进行问题复现,可以使用之前执行的monkey命令在执行一遍,注意seed值要一样。

    【测试结果分析】

    (1)、ANR问题(程序无响应):在日志中搜索“ANR"(application no response)

    (2)、闪退问题:在日志中搜索"crash"

    (3)、异常:搜索"exception"

    (4)、强制退出:搜索"force closed"

    八、Crash专项

    1、安装可以引起Crash的App

    2、执行压力命令

    3、析取Crash的Exception信息

    案例: 执行压力测试,并且生成monkey_test.log日志文件。

    #adb shell monkey -p cn.besttest.crashtest -v 100 >E:\monkey\monkey_test.log

    #查看E盘文件夹下已经生成了monkey_test.log。

    #打开文件,进行crash分析

    九、ANR专项

    步骤同上

    1、安装可以引起ANR的App

    2、执行压力命令

    3、析取ANR的Exception信息

    1、查看monkey的log

    2、/data/anr/traces.txt

    3、查看logcat日志 ANR

    ###

  • 相关阅读:
    JavaWeb-对象增强的方式
    JavaWeb-dbcp连接池
    eclipse发送音频等大数据包到数据库的异常解决方案
    JDBC-prepareStatement预编译
    JDBC原理
    JDBC入门
    当我们说前端,我们在说什么?
    markdown上下左右,跳至行尾行首,重设快捷键
    web API简介(四):客户端储存之IndexedDB API
    过年搭出租车攻略
  • 原文地址:https://www.cnblogs.com/andy0816/p/15627678.html
Copyright © 2020-2023  润新知