Android测试-Monkey Test

article/2025/10/4 18:42:14

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

一、Monkey简介

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

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工具参数如下(图片来源):

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

(完)


http://chatgpt.dhexx.cn/article/onb3mDOX.shtml

相关文章

Monkey测试(一)

简介常见参数日志分析简单脚本编写 一&#xff1a;简介 Monkey测试是Android平台自动化测试的一种手段&#xff0c; 通过Monkey程序模拟用户触摸屏幕、滑动&#xff0c;Trackball&#xff08;轨迹球&#xff09;、按键等操作来对设备上的程序进行压力测试&#xff0c; 检测程序…

App之Monkey测试

作为初入测试行业的小白&#xff0c;了解一些Monkey测试是很有必要的&#xff0c;在此小编整理了一些App方面Monkey测试的基础以及Monkey脚本的编写&#xff0c;希望可以帮助到大家。 1. Monkey的概念 Monkey测试又称"猴子测试",是指没有测试经验的人对产品进行乱点…

随机测试 Monkey Test

今天说一说随机测试&#xff0c;Monkey Test。翻译成中文就是猴子测试。 你可以想象一只猴子趴在电脑面前&#xff0c;拿着鼠标随便乱点的样子。 一&#xff0c;什么是随机测试&#xff1f; 软件测试中的Monkey测试是测试人员对应用程序随机输入以验证其功能的一种方法。这是…

墨者学院-Bash漏洞分析溯源

Bash漏洞分析溯源 难易程度:★★ 题目类型:命令执行 使用工具:FireFox浏览器、wwwscan 1.打开靶场&#xff0c;根据题目思路找poc.cgi。 2.使用wwwscan扫一下 发现有目录/cgi-bin 3.打开burpsuite&#xff0c;访问/cgi-bin/poc.cgi&#xff0c;截包。 send to repeater&…

vulhub漏洞复现之bash(Shellshock CVE-2014-6271)

Shellshock 破壳漏洞 CVE-2014-6271 1.漏洞概述&#xff1a; GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞&#xff0c;向环境变量值内的函数定义后添加多余的字符串会触发此漏洞&#xff0c;攻击者可利用此漏洞改变或绕过环境限制&#xff0c;以执行shell命…

linux网站漏洞修复,CentOS Bash漏洞终极修复方法

目前已确认被成功利用的软件及系统&#xff1a;所有安装GNU bash 版本小于或者等于4.3的Linux操作系统。 【Bash漏洞描述】该漏洞源于你调用的bash shell之前创建的特殊的环境变量&#xff0c;这些变量可以包含代码&#xff0c;同时会被bash执行。 【漏洞检测方法】 在服务器命…

Bash漏洞分析溯源 cgi文件 (CVE-2014-6271) --墨者学院

01 背景介绍 Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令&#xff0c;在一些cgi脚本中&#xff0c;数据是通过环境变量来传递的&#xff0c;这样就会形成该漏洞&#xff1b; bash通过以函数名作为环境变量名&#xff0c;以“&#xff08;&#xff09;{…

suse linux bash漏洞,bash漏洞: CVE-2014-6271漏洞及紧急修复方法

最近linux的bash漏洞闹得沸沸扬扬&#xff0c;问题还是挺严重的&#xff0c;我这里提醒大家一下早日修复吧&#xff01; 如何验证 $ env x() { :;}; echo vulnerable bash -c echo hello 在终端中运行上面的命令&#xff0c;如果返回有vulnerable&#xff0c;就说明这台服务器中…

suse linux bash漏洞,Suse11 sp3 下Bash漏洞升级修复

SuSE Linux Enterprise Server 11Bash 漏洞修复方案 系统&#xff1a;Suse-11-sp3-64 Bash:bash-4.4 1.1. Bash升级 1.1.1升级概述 大部分现行Linux操作系统自带的版本比较陈旧&#xff0c;因此需要升级bash版本。 发现现在版本存在漏洞 1.1.2 安装介质 bash-4.4.tar.gz(官网最…

墨者Bash漏洞分析溯源题解

