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

时间:2023-02-23 10:21:01

 ◆版权声明:本文出自胖喵~的博客,转载必须注明出处。

转载请注明出处:http://www.cnblogs.com/by-dream/p/4836815.html

不得不说两句,过了这么久才再次更新博客,主要原因是工作太忙,而且刚好又参与了很多业余活动,因此基本没时间去写,不过我还是决定坚持把我要写的东西全部写完,希望能够帮助到刚刚入门的测试者们。

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

前言


  本节讲解的内容是monkeyrunner,monkeyrunner和monkey同样都是谷歌研发的测试工具,相比monkey用来做压力测试而言,monkeyrunner更偏重于点触式的UI自动化内容,接下来我们看看详细的内容。

  同样附上文档地址,如果实在不愿意阅读,那就先看博客吧。http://www.android-doc.com/tools/help/monkeyrunner_concepts.html

简介


  monkeyrunner工具提供了API,使用这个API你可以通过写Android代码之外的程序来操作控制Android设备的。通过monkeyrunner,你可以通过写一个Python的程序来安装一个Android应用程序、运行该程序,给该程序发送键盘事件,截屏并且将截屏的内容保存在工作站中(workstation)。

  monkeyrunner这个工具设计的主要目的是进行功能测试/franmework层的测试,或者用于单元测试套件(unit test suites),当然你也可以*的使用它的其他用途。

  monkeyrunner和money没有什么直接的关系,monkey是在设备的直接运行adb shell命令来生成随机了事件来进行测试的。相比较而言,monkeyrunner则是通过API发送特定的命令和事件通过工作站来控制设备。

特性


  monkeyrunner为Android测试提供了以下特性:

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

  功能测试:monkeyrunner可以自动的启动Android程序直到完成测试,这期间你可以提供输入值和键盘操作已经触摸事件,然后通过截图来查看结果。

  回归测试(Regression testing ):monkeyrunner可以运行一个程序,将输出的截图与正确的结果截图相比较,依次来测试程序的稳定性。

  可扩展的自动化(Extensible automation):因为monkeyrunner是一个API工具包,你可以开发基于Python模块的整个系统来控制Android设备。除了使用monkeyrunner API本身,你还可以使用标准的Python OS和子模块的调用Android的工具,例如ADB。

  

  monkeyrunner工具用的语言是Jython,使用Java编程语言实现的Python。Jython 运行monkeyrunner的API和Android的框架可以非常便捷的进行交互,使用Jython,你可以使用Python语法来访问常量,类和API的方法。

实例


  这里我重新给个例子吧 谷歌给的有点不太直观 。 我们以QQ为例。

  1、进入到 ..\sdk\tools 的目录下,运行monkeyrunner

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

  2、引入monkeyrunner的包,输入 "from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice"  敲回车

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

  3、确保qq是关闭的,先运行“device = MonkeyRunner.waitForConnection()”,

     再运行 “device.startActivity(component="com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity") ”,此时可以看到qq被唤起了

    p.s. 如果知道一个任意App的启动页的Activity,请点这里

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

  4、模拟按下“菜单键” ,运行“device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)”

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

  5、截图,然后再把它保存到起来。

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

  6、去C盘下去看截图内容:

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

  

  这就是monkeyrunner最简单的命令行的方式来实现启动App,点击事件和截屏操作。

脚本


  当然上面的步骤我们可以将它写到脚本里,然后去运行这个脚本,前面提到脚本的语言是Python,所以我们就将以下代码写到一个Python脚本中。

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice # Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection() # Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
device.installPackage('/sdcard/qq.apk') # sets a variable with the package's internal name
package = 'com.tencent.mobileqq' # sets a variable with the name of an Activity in the package
activity = 'com.tencent.mobileqq.activity.SplashActivity' # sets the name of the component to start
runComponent = package + '/' + activity # Runs the component
device.startActivity(component=runComponent) # Presses the Menu button
MonkeyRunner.sleep(2)
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) # Takes a screenshot
MonkeyRunner.sleep(2)
result = device.takeSnapshot() # Writes the screenshot to a file
MonkeyRunner.sleep(2)
result.writeToFile('c:\shot1.png','png')

  

  将脚本内容保存到Python文件qq.py当中。

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

  将脚本放到monkeyrunner的同级目录下,直接运行“monkeyrunner qq.py”,就可以完成整个过程。

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

  学会了基本用法之后,你就可以根据你们自己的业务,结合monkeyrunner更加丰富的API写出更加复杂的脚本,通过这种方法来进行运行。

