Android自动化测试之Monkeyrunner学习笔记(一)
Android自动化测试之Monkeyrunner学习笔记(一)
因项目需要,开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括Monkey、Monkeyrunner、Athrun、appium,目前仍在了解学习android测试框架、CTS等。本文主要为前段时间学习总结,由于刚接触不久,故本文难免会有些肤浅,大神请绕走~
[目录]
1、Monkeyrunner简介
monkeyrunner即android SDK中自带的工具之一,此工具提供API可按制android设备或模拟器。
monkeyrunner提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。
monkeyrunner工具的主要目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
2、Monkeyrunner工具特性
多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
功能测试:monkeyrunner可以为一个应用自动化功能测试。为您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用如adb这样的Android工具。
官方原文描述请见:http://developer.android.com/tools/help/monkeyrunner_concepts.html
3、Monkeyrunner工具同Monkey工具的差别
Monkey:
Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。
Monkeyrunner:
Monkeyrunner工具是在工作站上通过API定义的特定命令和事件控制设备或模拟器。
4、运行Monkeyrunner
#引用导入API from com.android.monkeyrunner import <module>
运行monkeyrunner
命令语法为:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
方式一:在CMD命令窗口直接运行monkeyrunner
方式二:使用Python编写测试代码文件,在CMD中执行monkeyrunner Findyou.py运行
不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。
emulator -avd test
附:
问题:CMD运行提示monkeyrunner不是内部或外部命令,也不是可运行的程序或批处理文件。
解决:电脑环境变量未配置,将monkeyrunner所在目录配在环境变量里。
变量名:Path
变量值:D:\android\android-sdk-windows\tools;D:\android\android-sdk-windows\platform-tools
5、实例
实例一:卸载旧的APP,安装新的APP
*准备
a. 连接安卓真机设备
b. 运行CMD,检测是否连接成功
CMD>adb devices

附:
问题:CMD运行提示adb不是内部或外部命令,也不是可运行的程序或批处理文件。
解决:电脑环境变量未配置,将adb所在目录配在环境变量里。
*方式一:
1.打开CMD,运行monkeyrunner
2.进入monkeyrunner的shell命令交互模式后,逐条输入以下命令
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
device = MonkeyRunner.waitForConnection()
device.removePackage('cn.richinfo.thinkdrive')
device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
注:每条命令的作用,请见方法二中的注解
实操如图:

c.检查手机app是否已更新
*方式二:
a. 编写Python测试代码
# File: Test1.py
# Vision: V1.0
# Author: Findyou
# 引入本程序所用到的模块
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
# 连接手机设备
device = MonkeyRunner.waitForConnection()
# 截图
result = device.takeSnapshot()
# 将截图保存到文件
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')
# 卸载APP
device.removePackage('cn.richinfo.thinkdrive')
print ('Uninstall Success!')
# 暂停5秒
MonkeyRunner.sleep(5)
# 截图
result = device.takeSnapshot()
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_002.png','png')
# 安装新的APP
device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
print ('Install Success!')
# 截图
result = device.takeSnapshot()
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_003.png','png')
注:拷贝运行时请去掉中文注释;或者在开头加入 #coding=utf-8
b.执行Test1.py脚本
Monkeyrunner E:\JAVA\monkeyrunner\Test1\Test1.py
实操如图:

