APP开发过程中,开人员往往自己做一些功能测试和稳定性测试,使用MonkeyTest做压力测试是常用方法,及时修复ANR、CRASH提高项目组整体的开发效率。

一、Monkey简介

Monkey是一种命令行工具,这个工具存在于Android系统/system/framework/monkey.jar,Android设备/模拟器连接到PC后通过adb shell使用此工具,monkey测试流程如下。

因此两种方式使用monkey,第一种在PC端直接运行命令行:

adb shell monkey --[params]

第二种进入shell中使用:

adb shell> shell@android: monkey --[params]

二、基本使用

使用如下命令进行monkey测试:

adb shell monkey -p org.blackist.modulize --throttle 100 -v -v 100 > test.log
  • -p org.blackist.modulize:测试包名为org.blackist.modulize
  • –throttle 100:每100ms发送一次事件
  • -v -v:指定日志级别
  • > test.log:输出日志到文件

如下是monkey日志中测试到的ANR和CRASH:

Sleeping for 100 milliseconds
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
// CRASH: cn.edu.zstu.sdmp (pid 17698)
// Short Msg: java.lang.NullPointerException
// Long Msg: java.lang.NullPointerException: Attempt to invoke virtual method 'com.wuhenzhizao.titlebar.widget.CommonTitleBar cn.edu.zstu.sdmp.manage.view.ManageActivity.getCommonTitle()' on a null object reference
// Build Label: vivo/PD1603/PD1603:5.1.1/LMY47V/compiler07131528:user/release-keys
// Build Changelist: eng.compiler.20180713.152451
// Build Time: 1531466945000
// java.lang.NullPointerException: Attempt to invoke virtual method 'com.wuhenzhizao.titlebar.widget.CommonTitleBar cn.edu.zstu.sdmp.manage.view.ManageActivity.getCommonTitle()' on a null object reference
//      at cn.edu.zstu.sdmp.manage.view.repair.RepairDetailFragment.initView(RepairDetailFragment.java:153)
//      at cn.edu.zstu.sdmp.manage.view.repair.RepairDetailFragment.initViewAndData(RepairDetailFragment.java:113)
//      at cn.edu.zstu.sdmp.common.base.BaseFragment.onCreateView(BaseFragment.java:135)
//      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)
//      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
//      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)
//      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)
//      at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
//      at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
//      at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
//      at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
//      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
//      at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700)
//      at android.os.Handler.handleCallback(Handler.java:739)
//      at android.os.Handler.dispatchMessage(Handler.java:95)
//      at android.os.Looper.loop(Looper.java:135)
//      at android.app.ActivityThread.main(ActivityThread.java:5418)
//      at java.lang.reflect.Method.invoke(Native Method)
//      at java.lang.reflect.Method.invoke(Method.java:372)
//      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)
//      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
//
// NOT RESPONDING: cn.edu.zstu.sdmp (pid 17698)
ANR in cn.edu.zstu.sdmp (cn.edu.zstu.sdmp/.manage.view.ManageActivity)
PID: 17698
Reason: Input dispatching timed out (Waiting to send key event because the focused window has not finished processing all of the input events that were previously delivered to it.  Outbound queue length: 0.  Wait queue length: 1.)

可以清楚分析出错误所在的地方,所以monkey是个物美价廉的测试工具啊~

三、参数说明

monkey工具参数如下(图片来源):

3.1 基础参数

-p <允许的包名列表>

用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包, monkey将允许系统启动设备中的所有app。

指定一个包:adb shell monkey -p org.blackist.modulize 100

指定多个包:adb shell monkey -p org.blackist.modulize –p org.blackist.brouter 100

-v

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

Level 0 : adb shell monkey -p org.blackist.modulize -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

Level 1 : adb shell monkey -p org.blackist.modulize -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2 : adb shell monkey -p org.blackist.modulize -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息

一般来说,使用Level0即可。

-s (随机数种子)

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

monkey测试1:adb shell monkey -p org.blackist.modulize –s 101 100

monkey测试2:adb shell monkey -p org.blackist.modulize –s 101 100

这个参数其实比较重要,比如我们只看日志不容易确定错误位置,需要结合monkey的UI测试过程,这时需要执行相同的随机序列复现步骤。

–throttle (延时ms)

用亍指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快地生成和发送消息。 示例:

adb shell monkey -p org.blackist.modulize --throttle 3000 100

3.2 发送的事件类型

–pct-touch (点击事件)

参数percent为此事件的百分比,比如要求monkey完成10次点击事件:

adb shell monkey -p org.blackist.modulize -v --pct-touch 100 10

可以看到如下日志,Event percentages是事件百分比,点击事件100%,其余都是0:

:Monkey: seed=1552849997195 count=10
:AllowPackage: cn.edu.zstu.sdmp
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
//   0: 100.0%
//   1: 0.0%
//   2: 0.0%
//   3: 0.0%
//   4: -0.0%
//   5: 0.0%
//   6: 0.0%
//   7: 0.0%
//   8: 0.0%
//   9: 0.0%
//   10: 0.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=cn.edu.zstu.sdmp/.main.view.SplashActivity;end// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cn.edu.zstu.sdmp/.main.view.SplashActivity } in package cn.edu.zstu.sdmp