API


  提供一些常用的API(上面例子中不再赘述了)

  1、指定设备连接:

    等待连接到设备,与模拟器连接,返回monkeydevice对象,代表连接的设备。没有报错的话说明连接成功。
    参数1:超时时间,单位秒,浮点数。默认是无限期地等待。
    参数2:串deviceid,指定的设备名称。
    例子:device = mr.waitForConnection(1.0,'emulator-5554')

  2、运行shell命令:

    执行一个adb shell命令,如果有结果的话,返回结果
    例子:device.shell("...")

  3、唤醒设备:

    例子:device.wake()

  4、给指定位置发送触摸事件:

    参数1、2:屏幕的横纵坐标

    参数3:触摸事件(共三种):DOWN、UP、DOWN_AND_UP

    device.touch(x,y,TouchPressType)

    例子:device.touch(300,200,MonkeyDevice.DOWN_AND_UP)  在屏幕坐标300,200的地方按下并且抬起

  5、发送指定键的事件:

    参数1:http://developer.android.com/reference/android/view/KeyEvent.html 例如 KEYCODE_HOME(home键),KEYCODE_BACK (back键)

    参数2:触摸事件

    例子:device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP) 按下并抬起home键

  

  好!monkeyrunner的暂且到此为止,如有疑问,给我留言即可....

【Android测试】【第九节】MonkeyRunner—— 初识的更多相关文章

  1. android 测试 Monkey 和 MonkeyRunner 的使用

    一.Monkey的使用 Monkey使用起来比较简单,简而言之就是模拟手机点击效果,随机发送N个点击动作给手机,主要对于程序的稳定和承受压力的测试. 1.首先连接上你的手机或者启动模拟器: 2.运行C ...

  2. Python3 Selenium自动化web测试 ==> 第九节 WebDriver高级应用 -- 操作select 和 alert

    学习目的: 掌握页面常规元素的定位方法 场景: 网页正常的select元素下拉框常规方法和select专属方法 正式步骤: step1:常规思路select页面元素定位 处理HTML代码截图 # -* ...

  3. 【Android测试】【第十节】MonkeyRunner—— 录制回放

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4861693.html 前言 在实际项目进行过程中,频繁的需 ...

  4. 【Android测试】【第一节】ADB——初识和用法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/4630046.html 写在前面的话 感觉自己进入Andr ...

  5. 【Android测试】【第十七节】Instrumentation——App任你摆布(反射技术的引入)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/5569844.html 前言 学习了上节之后,大家是否已经 ...

  6. Android零基础入门第37节:初识ListView

    原文:Android零基础入门第37节:初识ListView 之前我们学习的一些UI组件都比较简单,但是在实际开发中,会经常遇见列表界面设计,如通讯录.电话列表.信息列表等.那么从本节开始来详细学习列 ...

  7. Android零基础入门第38节:初识Adapter

    原文:Android零基础入门第38节:初识Adapter 在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter. 一.了解MVC模式 在开始 ...

  8. 【Android测试】【第十五节】Instrumentation——官方译文

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482207.html 前言 前面介绍了不少Android ...

  9. 【Android测试】【第六节】Monkey——认识和使用

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4688880.html 自动化工具 接触安 ...

随机推荐

  1. struts2自定义类型转换器

    首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机 ...

  2. Django学习笔记(2)--视图函数

    用pycharm打开FDJ项目 URL分发器 视图: 视图一般都写在app的view,py中.并且视图的第一个参数永远都是request(一个HttpRequest)对象.这个对象存储了请求过来的所有 ...

  3. java 深度复制与浅复制 copyOf、arraycopy、copyOfRange

    1.copyOf 原型:public static <T> T[] copyOf(T[] original, int newLength) original:原数组 newLength:要 ...

  4. PHP日期格式化函数

    date函数 描述:格式化一个本地时间/日期 语法:string date(string format [,int timestamp]) format字符 说明 format字符 说明 Y 4位数字 ...

  5. Leetcode(一)两数之和

    1.两数之和 题目要求: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重 ...

  6. JSON Web Token(JWT)使用步骤说明

    在JSON Web Token(JWT)原理和用法介绍中,我们了解了JSON Web Token的原理和用法的基本介绍.本文我们着重讲一下其使用的步骤: 一.JWT基本使用 Gradle下依赖 : c ...

  7. 记录在tiny6410平台上采用4GSD卡来启动uboot和烧写nand flash uboot

    下面这种方法是从网上转的 没有验证 环境:ubuntu 13.04一.首先制作sd启动盘: 插入SD卡    sudo dd iflag=dsync oflag=dsync if=tiny210v2- ...

  8. mysql提示Fatal error&colon; Can&&num;39&semi;t open and lock privilege tables&colon; Table &&num;39&semi;mysql&period;host&&num;39&semi; doesn&&num;39&semi;t exist解决方法

    一次重启mysql发现无法启动成功,通过检查mysql日志发现问题并解决了问题. mysql启动失败的日志: [root@nn ~]# tail -n 20 /var/log/mysqld.log 1 ...

  9. ansible的携带密码访问

    author:head森  chen date: 2018-08-13  10:28:34 1,ansible的安装 yum -y install epel-release yum -y instal ...

  10. HTML5七巧板canvas绘图(复习)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...