c.检查手机app是否已更新
6、学习笔记
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
#引入程序所用的模块,使用别名
from com.android.monkeyrunner import MonkeyRunner as mr from com.android.monkeyrunner import MonkeyDevice as md from com.android.monkeyrunner import MonkeyImage as mi #如果给导入的模块起了别名,就必须使用别名,否则会出现错误。 #比如连接设备或模拟器,起了以上别名后,命令应该如下: device=mr.waitForConnection()
#连接到设备或模拟器
#参数1:超时时间,单位秒,浮点数。默认是无限期地等待。 #参数2:串deviceid,指定的设备名称。默认为当前设备(手机优先,比如手机通过USB线连接到PC、其次为模拟器)。 #默认连接: device = MonkeyRunner.waitForConnection() #参数连接: device = MonkeyRunner.waitForConnection(1.0,'4df74b8XXXXXXX')
#向设备或模拟器安装APK
#以下两种方式都是对的
device.installPackage('E:/JAVA/monkeyrunner/Test1/ThinkDrive_new.apk')
device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
#参数可以为绝对路径,也可为相对路径
#卸载设备或模拟器中的APK
#参数为APK包名
device.removePackage('cn.richinfo.thinkdrive')
#device.startActivity(component="包名/启动Activity") #以下两种都OK device.startActivity(component="cn.richinfo.thinkdrive/cn.richinfo.thinkdrive.ui.activities.NavigateActivity") device.startActivity(component="cn.richinfo.thinkdrive/.ui.activities.NavigateActivity")
#手机截图
#获取设备的屏蔽缓冲区,产生了整个显示器的屏蔽捕获。(截图)
result=device.takeSnapshot()
#返回一个MonkeyImage对象(点阵图包装),我们可以用以下命令将图保存到文件
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')
#暂停
#暂停目前正在运行的程序指定的秒数 #MonkeyRunner.sleep(秒数,浮点数)
MonkeyRunner.sleep(5)
#device.type('字符串')
device.type('Findyou')
#锁屏后,屏幕关闭,可以用下命令唤醒 device.wake()
#重起手机
device.reboot()
#模拟滑动
#device.drag(X,Y,D,S) #X 开始坐标 #Y 结束坐标 #D 拖动持续时间(以秒为单位),默认1.0秒 #S 插值点时要采取的步骤。默认值是10 device.drag((100,1053),(520,1053),0.1,10)
#在指定位置发送触摸事件
#device.touch(x,y,触摸事件类型) #x,y的单位为像素 #触摸事件类型,请见下文中Findyou对device.press描述 device.touch(520,520,'DOWN_AND_UP')
#发送指定类型指定键码的事件
#device.press(参数1:键码,参数2:触摸事件类型) #参数1:见android.view.KeyEvent #参数2,如有TouchPressType()返回的类型-触摸事件类型,有三种。 #1、DOWN 发送一个DOWN事件。指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上。 #2、UP 发送一个UP事件。指定UP事件类型发送到设备,对应释放一个键或从屏幕上抬起。 #3、DOWN_AND_UP 发送一个DOWN事件,然后一个UP事件。对应于输入键或点击屏幕。
以上三种事件做为press()参数或touch()参数 #按下HOME键 device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP) #按下BACK键 device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP) #按下下导航键 device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP) #按下上导航键 device.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP) #按下OK键 device.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP)
KeyCode:
更多KeyCode http://developer.android.com/reference/android/view/KeyEvent.html
更多Monkeyrunner学习:http://developer.android.com/tools/help/monkeyrunner_concepts.html
Android自动化测试之Monkeyrunner学习笔记(一)的更多相关文章
- Android自动化测试之MonkeyRunner录制和回放脚本
Android自动化测试之MonkeyRunner录制和回放脚本(十一) 分类: 自动化测试 Android自动化 2013-02-22 10:57 7346人阅读 评论(2) 收藏 举报 andro ...
- Android自动化测试之Monkeyrunner使用方法及实例
目前Android SDK里自带的现成的测试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但其实是完完全全不同的两个工具,应用在不同的测试领域.总的来说,monkey ...
- Android自动化测试之MonkeyRunner
1.Monkeyrunner简介 Monkeyrunner是Android系统自带的四大自动化测试工具之一,其他三个是Monkey.CTS.Benchmark:Monkeyrunner需要通过Andr ...
- Android自动化测试之Monkeyrunner从零开始(三)
转自http://www.51testing.com/html/81/22381-854342.html 时光过得太快了,一晃离上一篇monkeyrunner系列的博客已经一年多了.这一年多时间经历了 ...
- [转] android自动化测试之MonkeyRunner使用实例(三)
一.使用CMD命令打开模拟器 运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备. 1.1 用Elipse打开Android模拟器或在CMD中 ...
- 【转】android自动化测试之MonkeyRunner使用实例(三)
一.使用CMD命令打开模拟器 运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备. 1.1 用Elipse打开Android模拟器或在CMD中 ...
- Android自动化测试之monkeyrunner工具
一.什么是monkeyrunner monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器.通过monkeyrunner,您可以 ...
- Android自动化测试之MonkeyRunner使用
MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制A ...
- Android自动化测试之Monkeyrunner从零开始
最近由于公司在组织一个Free CoDE的项目,也就是由大家自己选择研究方向来做一些自己感兴趣的研究.由于之前我学过一点点关于android的东西,并且目前android开发方兴未艾如火如荼,但自动化 ...
随机推荐
- LAMP自定义编译安装
httpd 2.4.4 + mysql-5.5.28 + php-5.4.13编译安装过程: 一.编译安装apache 1.解决依赖关系 httpd-2.4.4需要较新版本的apr和apr-util, ...
- ASP.NET 上传文件最大值调整
首先,最容易找到的是web.config下面配置: <!--maxRequestLength=50MB--> <httpRuntime targetFramework="4 ...
- JAVA学习博客---2015-6
JAVA核心技术卷一第一遍看得差不多了,应该是五月初开始看的,用了两个月的中午时间看完的,一共七百多页,接下来还是需要再看一遍,不懂的还是有很多. JAVA和C++一样是面向对象OOP的语言,不同于命 ...
- 开源库Magicodes.WeChat.SDK总体介绍
目录 1 概要 1 2 主要特点 2 3 架构图 8 3.1 构造器——WeChatSDKBuilder 8 3.2 函数管理器——WeChatF ...
- springrain 1.1 发布,spring 的极简封装
经过2个月的测试修改,springrain1.1已经稳定,今日发布. 主要改动如下: 1.添加批量更新和保存的方法 2.添加maven分支 3.添加博客管理的demo 4.增加redis做为缓存实现 ...
- 【腾讯Bugly干货分享】聊一聊微信“小程序”
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ecdf5ef03abecd43216fd0 Dev Club 是一个交流移动 ...
- java 多线程(daemon)
package com.example; public class App { public static void main(String[] args) { DoDaemon d1 = new D ...
- 团队项目——站立会议 DAY11
团队项目--站立会议 DAY11 团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱 今日(2016/5/20),站立会议已进行了两周时间,将这一周所遇到的问题和心 ...
- 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)
讲完了SSI,ESI,下面就要讲讲CSI了 ,CSI是浏览器端的动静整合方案,当我文章发表后有朋友就问我,CSI技术是不是就是通过ajax来加载数据啊,我当时的回答只是说你的理解有点片面,那么到底什么 ...
- Java集合List模拟“洗牌”操作
Collection工具类为操作List集合提供了几个有用的方法: reverse().shuffle().sort().swap().rotate(). 小例子: 使用shuffle(),方法模拟洗 ...