–pct-motion (动作事件)

–pct-trackball (轨迹球事件)

–pct-nav (基本导航事件,输入设备的上、下、左、右)

–pct-majornav (主要导航事件,兼容中间键,返回键,菜单按键)

–pct-syskeys (系统导航事件,HOME、BACK及拨号音量键)

–pct-appswitch (启动App事件)

–pct-anyevent (不常用事件)

–ignore-crashes (忽略崩溃事件 CRASH)

–ignore-timeouts (忽略超时事件 ANR)

日志分析

monkey test 执行后分析保存的日志,可以搜索CRASH、ANR、Exception等关键字查看错误信息,详细的日志分析参考http://www.cnblogs.com/wfh1988/archive/2010/11/16/1878224.html

参考

https://yuti.site/2019/03/02/MonkeyTesting/?tdsourcetag=s_pctim_aiomsg

https://www.cnblogs.com/TankXiao/p/4815134.html

https://blog.csdn.net/gzh0222/article/details/6631988

https://blog.csdn.net/viewsky11/article/details/53889143

https://www.cnblogs.com/TankXiao/p/4815134.html

https://blog.csdn.net/MTbaby/article/details/78792215

(完)

Android测试-Monkey Test相关推荐

  1. android测试-monkey测试

    文章目录 前言 一.为什么Monkey测试 二.什么是Monkey测试 三.如何做monkey测试 前言 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实 ...

  2. 行意天下正文 Android Day02-Android中单元测试(junit测试)monkey测试

    Android中junit测试有2种实现方式 第1种:一般Android工程的实现方式 1.在清单文件中添加2项内容 首先在AndroidManifest.xml中加入下面红色代码: <mani ...

  3. 【Android测试】【第二节】Monkey工具

    最近开始研究Android测试的Monkey工具,因接触时间很短,还有很多不足之处,希望能和大家多多交流. ● 什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或 ...

  4. android服务器压力测试,Android压力测试Monkey工具

    最近在Android程序测试过程中接触到了自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner其它test t ...

  5. android 回归测试,android测试:monkey使用方法

    android测试:monkey使用方法 Android Sdk给我们提供了Monkey和Monkeyrunner这两个自动化测试工具. 一.什么是Monkey Monkey是一个命令行工具,可以运行 ...

  6. Android软件测试Monkey测试工具

    前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.其 ...

  7. android之monkey测试

    本文同时发表于本人个人网站 www.yaoxiaowen.com monkey测试算是android自动化测试当中最简单的一种工具了.虽然简单,不过对于测试app的稳定健壮,减少崩溃还是比较有用的.所 ...

  8. Android测试能不能用monk,Android之monkey Test

    一.Monkey简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行 ...

  9. Android之monkey Test,Monkey测试中的黑名单和白名单,Monkey测试中的黑名单和白名单

    一.Monkey简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行 ...

  10. Android测试原理概述(一)

    翻译来源:http://developer.android.com/tools/testing/testing_android.html 1.   Testing http://developer.a ...

最新文章

  1. python如何写生日快乐说说_高逼格祝福朋友生日快乐的说说
  2. webapi控制器怎么接收json_一个秒杀系统的登录系统到底是怎么工作的
  3. 日常生活中怎样利用计算机的,数据存储与管理在日常生活中的三种方式
  4. 随笔汇总_索取资料请进入
  5. 疫情之下,将业务迁移至云端会是一个正确的选择吗?
  6. 联想Y 系列 四面壳展示
  7. 大于号小于号_一年级数学上册20以内填大于号小于号专项练习1000题!【有电子版】...
  8. 一个问题,被人问是否确定,千万不要随口回答确定
  9. 华硕笔记本电脑<举例:华硕玩家国度G752VS>启动时/重装系统后开机会自动进入BIOS界面?
  10. Linux使用ragel进行文本快速解析(下)
  11. excel合并两列内容_excel新手问题:怎么把两列数据合并到一起?用这个公式
  12. 专题方案 | 项目里程碑管理系统
  13. Excel同时打开两个窗口的方法
  14. 【解题报告】2014ACM/ICPC亚洲区广州站
  15. 企业资源计划-MPS计算(附详细解题步骤及计算过程)
  16. 制作OpenCV相机标定板棋盘格图像
  17. 手把手教你用数据分析帮女神学姐选婚房
  18. svn服务端删除版本库_删除SVN目录及从服务器端删除SVN版本库文件方法详解
  19. Linux 多线程开发(附有案例代码)
  20. RISC_V_外设篇_SPI

热门文章

  1. ws2_32.dll下载-ws2_32.dll调用失败如何修复
  2. HTML制作简易个人简历(表单)
  3. masm32环境配置
  4. VBA函数 find
  5. 前端开发【WEUI框架H5网页开发】—— WEUI+Node.js+fis3 项目开发
  6. MaxDEA如何计算超效率DEA
  7. 基于stc15f2k60s2芯片单片机编程(按键控制)
  8. 图解tcpip 第5版 pdf_现代实用气动技术 第2版 pdf下载 0776
  9. 批量复制或提取CAD中的说明文字为表格
  10. 用拼音输入法字典库实现同音字模糊查询