Monkeyrunner学习之五
2014-04-22 19:22
351 查看
MonkeyRunner是Google Android SDK下的一个工具,用于自动化测试Android程序。
Monkeyrunner工具提供了一套API,使用这些api写出的Python程序可以在黑盒地控制Android设置和模拟器。有了Monkeyrunner,我们可以通过python语句控制apk包的安装和卸载、启动app、向app发送各种动作指令、截取图片并保存。
Monkeyrunner和Monkey不同,Monkey是直接运行在adb shell中的命令,它随机的生成用户或者系统的各种随机事件,而MonkeyRunner则可以通过api来产生特定命令和事件来控制设备和模拟器。
MonkeyRunner在android测试中有下面特点:
支持多设备: API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用如adb这样的Android工具。
您还可以向monkeyrunner API中添加您自己的类。我们将在使用插件扩展monkeyrunner一节中对此进行详细讨论。
monkeyrunner工具使用Jython(使用Java编程语言的一种Python实现)。Jython允许monkeyrunnerAPI与Android框架轻松的进行交互。使用Jython,您可以使用Python语法来获取API中的常量、类以及方法。
下面是个monkeyrunner的代码样例,下面代码包含了,连接设备、安装apk包、启动程序、发送键盘指令、截图、保存截图。
其他详细信息可参加Android sdk文档,路径
Monkeyrunner工具提供了一套API,使用这些api写出的Python程序可以在黑盒地控制Android设置和模拟器。有了Monkeyrunner,我们可以通过python语句控制apk包的安装和卸载、启动app、向app发送各种动作指令、截取图片并保存。
Monkeyrunner和Monkey不同,Monkey是直接运行在adb shell中的命令,它随机的生成用户或者系统的各种随机事件,而MonkeyRunner则可以通过api来产生特定命令和事件来控制设备和模拟器。
MonkeyRunner在android测试中有下面特点:
支持多设备: API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用如adb这样的Android工具。
您还可以向monkeyrunner API中添加您自己的类。我们将在使用插件扩展monkeyrunner一节中对此进行详细讨论。
monkeyrunner工具使用Jython(使用Java编程语言的一种Python实现)。Jython允许monkeyrunnerAPI与Android框架轻松的进行交互。使用Jython,您可以使用Python语法来获取API中的常量、类以及方法。
一个简单的MONKEYRUNNER的例子
下面是个monkeyrunner的代码样例,下面代码包含了,连接设备、安装apk包、启动程序、发送键盘指令、截图、保存截图。# python引入monkeyRunner模块 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice # 连接设备, 获得一个MonkeyDevice对象 device = MonkeyRunner.waitForConnection() # 安装apk包. 返回值是boolean,可以判断是否安装成功 device.installPackage('myproject/bin/MyApplication.apk') # sets a variable with the package's internal name package = 'com.example.android.myapplication' # sets a variable with the name of an Activity in the package activity = 'com.example.android.myapplication.MainActivity' # sets the name of the component to start runComponent = package + '/' + activity # 启动应用程序 device.startActivity(component=runComponent) # 按下手机的菜单键 device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) # 截图 result = device.takeSnapshot() # 保存截图 result.writeToFile('myproject/shot1.png','png')
常用API
#需要引入的模块 from com.android.monkeyrunner import MonkeyRunner as mr from com.android.monkeyrunner import MonkeyDevice as md from com.android.monkeyrunner import MonkeyImage as mi #等待设备连接,30秒超时,后面是设备名称,该名称可以通过执行命令行`adb devices`获得 device = mr.waitForConnection(30,'123123135002735') #安装apk包 device.installPackage('d:/有道词典V4.0.3.apk'.decode('utf-8')) #卸载应用程序 device.removePackage('com.youdao.dict') #启动应用程序 device.startActivity(component='com.youdao.dict/.activity.DictSplashActivity') #等待程序加载,5秒 mr.sleep(5) #拖动操作,四个参数,前两个是初始点、结束点坐标,0.5是持续时间,1是步数 device.drag((550,500),(100,500), 0.5, 1) #触摸操作,三个参数,X坐标、Y坐标,触摸类型 device.touch(80, 1050, "DOWN_AND_UP") #截图并保存,注意如果名字中有中文,需要进行utf-8编码,否则乱码 now = time.strftime("%Y-%m-%d-%H-%M-%S") mainPageImage = device.takeSnapshot() mainPageImage.writeToFile("d:/"+"主页面截图".decode("utf-8")+now+".png", "png") #点击后退键,键盘码详情可以去查sdk帮助文档,路径:android-sdk-windows/docs/reference/android/view/KeyEvent.html device.press("KEYCODE_BACK", "DOWN_AND_UP") #将日志输出到外部文件,在python中使用中文,需要在文件开头将编码设置为utf-8,否则乱码 log = open('d:/monkenyLog.txt', 'w') log.write("等待手机连接...、\n") log.close() #截图比较,sameAs()第二个参数表示相似度,0表示完全不相似,1表示完全相同 imageTrue = mr.loadImageFromFile('d:/shot/true.png') if(imageTrue.sameAs(mainPageImage, 0.75)): log.write('截图比较成功\n') else: log.write('截图比较失败\n')
其他详细信息可参加Android sdk文档,路径
android-sdk-windows/docs/tools/help/monkeyrunner_concepts.html
转载链接:http://blog.csdn.net/u014555248/article/details/24005943
相关文章推荐
- Libcurl使用OpenSSL编译出现undefined reference to `COMP_CTX_free'错误备忘
- protobuf文件嵌套结构实例
- 第二学期第八周项目1--实现复数类中的运算符重载
- 使用OpenCV进行相机标定(基于OpenCV2.4.3)
- C++ 之Boost 实用工具类及简单使用
- C#:依据目录填充树视图
- Time类中运算符重载的改造
- Oracle数据库案例整理-Oracle系统运行时故障-断电导致数据文件状态变为RECOVER
- 使用protobuf定义消息
- BackBone.js之Router
- mysql5.5.15配置主从数据库
- Oracle数据库案例整理-Oracle系统运行时故障-无法释放已经结束的进程资源导致进程死锁
- 张国祥老师在上海讲授流程管理取得圆满成功
- sys 用户登录提示ora-01031权限不足 解决办法
- 返回值的第二个作用
- 最短路
- 基础数位DP小结
- Oracle数据库案例整理-Oracle系统运行时故障-sql_trace设置为TRUE导致Oracle根目录可用空间不足
- 在c++中尽量使用const,enmu,inline来代替#define
- 用TI CC2530DK开发时,用light swtich例子会遇到的一个问题和解决方案