MonkeyRunner

本文介绍monkeyrunner工具的基本概念及其API组成部分,包括MonkeyRunner、MonkeyDevice和MonkeyImage三个核心模块。此外,文章还详细讲解了monkeyrunner与monkey的区别,并通过具体实例展示了如何使用monkeyrunner进行自动化测试,包括测试脚本的编写、记录和回放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android自动化测试框架:CTS、monkey、monkeyrunner、benchmark
什么是monkeyrunner

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

主要包括三个模块
1、MonkeyRunner:这个类提供了用于连接monkeyrunner和设备或模拟器的方法,它还提供了用于创建用户界面显示提供了方法。
2、MonkeyDevice:代表一个设备或模拟器。这个类为安装和卸载包、开启Activity、发送按键和触摸事件、运行测试包等提供了方法。
3、MonkeyImage:这个类提供了捕捉屏幕的方法。这个类为截图、将位图转换成各种格式、对比两个MonkeyImage对象、将image保存到文件等提供了方法。

注意:在运行monkeyrunner之前必须先运行相应的模拟器,否则monkeyrunner无法连接到设备
运行模拟器有两种方法:1、通过eclipse中执行模拟器 2、在CMD中通过命令调用模拟器

monkeyrunner同monkey的区别

Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器,它支持,自己编写插件,控制事件,随时截图,简而言之,任何你在模拟器/设备中能干的事情,MonkeyRunner都能干,而且还可以记录和回放。

实例

连接真机(模拟器),打开CMD,进入:E:\android-sdk-windows\tools文件夹内(里面有monkeyrunner.bat)

创建一个Python脚本文件:test.py,内容如下:

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice 
device=MonkeyRunner.waitForConnection()
device.startActivity(component="cn.waps.paydemo/cn.waps.paydemo.TestActivity")  

将test.py文件存放到monkeyrunner文件同一目录中 ,然后在命令行中执行:这里写图片描述
注意!如果monkeyrunner脚本文件要使用中文,记得格式保存为utf8,不然会ASCNII无法支持错误

monkeyRunner 的记录和回放

这才是真正实用的功能,直接看代码,创建一个test.py:

from com.android.monkeyrunner import MonkeyRunner as mr  
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder   
device = mr.waitForConnection()  
recorder.start(device)  

运行:monkeyrunner test.py ,这时会弹出这样的界面:
这里写图片描述
自己随心所以创建一些事件脚本,想做什么就可以做什么,通过MonkeyRecorder这个工具来操作设备界面,事件编辑完后选择Export Actions,导出到我们tools目录下命名为:action.mr,注:mr必须写上
然后需要制作一个运行这一系列动作的脚本:test_back.py,保存到tools目录下:

import sys  
from com.android.monkeyrunner import MonkeyRunner  
CMD_MAP = {  
    'TOUCH': lambda dev, arg: dev.touch(**arg),  
    'DRAG': lambda dev, arg: dev.drag(**arg),  
    'PRESS': lambda dev, arg: dev.press(**arg),  
    'TYPE': lambda dev, arg: dev.type(**arg),  
    'WAIT': lambda dev, arg: MonkeyRunner.sleep(**arg)  
    }  

# Process a single file for the specified device.  
def process_file(fp, device):  
    for line in fp:  
        (cmd, rest) = line.split('|')  
        try:  
            # Parse the pydict  
            rest = eval(rest)  
        except:  
            print 'unable to parse options'  
            continue  

        if cmd not in CMD_MAP:  
            print 'unknown command: ' + cmd  
            continue  

        CMD_MAP[cmd](device, rest)  


def main():  
    file = sys.argv[1]  
    fp = open(file, 'r')  

    device = MonkeyRunner.waitForConnection()  

    process_file(fp, device)  
    fp.close();  


if __name__ == '__main__':  
    main() 

然后执行:E:\android-sdk-windows\tools>monkeyrunner test_back.py action.mr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值