• 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例(原创)


    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息。

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

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

    图3-1-1 列出所有设备信息 
    图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 示例代码所用关键方法列表 
    表格3-1-1 示例代码所用关键方法列表

    示例代码如下:

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

    1 from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
      2 
      3 DEVICEID = "192.168.1.102:5555"
      4 TIMEOUT = 30
      5 
      6 try:
      7     #Connect to specific device
      8     device = 
            MonkeyRunner.waitForConnection(TIMEOUT,DEVICEID)
      9 
     10     #Sleep 3 seconds
     11     MonkeyRunner.sleep(3)
     12 
     13     print device.getSystemProperty("ro.serialno")
     14 except:
     15     MonkeyRunner.alert("Faield to connect to device","Exception occurs","OK")

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

    • 第1行: 从monkeyrunner.jar库的com.android.monkeyrunner这个包引入MonkeyRunner和MonkeyDevice这两个类,因为测试脚本使用的是jython语言编写,所以可以调用java编写的库。有了这两个类,主要是有了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-3 输出结果-成功获得序列号 
    图3-1-3  输出结果-成功获得序列号

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

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

    ——— 未完待续———


    作者:天地会珠海分舵 
    微信公众号:TechGoGoGo 
    微博:http://weibo.com/techgogogo 
    CSDN:http://blog.csdn.net/zhubaitian

  • 相关阅读:
    第01组 Alpha冲刺(2/6)
    第01组 Alpha冲刺(1/6)
    第08组 Alpha冲刺(6/6)
    2019 SDN上机第4次作业
    第08组 Alpha冲刺(5/6)
    2019 SDN阅读作业
    2019 SDN上机第3次作业
    第08组 Alpha冲刺(4/6)
    第08组 Alpha冲刺(3/6)
    第08组 Alpha冲刺(2/6)
  • 原文地址:https://www.cnblogs.com/techgogogo/p/4346346.html
Copyright © 2020-2023  润新知