zoukankan      html  css  js  c++  java
  • 随机自动化测试monkey的使用

    Monkey简介

    Monkey概念:
    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
    该工具用于进行压力测试。然后开发人员结合monkey 打印的日志和系统打印的日志,分析测试中的问题

    Monkey 测试的特点:
    Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性。
    1、测试的对象仅为应用程序包,有一定的局限性。
    2、Monky测试使用的事件数据流是随机的,不能进行自定义。
    3、可对MonkeyTest的对象,事件数量,类型,频率等进行设置

    Monkey存放路径:
    Monkey程序是Android系统自带的,由Java语言写成,在Android文件系统中的存放路径是:
    /system/framework/monkey.jar。

    Monkey大致操作流程:
    通过名为“monkey”的Shell脚本去启动Monkey.jar程序(shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey),在你指定的APP应用上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。

    Monkey测试目的:
    测试app 是否会是否会Crash(崩溃)

    Monkey操作命令格式:
    adb shell monkey {+命令参数}

    Monkey 测试基本操作介绍

    Monkey命令参数:

    1. 参数: -p
      参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。
    • 指定一个包: adb shell monkey -p com.htc.Weather 100
      说明:com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。
    • 指定多个包:adb shell monkey -p com.htc.Weather –p com.htc.pdfreader -p
      com.htc.photo.widgets 100
    • 不指定包:adb shell monkey 100
      说明:Monkey随机启动APP并发送100个随机事件。
    1. 参数: -v
      用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
      日志级别 Level 0
      示例 adb shell monkey -p com.htc.Weather –v 100
      说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

    日志级别 Level 1
    示例 adb shell monkey -p com.htc.Weather –v -v 100
    说明 提供较为详细的日志,包括每个发送到Activity的事件信息

    日志级别 Level 2
    示例 adb shell monkey -p com.htc.Weather –v -v –v 100
    说明 最详细的日志,包括了测试中选中/未选中的Activity信息

    3)参数: --throttle <毫秒>
    用于指定用户操作(即事件)间的时延,单位是毫秒;
    示例:adb shell monkey -p com.htc.Weather --throttle 3000 100

    4)参数: -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值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的。

    1. 参数: --ignore-crashes
      用于指定当应用程序崩溃时(Force & Close错误),Monkey是否停止运行。如果使用
      此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。
      示例:adb shell monkey -p com.htc.Weather --ignore-crashes 1000
      测试过程中即使Weather程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止;

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

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

    4. --pct-事件类别
      11个事件百分比控制(有的是9种事件,没有--pct-pinchzoom,--pct-rotation事件)由安卓SDK决定

    --pct-touch {+百分比} 0:
    触摸,触摸事件泛指发生在某一位置的一个down-up事件,点击
    --pct-motion {+百分比}1:
    动作,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出
    (即up事件)
    --pct-pinchzoom {+百分比}2:
    二指缩放,智能机上的放大缩小手势操作事件
    --pct-trackball {+百分比}3:
    轨迹,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件
    --pct-rotation {+百分比}4:
    屏幕旋转,横屏竖屏事件
    --pct-nav {+百分比}5:
    基本导航,基本导航事件主要来自方向输入设备的上、下、左、右事件
    --pct-majornav {+百分比}6:
    主要导航,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等
    --pct-syskeys {+百分比}7:
    系统按键,系统按键事件通常指仅供系统使用的保留按键,如HOME键、BACK键、拨号键、挂断键、音量键等
    --pct-appswitch {+百分比}8:
    应用启动,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法
    最大限度地开启该package下的所有应用
    --pct-flip {+百分比}9:
    翻转,键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
    --pct-anyevent {+百分比}10:
    其他类型,其他类型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等

    Monkey命令实战:

    adb shell monkey -p com.htc.Weather -s 3 --throttle 1000 --pct-anyevent 50 --pct-syskeys 50 --ignore-crashes --ignore-timeouts --ignore-security-exceptions 1000
    备注:--pct指定的事件加起来不能超过100%

    Monkey测试中,终止运行的方式:
    方式一:

    1. 新打开一个dos命令窗口
    2. 执行: adb shell
    3. 执行ps | grep monkey
    4. 返回来的第一个数字,即是monkey的进程号然后kill pid 进程号
      方式二:
      重启手机。

    Monkey测试日志分析

    用Monkey做测试,为了方便分析问题,需要把monkey运行过程中产生的日志结果进行分析,查找bug。

    结果保存在电脑上:
    adb shell monkey -p 包名 -v 1000 > 路径/monkey.txt

    结果保存在手机上:
    前提条件:手机要root或把结果文件放在有权限存取的路径
    1、运行adb shell
    2、monkey -p 包名 -v 1000 1>手机路径/info.txt 2>手机路径/error.txt

    备注:
    1、结果中可以通过 |logcat -v time 添加时间。如下:
    monkey -p 包名 -v 1000 |logcat -v time 1>手机路径/info.txt 2>手机路径/error.txt
    2、如手机提示read-only file system
    mount当前挂载情况
    mount -o remount -o rw /system重新挂载需要修改权限的目录

    如果测试monkey碰到crash或者anr(程序强制性退出或不响应)现象时,在抓取log的同时需要提供traces.txt,步骤如下:

    1. 测试版本需要具备root权限
    2. 进入data/anr目录下面
    3. 将traces.txt文件拷贝到TF卡中,然后拷贝出来发给软件分析即可
    4. adb pull /data/anr/traces.txt c: 复制文件到电脑

    备注:
    1、 保留在手机中的测试日志(info.txt、error.txt)也可以通过上述第4步骤保存到电脑
    2、adb shell cat /data/anr/traces.txt> d: races.txt 复制文件到电脑

    在日志中进行快速分析:
    1、程序无响应的问题:
    在日志中搜索 “ANR”
    2、崩溃问题:
    在日志中搜索 “Exception”

    备注:
    monkey执行时未加--ignore-crashes --ignore-timeouts参数,就先浏览日志中
    Events injected(注入事件): 值,查看当前已执行的次数,就知道有无bug。

    找出问题后的操作步骤:
    (1) 找到是monkey里面的哪个地方出错
    (2) 查看Monkey里面出错前的一些事件动作,并手动执行该动作
    (3) 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样。

  • 相关阅读:
    Splay模板(bzoj 1588)
    PDD----配对堆
    [BZOJ4025] 二分图 LCT/(线段树分治+并查集)
    FFT模板 生成函数 原根 多项式求逆 多项式开根
    [BZOJ4566][Haoi2016]找相同字符 后缀自动机+dp
    [BZOJ1503] [NOI2004]郁闷的出纳员 splay
    [loj#2566][BZOJ5333] [Sdoi2018]荣誉称号 树形dp
    [BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
    [BZOJ5305][Haoi2018]苹果树 组合数
    [BZOJ2669][cqoi2012]局部极小值 状压dp+容斥原理
  • 原文地址:https://www.cnblogs.com/TD1900/p/12089869.html
Copyright © 2011-2022 走看看