.1、环境配置

MONKEY测试使用的是ADB命令,因此只需要配置ADB环境即可。

2、测试准备与执行

在Monkey测试前,必须进行以下准备

Ø  手机屏幕超时设置为30分钟或者永不超时,防止手机进入锁屏状态。

Ø  插入SIM卡和存储卡后将手机开机,开启开发者模式,开启ADB模式,连接到PC(存储卡剩余空间尽量留大,建议1G以上)

Ø  在PC上执行 运行—>CMD,在弹出的命令窗口中,输入adb devices,检查设备是否连接

  这一步很多人会遇到连接不上设备,解决方法如下:

    一、检查开发者选项USB调试是否开启

    二、重新插拔USB看是否有授权提示

    三、重启adb

    1.   adb kill-server
    2.     adb start-server

    四、添加设备ID至电脑文件中adb_usb.ini

    1. adb_usb.ini文件位置:Win(C:\Users\Administrator\.android\)、Mac(/Users/user/.android/)、linux(/root/.android/)
    2. Win获取(USB连接设备以后查看控制面板->系统->设备管理器->Android Phone->设备名称->详细信息->硬件ID->VID)

Ø  在弹出的命令窗口中,输入adb shell,进入Linux Shell

Ø  输入常用的 Monkey命令。如下:

    问题: 如何获取APP的package?

      1.CMD命令模式下,切到目录(build-tools下),

       以本人的为例    D:\AndroidTest\android-sdk_r24.4.1-windows\android-sdk-windows\build-tools\28.0.0  

      2.执行: aapt dump badging E:\apk\app-release.apk

      3.从获取的信息中copy  (一个是启动的activity,安卓编程初始化用到,一个是packageName ,monkey用到):

        launchable-activity: name='com.XXXXX.hamapp.MainActivity'
        package: name='com.XXXXXX.hamapp.test' versionCode='100' versionName='1.0.0' platformBuildVersionName='8.1.0'

monkey -p com.XXXXXX.hamapp.test --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 20 -s 1 -v -v --throttle 200 100000 2>/sdcard/error.txt 1>/sdcard/info.txt

参数

描述

-p com.lenovo.ideafriend

只仅针对特定包名进行测试

--ignore-crashes

忽略应用程序崩溃(Force & Close错误),继续发送执行事件,直到事件数执行完成

--ignore-timeouts

忽略应用程序发生ANR(Application No Responding)错误时,直到事件数执行完成

--ignore-native-crashes

忽略本地应用程序发生奔溃,直到事件数执行完成

--pct-touch 20

调整触摸事件为30%。即整个事件过程中触摸事件占20%

-s 1

伪随机数生成器seed值。Seed值为1。相同的seed值再次执行monkey,将产生相同的事件序列。

-v -v

日志级别为Leve1 1。将提供较为详细的日志,包括每个发送到Activity的事件信息

--throttle 200

事件之间延时200毫秒。可以控制monkey的执行速度,如果不指定该选项,monkey事件间将不会延时。

10000

执行事件数为1万次

2>/sdcard/error.txt

Leve1 2日志保存到sdcard上的error.txt中

1>/sdcard/info.txt

Leve1 1日志保存到sdcard上的info.txt中

3、结果检查与分析

测试结束后,需要将手机连接PC,拷贝以下文件:

Ø  info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。

Ø  error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。

Ø  LOG文件:此文件在手机上的LOG文件夹中中,主要主要记录程序对MONKEY测试时的响应情况。

Ø  将手机里面的monkey log文件拉取到电脑

adb pull /sdcard/error.txt E:\monkeyLog\error1.txt
adb pull /sdcard/info.txt E:\monkeyLog\info1.txt

我们需要对这2个文件进行分析整理,以便提交开发人员处理。

如何分析?

1. 在error.txt 文件里面搜索关键字----ANR, crash, Exception 然后将相关的上下文内容copy到BUG描述,如下:

// CRASH: com.luojilab.player (pid 13876)
// Short Msg: java.lang.IllegalStateException
// Long Msg: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
// Build Label: HUAWEI/FLA-AL10/HWFLA-H:8.0.0/HUAWEIFLA-AL10/131(C00):user/release-keys
// Build Changelist: 131(C00)
// Build Time: 1522683921000
// java.lang.RuntimeException: Unable to create application com.luojilab.base.application.LuojiLabApplication: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
// at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6532)
// at android.app.ActivityThread.-wrap2(Unknown Source:0)
// at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1963)
// at android.os.Handler.dispatchMessage(Handler.java:108)
// at android.os.Looper.loop(Looper.java:166)
// at android.app.ActivityThread.main(ActivityThread.java:7425)
// at java.lang.reflect.Method.invoke(Native Method)
// at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
// Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
// at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1701)
// at android.app.ContextImpl.startService(ContextImpl.java:1657)
// at android.content.ContextWrapper.startService(ContextWrapper.java:644)
// at com.luojilab.base.application.LauncherService.start(SourceFile:48)
// at com.luojilab.business.welcome.a.a(SourceFile:129)
// at com.luojilab.base.application.LuojiLabApplication.onCreate(SourceFile:112)
// at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1122)
// at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6517)
// ... 8 more

2. 在info.text 里面搜exception ,然后搜索上下文的switch(两个switch之间是一个操作组,如果出现了exception证明出现了崩溃),如下:

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.XXXXXe.hamapp.test/com.evergrande.hamapp.MainActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.evergrande.hamapp.test/com.evergrande.hamapp.MainActivity } in package com.XXXXX.hamapp.test
:Sending Flip keyboardOpen=false
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
// Injection Failed
Sleeping for 200 milliseconds

4、杀monkey进程与其他

如果想中断运行中的monkey   CTRL+C

adb shell ps | grep monkey  返回进程号

adb shell kill [刚才查到的进程号]

app包名查看:

a.手机安装包名查看器'

b.aapt命令  aapt dump badging *.apk

c、源码下的AndroidManifest.xml文件查看

d.adb logcat抓取当前Android机运行的app的包名(  I/ActivityManager(数字): Displayed 包名/类
名: +ms )

  命令行输入 adb logcat >e:\bag.txt

  手机操控app,ctrl+c停止

  去e:\bag.txt这个文件下搜索关键字如Displayed ,一般都能找到

参考资料:

【1】Monkey官网

http://developer.android.com/tools/help/monkey.html

【2】百度文库 Monkey测试介绍

http://wenku.baidu.com/view/476c79b8fd0a79563c1e72b6.html

