Monkey的简单介绍:

  1. Monkey是android系统自带的测试工具,他能运行在虚拟机和真机中。
  2. Monkey能向系统发送伪随机的用户事件流(像按键,触摸,手势操作等)进行模拟操作,实现对程序的压力测试。
  3. Monkey所产生的事件都是随机的,不会带有主观性。
  4. 用来测试安卓移动端App的健壮性和稳定性。

Monkey的简单使用:

搭建环境:

Android SDK环境:下载Android SDK,下载完成后,添加路径到Path。(步骤简单不会的自行百度)

下面是Android SDK下载地址:Android SDK下载地址。

Python环境:下载Python下载完成后一路next安装上就行了。

下面是Python下载地址:Python下载地址

配置好环境之后连接手机或者模拟器(注意要在连接电脑之前把usb调试打开),然后在cmd命令行输入adb  devices会出现一行手机唯一标志名。代表手机和电脑已经建立了软连接。

安装一个被测软件:

(命令行输入)adb install  App文件名.apk

卸载一个软件:

(命令行输入)adb.uninstall 包名   

发送各种测试指令:

  1. 发送压测指令

      adb shell monkey 1000 

    adb shell +工具名称+完成1000次指令(随机)                     一些提示信息: activityResuming (com.******) 代表这个程序从前台调入到后台再从后台回调到前台这个过程。     Events injected:1000            这个提示信息就代表完成了一千次操作,如果小于1000的话代表有错误,未执行1000次。

  2. 要给某个程序打压力,就要获取App包名。                                                                                                                           获取包名方法:
    (命令行输入)adb shell pm list package -f            (获取手机内所有程序的包名,包括系统程序)            (命令行输入)adb shell dumpsys window w | findstr \/ | findstr name=    (获取正在打开的程序的包名)注意空格要加齐了,没空格的地方不要乱加。

    输出的东西是:包名/Activity名。

  3. 给某一个程序打压力 :                     
    adb shell monkey -p 包名 -v  -v  -v 1000    (-v 代表输出信息级别,1000代表次数)
  4. 时间间隔参数--throttle  就是说在执行每个操作之间的时间间隔    :                                                                                     
    adb shell  monkey -p 包名  --throttle 500  -v -v -v 100         (延迟500毫秒执行一次,共执行100次)
  5. 打印输出的日志结果:                                                                                                                                                               
     adb shell  monkey -p 包名  --throttle 500  -v -v -v 100  > D:/monkey_log.txt        (延迟500毫秒执行一次,共执行100次 ,并且记录下日志结果打印到D盘下)             

然后我们看一下打印出来的结果。

首先我们能看到日志文件确实存在了。然后我们打开看一下。

这上边的提示是:

测试的seed值(因为是随机事件100次,所以seed值是随机的),这个seed值就是说如果我们此次测试出现问题下次用这个seed值就能复现。

count:测试各种事件总共的次数。

Include Category:测试包含的类别。

这个就是说测试了100次,sending rotation degree 未发现错误,下边的那些也是一样。

顺便说一下他主要测试的一些点。

我们知道seed是测试编号,下边的0-11就是这次测试都进行了什么事件。做了多少(按百分比)。

