monkey命令行测试
一、 什么是Monkey
monkey是google提供的一个用于稳定性与压力测试的命令行工具。monkey程序由android系统自带,位于/sdcard/system/framework/monkey.jar中。 Monkey tools在Android内只能针对Activity做测试,不能对service做测试。可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
二、 Monkey的特征
1、 测试的对象仅为应用程序包,有一定的局限性。
2、 Monky测试使用的事件流数据流是随机的,不能进行自定义。
3、 可对MonkeyTest的对象,事件数量,类型,频率等进行设置。
三、Monkey的基本用法
基本语法如下:
$ adb shell monkey [options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
1.monkey在pc端测试的方法:
>adb shell monkey [option] <count>
/* [option] 测试条件(下面会做详细说明)
* <count> 测试次数
*/
eg:adb shell monkey -v -v -v 500
-v -v -v 日志级别为level 2 日志的详细程度越来越详细
最高可添加3个 -v,500为测试的次数
2.保存monkey运行的日志
adb shell monkey 后边不带测试条件时默认指定所有包即所有应用程序。
2.1 保存在手机上
eg:adb shell monkey > /sdcard/monkey.txt
这里的sdcard指的是存储路径即手机内部存储。> 是追加符,即将打印的log追加到monkey.txt文本中
2.2 保存在电脑上
adb shell monkey > monkey.txt
monkey.txt保存在PC的当前目录下。
3.monkey查看包名
方法1: adb shell pm list package
方法1:adb shell ls /data/data/
两者区别在于前者不需要root,后者需要root.
4.monkey可指定应用包进行测试。
eg:adb shell monkey -p com.android.camera 500
-p 后边跟包名,这里可指定一个包或多个包,要指定多个包需要使用多个-p选项,每个-p选项只能用于一个包。
eg:adb shell monkey -p com.android.camera -p com.android.mms 500
Monkey test中只能指定activity属性的应用包进行测试,当出现指定的应用程序不是activity的时候,monkey会出现log提示如下并终止运行:
这里只显示最后一行
log:
**No activities found to run,monkey abortd.
备注:activity和service的区别,activity是android应用的核心概念,简而言之activity为用户交互管理者,有一个可视界面呈现,而service是在后台运行,没有界面呈现。
5.monkey的log分析 (android中常见的错误)
查找关键字crash,anr。
anr:
>在5秒内没有相应的事件(例如,按键按下,屏幕触摸);
>BroadcastReciever在10秒内没有执行完毕。
crash:
>异常停止
>异常退出
6.查看monkey进程
monkey 进程:adb shell ps | grep monkey
杀死monkey进程:adb shell kill monkey
eg:
sue@suepc:~$ adb shell ps | grep monkey
shell 23444 537 2029252 49604 futex_wait 7fb2834170 S com.android.commands.monkey
sue@suepc:~$ adb shell kill 23444
sue@suepc:~$
7、Monkey发送的事件类型和频率
--pct-appswitch <percent>
调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
--pct-anyevent <percent>
调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
--pct-touch <percent>
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。
--pct-motion <percent>
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)
--pct-trackball <percent>
整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
--pct-nav <percent>
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
--pct-syskeys <percent>
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
-p <允许执行的包名列表>
如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包
-c <意图的种类>
如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选 择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。
8.monkey常见的测试策略
8.1.对设置进行旋转压力测试
adb shell monkey -p com.android.settings --pct-rotation 50 --ignore-crashes --ignore-timeouts --ignore-native-crashes --ignore-security-exceptions -v -v -v 20000
8.2.对整机的应用开启测试
adb shell monkey --pct-appswitch 100 --throttle 5000 -v -v -v 100000
8.3.测试设置,触摸事件30%,其他按键50%,错误停止20%,延时200
adb shell monkey -p com.android.settings --pct-touch 30 --throttle 200 --pct-anyevent 50 -v -v 10000
8.4..测试设置,随机种子数为100,延时10 秒 ,忽略所有错误
adb shell monkey -p com.android.settings -s 100 --throttle 10 --randomize-throttle -ignore-crashes --ignore-timeouts --ignore-native-crashes --ignore-security-exceptions -v -v -v 20000
9.monkey 无activity启动
-p com.android.phone -c android.intent.category.DEFAULT
monkey命令行测试的更多相关文章
- Linux命令行测试网速speedtest.net
Linux命令行测试网速speedtest.net 当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为"最后一公里")的网络连接速度.在可用于测试宽带 ...
- I.MX6 Android CAN 命令行测试
/********************************************************************* * I.MX6 Android CAN 命令行测试 * 说 ...
- [转]使用Linux命令行测试网速
装speedtest-cli speedtest-cli是一个用Python编写的轻量级Linux命令行工具,在Python2.4至3.4版本下均可运行.它基于Speedtest.net的基础架构来测 ...
- 使用Linux命令行测试网速
安装speedtest speedtest是一个用Python编写的轻量级Linux命令行工具,在Python2.4至3.4版本下均可运行.它基于Speedtest.net的基础架构来测量网络的上/下 ...
- 使用Linux命令行测试网速-----speedtest-cli
https://github.com/sivel/speedtest-cli 当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为“最后一公里”)的网络连接速度.在可用于测 ...
- gtest命令行测试案例
使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便.同时,gtest也为我们提供了一系列的运行参数(环境变量.命令行参数或代码里指定),使得我们可以对案例的执行进行一些有效的 ...
- CDH spark 命令行测试
一. 参考 https://www.cnblogs.com/bovenson/p/5801536.html [root@node- test]# chown hdfs:hdfs /root/test/ ...
- Junit 命令行测试 报错:Could not find class 理解及解决方法
一.报错 : 『Could not find class』 下面给出三个示例比较,其中只有第一个是正确的. 1. MyComputer:bin marikobayashi$ java -cp .:./ ...
- laravel 命令行测试 Uncaught ReflectionException: Class config does not exist
require __DIR__ . '/vendor/autoload.php'; $app = require_once __DIR__ . '/bootstrap/app.php'; config ...
随机推荐
- 最大流入门题目 - poj 1273
Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...
- phpstorm配置git并解决Terminal 中文乱码(Unicode 编码)的方法
前言:在使用PHPstorm的时候,需要用到terminal,主要还是用这个操作git,但是在使用这个的时候会发现,代码里所有中文都是乱码状态,不利于使用,下面就来看看怎么解决这个问题 一.先在php ...
- 所有锁的unlock要放到try{}finally{}里,不然发生异常返回就丢了unlock了
所有锁的unlock要放到try{}finally{}里,不然发生异常返回就丢了unlock了
- 系列免费课程汇总(Java、单体应用、微服务、物联网、SaaS)
概述 2020年春节尽在眼前,又忙碌了一年的你一定有很多收获:是升职加薪,还是收获爱情?是买房置业,还是新添人口? 我在2019年的最大收获是:我的第二枚千金诞生,使我顺利加入富豪行列! 新年伊始我们 ...
- maven本地添加Oracle包
因为版权原因,Java后台连接数据库的ojdbc包并不可以用maven直接从网上下载导入,所以需要我们手动将其资源放在本地.下面是步骤: 1.找到Oracle ojdbc6包,拷贝到某备份目录2.包目 ...
- 聊一聊 InnoDB 引擎中的这些索引策略
在上一篇中,我们简单的介绍了一下 InnoDB 引擎的索引类型,这一篇我们继续学习 InnoDB 的索引,聊一聊索引策略,更好的利用好索引,提升数据库的性能,主要聊一聊覆盖索引.最左前缀原则.索引下推 ...
- typescript step by step interface class
- 优课堂考勤系统——Alpha发布1
一.作业描述 这个作业属于哪个课程 这个作业要求在哪里 团队名称 CTRL-IKun 这个作业的目标 在这个星期内完成团队项目α版本的第一次测试和发布,为发布下一次的 α版本做一个准备和前期检验 项目 ...
- 01-前言&WEB标准
人生苦短,要学就只学有用的 [前端教学-前言] 初识web开发 我们先来认识一下web前端 其实前端的工作,大体的概括就是:根据美工给的设计稿,变成web网页,使用后天的接口实现数据的渲染,要是高端一 ...
- selenium + PhantomJS使用时 PhantomJS报错解决
selenium + PhantomJS使用时 PhantomJS报错解决 在做动态网页爬虫时用到了selenium + PhantomJS,安装好之后运行时报错: UserWarning: Sele ...