【3】 monkey 自动化开源工具:

    1. swiftmonkey
      https://github.com/zalando/SwiftMonkey
      因其直接使用了 苹果的私有api 如XCEventGenerator.tapAtTouchLocations 故执行速度极快。同时也用类似android monkey的事件生成机制,自身源源不断的产生如 tap,swipe,pinchIn等事件使其对被测app产生了极大的压力
      缺点:需要插桩

    2. XCTestWD 
      https://github.com/macacajs/XCTestWD
      类似facebook wda的方式,在xcode中执行xcuitest时启动一个监听server,可通过外部发送命令来创建待测app对应session并启动app,同时也实现了dump tree 和依据xpath,id等来定位某个控件并操作这些控件

    3. Fastmonkey
      Xcode9.0(https://github.com/zhangzhao4444/Fastmonkey
      Xcode8.3(https://github.com/zhangzhao4444/Fastmonkey/tree/xcode8.3
      结合两者优点并改造两者,在XCTestWD基础上实现一个server路由,外部命令时可引导启动app 并执行monkey

Monkey 命令收集相关 --追加Monkey自动化测试开源工具的更多相关文章

  1. monkey之monkey命令详解

    四大类-- 常用选项.事件选项.约束选项.调试选项 1.常用选项 --help:打印帮助信息 -v:指定打印信息的详细级别,一个-v增加一个级别 ,默认级别为 0 .用于指定反馈信息级别(信息级别就是 ...

  2. 移动测试基础—adb、monkey命令

    最近打算把移动测试相关的知识总结一下,先从基础开始吧,总结一下adb.monkey命令 adb常用命令总结 adb / adb -help 使用帮助 adb devices 查看连接到电脑的设备 ad ...

  3. monkey命令的基本使用

    看到monkey,你想到了什么?今天给大家分享下monkey命令的基本使用 monkey测试是Android平台自动化测试的一种手段,通过monkey程序模拟用户触摸屏幕,滑动.按键操作等操作对设备上 ...

  4. monkey命令

    介绍: monkey是一个命令行工具,可以运行在Android模拟器里或真实设备中.它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入.触摸屏输入.手势输入等),可以对待测的 ...

  5. monkey测试跑多个apk|monkey命令

    1.如何跑多个apk的monkey? 黑名单:执行除了黑名单中以外的apk: 白名单:只执行在白名单中的apk. 黑名单的设置方法: a.创建一个名称为blacklist的txt文档,在文件中输入应用 ...

  6. 利用谷歌开源工具cAdvisor 结合influxdb存储+Grafana前端展示进行Docker容器的监控

    一.Docker 监控方式 1.利用docker 的 docker stats API 命令: docker stats [容器ID/容器名称] [root@docker ~]# docker sta ...

  7. monkey命令详解

    标准的monkey 命令 adb shell monkey [options] <eventcount> 例如: adb shell monkey -v    产生500次随机事件,作用在 ...

  8. monkey 命令详解

    monkey命令详解   1.  $ adb shell monkey <event-count>                <event-count>是随机发送事件数 例 ...

  9. monkey命令解析详解

      我面试时遇到过几次让背个monkey命令的,可以这样简单说一个:adb shell monkey -p(约束包名) -s 200 -v -v --throttle 300 1500000 > ...

随机推荐

  1. ARP 欺骗攻击与防御

    <一> ARP攻防 理论 和 工具 工具: 01: Wireshark ( 抓包软件 )   02: P2P终结者 ( ARP欺骗工具 )   03: cain & abel  ( ...

  2. leetcode1017

    这道题目很巧妙,似乎是有些过于巧妙了,属于我未知领域的类型,把原作者的解决方案放这里.(看大家都在给差评,我也顺手给个差评吧--) 参考:https://leetcode.com/problems/c ...

  3. selenium报错

    Python 2.7.15 selenium 2.53.6 Firefox    47.0.1 pycharm 2017.3.7 # coding:utf-8 from selenium import ...

  4. 彻底关闭Windows Defender丨Win10

    关闭Windows Defender Win10正式版怎么关闭windows defender 首先关闭windows defender,因重启电脑后win10 会自动重启defender,所以需要禁 ...

  5. 前后台交互实现点击超链接通过指定的 url 去网络或者文件服务器下载文件

    前台 VUE 界面: <el-table-column prop="attachment" align="center" label="附件详情 ...

  6. linux下通过sed命令直接修改文件内容

    sed是实现对流的编辑.通常,我们使用sed可以实现内容的编辑后然后保存成另外的一个文件,如果正确的话,才写入到源文件.但是某些时候,我们需要直接修改文件,因为,保存文件到一个文件,然后再覆盖原文件的 ...

  7. Activity生命周期,切换,参数传递,bundle(包),值对象,Activity参数返回,Activity的启动模式

    Activity代表手机屏幕的一屏,或是平板电脑中的一个窗口.它是android应用中最重要的组成单元之一,提供了和用户交互的可视化界面.在一个Activity中,可以添加很多组件,这些组件负责具体的 ...

  8. 高德地图 API 计算两个城市之间的距离

    1. 目前在项目中,遇到一个需求不会做,就是要计算两个城市之间的距离,而这两个城市的输入是可变的,如果要使用数据库来先存储两地之间的距离,调用的时候再来调用,那么存数据的时候,要哭的,因为光是省级区域 ...

  9. swarm on ubuntu

    转自:https://www.cnblogs.com/jsonhc/p/7862518.html 由于在centos7系统上使用docker-machine安装的swarm实现服务的负载均衡一直失败, ...

  10. Visual Studio配置C/C++-PostgreSQL(9.6.3)开发环境(ZT)

    https://www.2cto.com/database/201707/658910.html 开发环境 Visual Studio 2017[15.2(26430.16)] PostgreSQL ...