其他一些参数的使用:

  1. Seed :想要两次执行相同的操作,我们就要设置一个seed值:

     adb shell monkey -p  包名  -s 数字   次数      例如:  adb shell monkey -p 包名 -s 50 100
  2. 设置点击事件占总事件的百分比: 
     adb shell monkey -v -p 包名 --pct-touch 50 100 

    (解释一下:-v打印日志,-p测试哪个app, --pct-touch 50 点击事件占总事件的50%      100触发100次随机事件)             我在下边放一张图你就能直观看到其中含义,可以看到0事件触发概率是50%。

  3. 动作事件:   
    adb shell monkey -v -p 包名 --pct-motion 50 100        (由第二小点总结的理解第三小点并不难)

    如果想要约束两个或者三个事件一起执行的百分比,写法如下:

     adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 50 100(意思就是点击事件和动作事件的百分比各占50%)
  4. 轨迹球事件:

    adb shell monkey -v -p 包名 --pct-trackball 80 100     轨迹球事件占总事件的80%,总共执行100次
  5. 基本导航事件:
    adb shell monkey --pct-nav 80 100    基本导航事件(输入设备的上下左右)占总事件的80%,总共执行100次
  6. 主要导航事件:设定主要导航事件的百分比,兼容性中间键,返回键,菜单键                                                                        
    adb shell monkey  --pct-majornav 80 100     主要导航事件占总事件的80%,总共执行100次
  7. 系统导航事件:设定系统导航事件的百分比,HOME、BACK、拨号及音量键                                                       
    adb shell monkey --pct-syskeys 80 100     系统导航事件占总事件的80%,总共执行100次
  8. 启动Activity事件:
    adb shell monkey --pct-appswitch 80 100     启动Activity事件占总事件的80%,总共执行100次
  9. 不常用事件:
    adb shell monkey  --pct-anyevent 80 100     不常用事件占总事件的80%,总共执行100次
  10. 崩溃事件:设置一下,在系统跑崩溃之后还要继续执行。直到事件数跑够才停止。
    adb shell monkey --ignore-crashes <event-count>
  11. 超时事件:设置一下,在系超时之后还要继续执行。直到事件数跑够才停止。
    adb shell monkey --ignore-timeouts <event-count>

CRASH结果的析取:

实现步骤:安装一个能引发CRASH 的 App →执行压力测试命令(触发CRASH)→提取CRASH的Exception信息。

adb shell monkey -v -p 包名 --ignore-crashes 10000   //出现Crash后继续执行

ANR结果的析取:

实现步骤:安装一个能引发ANR的 App →执行压力测试命令(触发ANR)→提取ANR的Exception信息。

手动测试的时候出现ANR怎么获取Log信息:

adb shell
cd data/anr        //到anr目录下
ls                 //查看一下文件
more (tracts)文件名         //查看文件内容

执行Monkey脚本功能:

在测试过程中如果不使用脚本功能可能执行的事件是随机的。所以想要执行相同功能就要用到

Monkey Script:它的使用就先要把脚本传输到手机上

adb push d:\monkey.txt sdcard/monkey.txt 将文件发送到手机
格式:adb push 电脑路径文件 手机路径文件。

然后通过指令执行:

adb shell monkey -f <scriptfile> <event-count>

Monkey Script 的一些命令:

1 Dispatch Trackball 命令

轨迹球事件:
Dispatch Trackball(longdowntime,long eventide,int action,float x ,float y ,....)
action 0 代表按下 , 1 代表弹起 ,x,y代表坐标点。 

2 Dispatch Pointer 命令

点击事件:
Dispatch Pointer(longdowntime,long eventide,int action,float x ,float y ,....)
action 0 代表按下 , 1 代表弹起 ,x,y代表坐标点。 

3 Dispatch String命令

输入字符串事件
Dispatch String (String text)

4 Launch Activity 命令

启动应用
Launch Activity(package,Activity)(包名,活动页面名)

5 UserWait命令

等待事件
UserWait(1000)

6 Dispatch Press

按下键值
Dispatch Press (int keycode)     #keycode 66 回车键   ,不同的keycode 代表不同的键值

其他一些命令:


RotateScreen(rotationDegree, persist): 翻转屏幕,第一个参数是旋转角度,第二个是旋转后是否停在当前位置Tap(x, y) :单击事件,点击屏幕,参数是点击坐标Drag(xStart, yStart, xEnd, yEnd) :在屏幕上滑动,坐标是从哪一点滑到哪一点LongPress(): 长按2sProfileWait(): 等待5sPressAndHold(x, y, pressDuration) :模拟长按 PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟缩放RunCmd(cmd) :执行shell命令,比如截图 screencap -p /data/local/tmp/tmp.pngDispatchFlip(true/false) :打开或者关闭软键盘UserWait(sleepTime) :睡眠指定时间DeviceWakeUp() :唤醒屏幕

编写一个简单的浏览器搜索脚本:

编写步骤:
1 启动App
2 点击输入框
3 输入查询词
4 点击键盘回车键
5 点击搜索按钮
6 等待结果出现
7 点击清除按钮typ = user
count = 10
speed = 1.0
start data >>LaunchActivity(com.android.browser,com.android.browser.BrowserActivity)          //设置开启那个软件,哪个界面
UserWait(2000)                           //等待两秒
DispatchPointer(10,10,0,400,400,1,1,-1,1,1,0,0)       //设置按下输入框点击焦点
DispatchPointer(10,10,1,400,400,1,1,-1,1,1,0,0)       //设置抬起输入框点击焦点
DispatchString(test)                     //设置要搜索的文字
UserWait(1000)                           //等待一秒
DispatchPress(66)                        //点击回车键
UserWait(1000)                           //等待一秒
DispatchPointer(10,10,0,400,900,1,1,-1,1,1,0,0)       //设置按下搜索的点击焦点
DispatchPointer(10,10,1,400,900,1,1,-1,1,1,0,0)       //设置抬起搜索的点击焦点
UserWait(6000)                            //等待6秒
DispatchPointer(10,10,0,756,281,1,1,-1,1,1,0,0)       //设置按下输入框点击焦点
DispatchPointer(10,10,1,756,281,1,1,-1,1,1,0,0)       //设置抬起输入框点击焦点
UserWait(3000)                            //等待三秒

脚本编写完成以后想要运行这个脚本就要把此脚本放到手机中。那编写的脚本文件在电脑中怎么放到手机中呢?用如下命令

脚本名monkey.script   位置:D盘根目录下   想要放到手机中的位置: data/local/tmp 目录下命令行执行:adb push D:/monkey.script  /data/local/tmp/   

可以看到如下执行结果,代表文件已经成功导入到手机中。

导入成功后就要切换到手机目录下,用手机里的monkey去执行我们的monkey.script.脚本了操作步骤如下:

命令行输入:
adb shell             //切换到手机目录下
cd /data/local/tmp    //进入到我们存放脚本的目录
ls                   //查看目录下是否有我们已经导入的脚本,确认存在
monkey -f monkey.script 2          //执行monkey.script脚本执行两次

这里要注意,要确定app工程中设置了能被外部调起 android:exported = "true"。

MonkeyRunner

在运行monkeyrunner的时候可能会有踩到一些坑,我把坑总结了一下,如有monkeyrunner   无法启动的问题,脚本执行命令问题请查看——————MonkeyRunner无法正常运行

为了要满足更多的模拟操作我们就要用到monkeyRunner中的一些API

1、MonkeyRunner API - alert

警示框
代码段   void alert (string message ,stringtitle,string okTitle)    //正文内容,警告框的title ,按钮上的文字我们在编译器中编写如下代码#!/usr/bin/python#-*- UTF-8 -*-from com.android.monkeyrunner import MonkeyRunner  MonkeyRunner.alert('hello mook frends','this is title','OK')

执行结果:

2、MonkeyRunner API -waitForConnection

等待设备连接,有多个device id,需要指明具体哪个设备。waitForConnection(float timeout,string deviceid)

3、MonkeyDevice API -drag

拖动:drag(tuple start,tuple end,float duration,integer steps) (拖动起始点位置,拖动结束点位置,手势持续时间,插值点的步数,默认10)

4、MonkeyDevice API -press

按键
press(string keycode,dictionary type)(keycode(回车键66),动作类型Down、UP、DOWN_AND_UP(弹起,按下))

5、MonkeyDevice API - startActivity

启动应用startActivity(package+'/'+activity)

6、MonkeyDevice API -touch

touch(integer x,integer y,integer type)(x坐标值,y坐标值,type= DOWN,UP,DOWN_AND_UP)

7、MonkeyDevice API -type

输入
type(string message)
文本信息

8、MonkeyDevice API -takeSnapshot

截屏
MonkeyImage takeSnapshot()

9、Monkey Image API - sameAs

图像对比boolean sameAs (MonkeyImage other,float percent)
(文件名称,相似度百分比)

10、MonkeyImage API -writetoFile

保存图像文件void writeTOFile(string path,string format)
(保存文件的路径,保存文件的格式(JPG、PNG...))

综合:在输入框输入文字,并截图。