这个漏洞是看别人的思路解出来的&#xff0c;因为在打开页面后&#xff0c;我扫描不出来其他东西&#xff0c;惭愧 后台存在一个地址&#xff0c;是http://219.153.49.228:49581/cgi-bin/poc.cgi 访问这个地址 对着地址进行抓包 将user-agent进行修改&#xff0c;修改为() { …

Bash漏洞利用!

环境&#xff1a; 服务器Centos&#xff1a;192.168.195.130 攻击机bt5&#xff1a;192.168.195.130 1、找到漏洞利用程序 必须web服务器支持cgi 这里是测试的bug.sh代码 #!/bin/bash 第一行要特别注意&#xff01; echo "Content-type: text/html" echo "&q…

redhat linux bash 漏洞,GNU Bash 漏洞及修补方法

文章引自http://loosky.net/3036.html 漏洞描述 CVE-2014-6271 ***者可构造特殊的环境变量值&#xff0c;以在这些环境变量的值中包含特定的代码&#xff0c;当 Shell 对这些环境变量求值时&#xff0c;这些特定的代码将得以在系统中执行。某些服务和应用接受未经身份者提供的环…

linux 破壳漏洞,Bash破壳漏洞

“破壳”是一个严重漏洞的别名,在Red Hat、CentOS、Ubuntu、Fedora、Amazon Linux、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针…

linux系统漏洞补丁包,RedHat 5.X、6.X Bash漏洞RPM补丁包下载

RedHat 5.X、6.X Bash漏洞RPM补丁包下载及教程。 首先查看服务器的BASH版本号&#xff1a; bash -version 如果BASH版本是4.X的64位系统的话&#xff0c;安装bash-4.1.2-15.el6_5.2.x86_64文件夹里面的三个文件&#xff1b; 如果BASH版本是3.X的话&#xff0c;32位和64位分别安…

Linux Bash漏洞复现

Bash是什么&#xff1f; Bourne Again Shell&#xff08;简称BASH&#xff09;是在GNU/Linux上最流行的SHELL实现&#xff0c;于1980年诞生&#xff0c;经过了几十年的进化从一个简单的终端命令行解释器演变成了和GNU系统深度整合的多功能接口。根据维基百科的描述&#xff1a…

关于CentOS下Linux的bash 漏洞,查看和解决的方法

说明&#xff1a;我是今天才发现这个问题的&#xff0c;据说06年就就已经发现了&#xff0c;我才在才发现&#xff0c;后知后觉&#xff0c;如果不是遇到了&#xff0c;估计还没发现&#xff0c;我是个假的程序猿。。。 如果Shell版本较旧的话&#xff0c;建议升级到最新版本的…

墨者学院 - Bash漏洞分析溯源

bash漏洞技术层面分析 漏洞起源&#xff1a; 漏洞信息最早来源于国外知名漏洞网站exploit-db下的第34765篇漏洞报告&#xff0c;其中出现了一条验证命令&#xff1a; env x() { :;}; echo vulnerable bash -c "echo this is a test" 如果在一个含有版本号小于bash…

墨者 - Bash漏洞分析溯源

bash代码注入的安全漏洞分析 bash的环境变量 环境变量是操作系统运行shell中的变量&#xff0c;很多程序的运行需要获取系统的环境变量参数。具体赋值格式如下&#xff1a; $ var"hello world" 然后你就可以使用这个变量了,但是只是局部变量&#xff0c;即是当前进程…

墨者靶场 初级:Bash漏洞分析溯源

墨者靶场 初级&#xff1a;Bash漏洞分析溯源 题目背景介绍实训目标解题方向解题步骤 题目 背景介绍 安全工程师"墨者"对一单位业务系统进行授权测试&#xff0c;在测试过程中&#xff0c;发现存在bash命令执行漏洞。 实训目标 1、了解bash&#xff1b; 2、了解Bas…

Bash漏洞

1、漏洞的起因 这个漏洞的起因源自于Bash(Bourne Again SHell)的ENV指令 http://ss64.com/bash/env.html envDisplay, set, or remove environment variables, Run a command in a modified environment.Syntaxenv [OPTION]... [NAMEVALUE]... [COMMAND [ARGS]...]Options-u …