一、什么是MonkeyRunner

monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。

二、MonkeyRunner工具同Monkey工具的差别

Monkey:

Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。

monkeyrunner:

monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。

三、MonkeyRunner的测试类型

1、多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。

2、 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。

3、 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。

4、 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。

四、运行MonkeyRunner

您可以直接使用一个代码文件运行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。

monkeyrunner的命令语法为:

monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

1. CMD对话框运行方式

如下图:

上图中,我们模拟了一次(160,450)的坐标点击和一次返回的按键点击,并分别截图:

如图可以看出,点击返回后,模拟器UI回到了主界面。

2.代码文件运行方式

(1)在$Android_Root\tools下新建一个monkeyrunnerprogram.py文件,里面内容为:

代码如下:

# Imports the monkeyrunner modules used by this program

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

# Connects to the current device, returning a MonkeyDevice object

device = MonkeyRunner.waitForConnection()

device.touch(160,450,"DOWN_AND_UP")

print "touch"

MonkeyRunner.sleep(1)

print "shoting... shot.png"

# Takes a screenshot

result = device.takeSnapshot()

filename = './shot.png'

# Writes the screenshot to a file

result.writeToFile(filename,'png')

print filename

MonkeyRunner.sleep(1)

# Do some tests

# Presses the Menu button

device.press('KEYCODE_BACK','DOWN_AND_UP')

print "press BACK"

print "shoting... shot.png"

# Takes a screenshot

result = device.takeSnapshot()

filename = './shot1.png'

# Writes the screenshot to a file

result.writeToFile(filename,'png')

print filename

MonkeyRunner.sleep(1)

(2)打开命令行,转到Android_Root\tools目录下,运行以下命令:

monkeyrunner monkeyrunnerprogram.py

可以达到和刚才相同的测试效果

五、MonkeyRunner详细用法

1. #导入模块;

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

2. #连接当前设备,并返回一个MonkeyDevice对象;

device = MonkeyRunner.waitForConnection()

if not device:

print "Please connect a device to start!"

else:

print "Start "

3. #安装Android包,注意,此方法返回的返回值为boolean,由此可以判断安装过程是否正常;

device.installPackage('myproject/bin/MyApplication.apk')

device.removePackage ('com.example.android.notepad')

print ('卸载成功')

device.installPackage('ApiDemos.apk')

print ('安装成功')

4. #启动一个Activity;