#!/usr/bin/python#-*- UTF-8 -*-#把要用到的模块导入到工程中
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage#连接手机(延迟多少秒,手机的devices号)
device = MonkeyRunner.waitForConnection(5,"emulator-5556")#要运行软件的包名和Activity名
device.startActivity("com.android.browser/com.android.browser.BrowserActivity")
#延迟两秒
MonkeyRunner.sleep(2)#按下输入文本框操作
device.touch(400,400,'DOWN_AND_UP')
#延迟一秒
MonkeyRunner.sleep(1)#输入文本
device.type('test')
#延迟一秒
MonkeyRunner.sleep(1)#按下回车键
device.press('66','DOWN_AND_UP')
#延迟一秒
MonkeyRunner.sleep(1)#点击搜索按钮
device.touch(400,900,'DOWN_AND_UP')
#延迟六秒
MonkeyRunner.sleep(6)#将执行后的界面截图,并保存到D盘下
result = device.takeSnapshot()
result.writeToFile('D:\TEST.png','png')

脚本文件如上,编写的时候不要添加中文。否则会出现编码错误的问题。

编好后,执行结果如下:

查看一下D盘下的文件:

到此为止,monkey的简单使用就介绍完了。

测试——Monkey测试的介绍及使用相关推荐

  1. 移动端测试Monkey测试

    Monkey测试 4.1. 参考资料 Android之Monkey全参数(包含隐藏参数)_北极的冰箱的博客-CSDN博客_android monkey 参数 4.2. Money介绍 顾名思义,Mon ...

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

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

  3. android测试-monkey测试

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

  4. 【Monkey测试】Monkey测试详解

    一.什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对应用程序客户端的稳定性测试: 通俗来说,Monkey 测试即" ...

  5. [原创]Android Monkey测试工具使用介绍

    [原创]Android Monkey测试工具使用介绍 1 Android Monkey介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件 ...

  6. monkey 测试介绍

    目录 前言 环境搭建 什么是Monkey Monkey 用来做什么 Monkey程序介绍 Monkey 架构 Monkey弱点 Monkey 参数大全 Monkey 命令 基本参数介绍 Monkey ...

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

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

  8. monkey测试_用 Instrumentation 改良 Monkey 工具实战

    作者:杭州城西费德勒 - 曾中华 这里 Monkey 不是猴子,而是 Android 系统中用来做自动化测试的工具,即盲点.压力测试. 在之前的移动端产品迭代中,Monkey 工具一直没有利用起来.开 ...

  9. Monkey测试简介

    在android手机上做自动化测试,monkey比cts,Android UnitTest 好用多了,他其实是继承与adb shell中的一段的shell指令. 一monkey测试的相关的原理 mon ...

最新文章

  1. windows 域环境应用---VNC远程协助工具的使用
  2. Javascript全局变量和delete
  3. oracle 12c 13姨
  4. ashx session 使用注意要点。
  5. 白话Elasticsearch31-深入聚合数据分析之bucket与metric
  6. 组件与组件之间的通信以及vue2.0中的变化、示例
  7. LoadRunner 12.02 安装教程及中文语言包安装
  8. luogu 1484\1792 种树 奇怪的贪心可反悔
  9. 《C++ Primer》7.1.2节练习(部分)
  10. 牛客网【每日一题】5月8日题目精讲 codeJan与旅行
  11. 双层板在哪层覆铜_PCB覆铜箔层压板分类和工艺解析
  12. Web.config的配置
  13. html 右边是iframe 左右结构_站点的内链优化和一些常用的结构优化方法
  14. Codeforce C. Bus
  15. 计算机系统结构概念,计算机系统结构的基本概念
  16. element-UI快速上手例子运行失败
  17. Hexo修改鼠标样式
  18. ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡
  19. Stata教程(二)---基本操作
  20. JavaScript -- 对象与原型链 [[Prototype]]

热门文章

  1. 怎么抵抗DDOS攻击?
  2. flask导入mysql数据库_flask 数据库报错
  3. 问题:C-Kermitc Sorry, you must SET LINE or SET HOST first
  4. android pc模拟器哪个好用,电脑手游安卓模拟器哪个好用流畅 好用的安卓模拟器...
  5. 语音控制Office,这个功能一定要体验
  6. [系统] Deepin系统常见问题解决(持续更新)
  7. 数字商品指南系列第三篇:编写智能合约并编译部署
  8. 使用html2canvas生成海报
  9. 如何根据小米12手机电池信息计算充电时间
  10. tig 使用_使用TIG监控机器