老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例

 

MonkeyRunner这个类可以说是编写monkeyrunner脚本的入口,因为这个类有一个很重要的方法watForConnection,它的作用就是去尝试去把monkeyrunner的后台和指定的设备建立好连接。只有连接上设备了,monkeyrunner才能驱动设备端的各种服务来操作被测应用。所以我们在编写monkeyrunner测试脚本的第一步往往就是去调用该方法来先建立好连接。

该方法接受两个参数,但用户可以填写,也可以不填写。第一个参数是以秒为单位的连接等待超时时长,默认不填写的话就是无限等待;第二个参数是设备id,该参数可以用正则表达式表示,默认不填写的话会指定第一个找到的设备。我们可以通过命令”adb devices -l”命令获得目标设备序列号:

图3-1-1 列出所有设备信息

该命令会列出所有连接上主机的安卓设备的基本信息,其中最左边的就是我们在找的设备id。大家应该有注意到上图所列出来的设备有两个,且他们的形式有很大的差别。这是因为通过adb连接设备的方式有两种,其中一种是直接通过usb协议来进行连接,一旦设备连接上主机就可以同通过该命令把设备给列出来;另外一种就是通过tcp来指定目标安卓机器的ip地址进行连接,用户需要执行”adb connect ip”来把地址为ip的设备给连接上主机,然后通过前面的命令就可以把设备列出来了。如果是用usb协议直接连接的话,列出来的设备id等同于设备的序列号,如果是通过tcp协议连接上来的话,列出来的设备id的格式是”ip:port”,其中ip就是目标设备的ip地址,port就是目标设备adbd的监听端口。

当然,MonkeyRunner这个类除了最关键的waitForConnection之外还有很多其他方法,且waitForConnection和这些方法一样都是静态方法,所以用户不需要去实例化MonkeyRunner就能直接使用这些方法。

本节我们会通过一个代码示例来看下在monkeyrunner脚本中应该如何调用waitForConnection方法来连接上设备的。该代码做的目标很简单,就是连接上设备后把该该目标安卓设备的序列号给打印出来。

该示例代码中除了会使用MonkeyRunner的waitForConnection方法外,还会用到它的一个alert方法来在连接失败的时候给用户弹出一个提示框,并且为了确定连接上的设备确实是我们想要的目标设备,还会调用下一节描述的MonkeyDevice的getSystemProperty方法来获得设备序列号并打印出来,以下把用到的这些方法的使用列出如下给大家参考:

表格3-1-1 示例代码所用关键方法列表

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice

DEVICEID = "192.168.1.102:5555"
TIMEOUT = 30

try:
#Connect to specific device
device = 
MonkeyRunner.waitForConnection(TIMEOUT,DEVICEID)

#Sleep 3 seconds
MonkeyRunner.sleep(3)

print device.getSystemProperty("ro.serialno")
except:
MonkeyRunner.alert("Faield to connect to device","Exception occurs","OK")

由于这是我们的第一个脚本示例,所以这里我们会逐行对代码进行解析:

  • 第1行: 从monkeyrunner.jar库的com.android.monkeyrunner这个包引入MonkeyRunner和MonkeyDevice这两个类,因为测试脚本使用的是jython语言编写,所以可以调用java编写的库。有了这两个
  • 图3-1-3 输出结果-成功获得序列号类,主要是有了MonkeyRunner这个类后,我们就可以连接上设备了
  • 第3-4行:定义调用MonkeyRunner的waitForConnection方法时需要两个参数,目标安卓机器的id和连接等待超时
  • 第8行:把超时等待时长和目标设备id作为参数调用MonkeyRunner的waitForConnection方法,注意该方法成功后会返回MonkeyDevice的实例
  • 第11行:调用MonkeyRunner的sleep方法来让测试用例先等待3秒钟,以防设备没有完全准备好
  • 第13行:调用MonkeyDevice实例的getSystemProperty方法取得目标安卓设备的序列号,并打印出来
  • 第14-15行:如果连接waitForConnection连接目标安卓设备失败的话会抛出异常,这两行的目的就是把异常捕捉到并调用MonkeyRunner的alert方法在主机端弹出一个弹出框来提醒用户

编写好测试用例后就可以调出monkeyrunner命令来将该jython脚本给跑起来了。下面是成功获得序列号后的输出结果:

示例代码如下:

代码3-1-1 MonkeyRunner - waitForConnection示例

图3-1-3 输出结果-成功获得序列号

如果连接设备失败,比如设备id没有找到的话,脚本会弹出一个提示框来告诉用户连接目标设备失败相关的信息:

图3-1-4 连接设备失败弹出框

老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例的更多相关文章

  1. 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

    老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...

  2. 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

    老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态   poptest是国内唯一 ...

  3. 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer

    老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer   poptest是国内唯一一家培养 ...

  4. 老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化

    老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...

  5. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

    老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述   HierarchyViewer库的引入让M ...

  6. 老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

    老李推荐:第14章1节<MonkeyRunner源码剖析> HierarchyViewer实现原理-面向控件编程VS面向坐标编程   poptest是国内唯一一家培养测试开发工程师的培训机 ...

  7. 老李推荐:第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结

    老李推荐:第8章7节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-小结   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...

  8. 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

    老李推荐:第8章5节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行测试脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化 ...

  9. 老李推荐:第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结

    老李推荐:第6章8节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-小结   本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事 ...

  10. 老李推荐:第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化

    老李推荐:第8章1节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行环境初始化   首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目 ...

随机推荐

  1. BZOJ 1835: [ZJOI2010]base 基站选址(DP,线段树)

    可以很容易的写出dp方程: F[i][j]=min(F[l][j-1]+w[l][i])+c[i] (w[i][j]是从l+1到i-1这些点p里,所有满足d[p]+s[p]<d[i] & ...

  2. 做一款直播类app

    ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...

  3. Cocos2dx热更新遇到的那些坑

    1.Cocos2dx热更新因为文件名含有空格,ios下载失败bug修改 问题描述: 项目中偶尔遇到美术图片命名时不规范,导致图片名字含有空格.导致ios热更新时,遇到下载失败. 解决方案: 1.从新改 ...

  4. 在Azure上部署带有GPU的深度学习虚拟机

    1. 登录https://portal.azure.com 2. 点击"+创建",在弹出的页面搜索"deep learning toolkit for the DSVM& ...

  5. iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  6. JS中一些常用的内置对象

    在JS中,经常会遇到明明知道一个对象有某个属性或方法,可是又不知道怎么写的情况.下面,我就罗列了一些JS中常用的内置对象的属性和方法. Math对象: Math对象的作用是执行常见的算术任务. 首先M ...

  7. [HDU1232] 畅通工程 (并查集 or 连通分量)

    Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M:随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的 ...

  8. 彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇)

    本文同步自我的个人博客: http://mly-zju.github.io/ 众所周知javascript语言的一大特色就是异步,这既是它的优点,同时在某些情况下也带来了一些的问题.最大的问题之一,就 ...

  9. inline元素的margin与padding

    替换元素与非替换元素 替换元素(replaced element):所谓替换元素就是浏览器根据元素的标签和属性,来决定元素具体显示什么内容.比如说:img标签的src属性的值用来读取图片信息并且显示出 ...

  10. 前端资讯周报 3.6 - 3.12: 对学习Javascript最有帮助的三本书,以及HTML标题的迷思

    每周一我都会分享上一周我订阅的技术站点中,和解决问题的过程中阅读到的值得分享的文章. 毕竟个人的阅读量有限,也欢迎大家留言或者私信给我你们阅读到的,对你们前端技术有帮助的任何内容,题材不限,语言不限. ...