device.startActivity(component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')

5. #截图;

result = device.takeSnapshot()

result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')

6. #时延(秒);

MonkeyRunner.sleep(3)

7. #滑动屏幕;

for i in range(1,70):

device.drag((250,850),(250,110),0.1,10)

//开始,结束,持续时间,步骤

for i in range(1,70):

device.drag((250,110),(250,850),0.1,10)

MonkeyRunner.sleep(1)

8. #触击屏幕;

device.touch(507,72,"DOWN_AND_UP")

9. #执行adb shell命令;

device.shell("input text goup01")

按下HOME键

device.press('KEYCODE_HOME','DOWN_AND_UP')

按下BACK键

device.press('KEYCODE_BACK','DOWN_AND_UP')

按下下导航键

device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')

按下上导航键

device.press('KEYCODE_DPAD_UP','DOWN_AND_UP')

按下OK键

device.press('KEYCODE_DPAD_CENTER','DOWN_AND_UP')

相应的按键对应的名称如下:

home键:KEYCODE_HOME

back键:KEYCODE_BACK

send键:KEYCODE_CALL

end键:KEYCODE_ENDCALL

上导航键:KEYCODE_DPAD_UP

下导航键:KEYCODE_DPAD_DOWN

左导航:KEYCODE_DPAD_LEFT

右导航键:KEYCODE_DPAD_RIGHT

ok键:KEYCODE_DPAD_CENTER

上音量键:KEYCODE_VOLUME_UP

下音量键:KEYCODE_VOLUME_DOWN

power键:KEYCODE_POWER

camera键:KEYCODE_CAMERA

menu键:KEYCODE_MENU

Android 测试 之MonkeyRunner的更多相关文章

  1. 【Android测试】【第九节】MonkeyRunner—— 初识

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4836815.html 不得不说两句,过了这么久才再次更新博 ...

  2. [转] android自动化之MonkeyRunner测试环境配置(一)

    Android自动化测试之MonkeyRunner 一.Android自动化测试之环境搭建 1.1  Android-sdk介绍 ¢ SDK(Software development kit)软件开发 ...

  3. android自动化之MonkeyRunner测试环境配置(一)

    Android自动化测试之MonkeyRunner 一.Android自动化测试之环境搭建 1.1  Android-sdk介绍 ¢ SDK(Software development kit)软件开发 ...

  4. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  5. android自动化之monkeyrunner

    一.使用CMD命令打开模拟器 运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备. 1.1  用Elipse打开Android模拟器或在CMD中 ...

  6. 【Android测试】【随笔】获得App的包名和启动页Activity

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5157308.html 前言 经常看到一些刚刚接触Andro ...

  7. android 测试(转)

    个人接触android的时间也不是很长,稍微总结下在做Android测试的过程中,初次接触的同学需要些什么准备,以及需要些什么知识?下面讲到的东西可能很多人会觉得很简单,但我确实碰到过有新同学对这些点 ...

  8. 常见Android测试工具简介

    在进行android设备测试过程中,在进行系统测试时候,往往需要关注到很多方面,导致一个崩溃或者运行一段时间自动重启或者停止的问题很多.最简单来看,影响因素就有:底层硬件设备.OS层.上层app层.另 ...

  9. [转] android自动化测试之MonkeyRunner使用实例(三)

    一.使用CMD命令打开模拟器 运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备. 1.1  用Elipse打开Android模拟器或在CMD中 ...

随机推荐

  1. ThinkPHP5入门(三)----模型篇

    一.操作数据库 1.数据库连接配置 数据库默认的相关配置在项目的application\database.php中已经定义好. 只需要在模块的数据库配置文件中配置好当前模块需要连接的数据库的配置参数即 ...

  2. poj 2253 Frogger 最小瓶颈路(变形的最小生成树 prim算法解决(需要很好的理解prim))

    传送门: http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  3. PHP介绍(PHP入门1)

    BS架构和CS架构 B:Browser:浏览器 S:Server:服务器 C:Client:客户端 BS 浏览器和服务器的关系,通过浏览器来访问服务器,比如:百度.新浪... 优点:只要有浏览器就能访 ...

  4. CSS网页布局:盒子模型

    一.盒子模型 标准盒子模型(W3C盒子) 不论是标准盒模型还是IE盒子模型,都有content.padding.border.margin四个部分组成,但从上图也可以看出W3C盒子和IE盒子主要区别在 ...

  5. Selenium+Chrome或Firefox的动态爬虫程序

    新版本的Selenium不再支持PhantomJS了,请使用Chrome或Firefox的无头版本来替代.

  6. Windows10系统在VMware中安装CentOS7操作系统并实现图形化用户界面Gnome

    由于操作系统课程需要,我尝试在windows10环境下安装linux虚拟机,最终采用centOS7和Gnome图形用户界面,在安装和使用过程中出现一些问题,在这里将其记录下来,以便后续查阅. 第一部分 ...

  7. tp框架如何处理mysql先排序在分组

    $giModel = M('GroupIntegral'); $gi_table = $giModel->order('id desc')->limit('999')->buildS ...

  8. 如何使用yii2的缓存依赖特性

    目录 如何使用yii2的缓存依赖特性 概述 页面缓存 缓存依赖 链式依赖 总结 如何使用yii2的缓存依赖特性 概述 缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力.Yi ...

  9. VB错误说明

    1001 800A03E9 内存不足 1002 800A03EA 语法错误 1003 800A03EB 缺少“:” 1005 800A03ED 需要 '(' 1006 800A03EE 需要 ')' ...

  10. net core mysql 组件记录

    nuget 下 Pomelo.EntityFrameworkCore.MySql (据说是微软官方推荐) MySql.Data.EntityFrameworkCore (甲骨文出品) 使用方式等同于  ...