Android 自己主动化測试(3)<monkeyrunner> 依据ID查找对象&touch&type (python)
我在之前的两篇文章中用java来实现过 Android 自己主动化測试(1)怎样安装和卸载一个应用(java)、Android
自己主动化測试(2)依据ID查找对象(java)。 可是本质上都是用monkeyrunner相应的java lib 来实现的。可是相关的文档很少。假设真的要用monkeyrunner来做功能性的自己主动化測试。强烈还是推荐使用python语言
1、monkey runner
The monkeyrunner tool provides an API for writing programs that control an Android device or emulator from outside of Android code.
With monkeyrunner, you can write a Python program that installs an Android application or test package, runs it,
sends keystrokes to it, takes screenshots of its user interface, and stores screenshots on the workstation.
The monkeyrunner tool is primarily designed to test applications and devices at the functional/framework level and for running unit test suites,
but you are free to use it for other purposes.
monkeyrunner 工具提供了一个从Android源代码外部敲代码控制一个Android设备或者模拟器的API。
你能够用monkeyrunner写一个Python程序,来装一个Android应用和測试包。执行它,发key事件,截屏,存在本地。
monkeyrunner工具的设计起源于在功能/框架层面来測试应用和设备。和跑单元測试的測试套件
2、例子实现
2.1代码实现功能: 进入robot dream的页面mainActivity,找到id为center_image 的button发生点击事件,然后对弹出的对话框中再次找到id为button1的button,进行二次确认。
from com.android.monkeyrunner.easy import EasyMonkeyDevice, By
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice if __name__ == '__main__': import codecs
codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None) print ('test start')
device = MonkeyRunner.waitForConnection() easyMonkey = EasyMonkeyDevice(device)
print ('start robot dream mainActivity') device.shell('am start com.robot.dream/com.robot.dream.mainActivity') MonkeyRunner.sleep(3)
#easyMonkey.touch(MonkeyDevice.DOWN_AND_UP, By.id("id/center_image")); by = By.id("id/center_image");
print (by)
easyMonkey.touch(by,MonkeyDevice.DOWN_AND_UP) MonkeyRunner.sleep(3) hierachy_view = device.getHierarchyViewer()
print(hierachy_view) view_node = hierachy_view.findViewById('id/center_image')
items_node = view_node.children
print (len(view_node.children)) print ('touch 2')
easyMonkey.touch(by,MonkeyDevice.DOWN_AND_UP) MonkeyRunner.sleep(3) by2 = By.id('id/button1')
print (by2)
print (easyMonkey.visible(by2)) vn2 = hierachy_view.findViewById('id/button1')
print (dir(vn2))
print (getattr(vn2, 'name'))
print (vn2.id) easyMonkey.touch(by2, MonkeyDevice.DOWN_AND_UP) MonkeyRunner.sleep(3)
2.2 代码实现功能: 进入robot dream的登陆页面LoginActivity,依据id为login_account找到登陆编辑框TextEditor输入usernameabc, 依据id为login_pwd找到password编辑框TextEditor输入passwordabc123, 最后找到id为login_button的登陆按钮。成功登陆
from com.android.monkeyrunner.easy import EasyMonkeyDevice, By
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice if __name__ == '__main__':
import codecs
codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None) print ('test start')
device = MonkeyRunner.waitForConnection()
easyMonkey = EasyMonkeyDevice(device) print ('start login')
device.shell('am start com.robot.dream/com.robot.dream.LoginActivity') MonkeyRunner.sleep(3) by = By.id("id/login_account")
print (easyMonkey.visible(by))
easyMonkey.type(by,'abc')
MonkeyRunner.sleep(1)
device.press('KEYCODE_ENTER')
MonkeyRunner.sleep(1)
device.press('KEYCODE_BACK')
MonkeyRunner.sleep(1) by2 = By.id('id/login_pwd')
print (easyMonkey.visible(by2))
easyMonkey.type(by2,"abc123")
MonkeyRunner.sleep(1)
device.press('KEYCODE_ENTER')
MonkeyRunner.sleep(1)
device.press('KEYCODE_BACK')
MonkeyRunner.sleep(1) by3 = By.id('id/login_button')
print (easyMonkey.visible(by3))
easyMonkey.touch(by3,MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(1) device.press('KEYCODE_BACK')
3、总结:
使用monkeyrunner 使用id来查找控件。使用上EasyMonkeyDevice的Touch、Type等几个基本操作,就能够完毕非常多主要的功能性測试了。
使用monkeyrunner 的优点,測试程序执行的环境是真实的场景下的环境。
使用monkeyrunner的局限性,无法像单元測试那样通过Assert来进行功能校验。
4、后面会介绍些 Android monkeyrunner &Android UI Test &Android Code Coverage Test
Android 自己主动化測试(3)<monkeyrunner> 依据ID查找对象&touch&type (python)的更多相关文章
- Android自己主动化測试解决方式
如今,已经有大量的Android自己主动化測试架构或工具可供我们使用,当中包含:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolect ...
- Android自己主动化測试之Monkeyrunner用法及实例
眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monke ...
- 【金阳光測试】大话Android自己主动化測试--Android自己主动化系列(1)--金阳光于2013年4月份
Android自己主动化測试框架和工具在四年多的发展日趋成熟. 从五年前的第一代自己主动化架构演进到眼下第四代(本系列讲座第7篇后将具体剖析第三代和第四代自己主动化框架)从曾经最早谷歌推崇的monke ...
- Android 自己主动化測试之------ Monkey工具
尽管 一般公司都有专门的測试人员,可是有时候 免不了 我们既要去开发产品,也要去測试产品,測试产品.有些机械化的 点界面的操作,谷歌已经给我们提供了工具.Monkey, 猴子測试. 什么是Monkey ...
- Android自己主动化測试——CTS測试
一.为什么须要兼容性測试(下面称CTS)? 1.1.让APP提供更好的用户体验.用户能够选择很多其它的适合自己设备的APP.让APP更稳定. 1.2.让开发人员设计更高质量的APP. 1.3.通过CT ...
- 使用Adt自带的工具进行Android自己主动化測试(三)
在这个系列的上一篇文章中,我们介绍了MonkeyRunner,并提到假设依据坐标来编写自己主动化脚本的话存在着一定的局限性(点击文末"阅读原文"能够打开这篇文章查看).这篇文章将进 ...
- Android Monkey自己主动化測试
前言 假设你做Android开发,还没有使用过Monkey进行測试,那么今天看到这篇文章,希望能解决你Android測试中的一些问题.起码能帮你省点測试的时间而且发现很多其它的问题. Monkey简单 ...
- MAC中在eclipse luna上搭建移动平台自己主动化測试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
这几天由于原来在用的hp laptop的电池坏掉了,机器一不小心就断电.所以仅仅能花时间在自己的mackbook pro上又一次搭建整套环境.大家都知道搭建好开发环境是个非常琐碎须要耐心的事情,特别是 ...
- iOS自己主动化測试的那些干货
前言 假设有測试大佬发现内容不正确.欢迎指正,我会及时改动. 大多数的iOS App(没有持续集成)迭代流程是这种 也就是说.測试是公布之前的最后一道关卡.假设bug不能在測试中发现,那么bug 就会 ...
随机推荐
- Python实现简单的API接口
get方法 代码实现 # coding:utf-8 import json from urlparse import parse_qs from wsgiref.simple_ ...
- luogu P3383 【模板】线性筛素数
题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范围和查询的个数. 接下来M行每行 ...
- UI/GUI/UE/UX/ID/UED/UCD的区别
简述: UI (User Interface):用户界面 UE (User Experience):用户体验 ID (Interaction design):交互设计 UID (User Interf ...
- pat 素数对猜想
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素 ...
- Java解释执行和编译执行
以前有句话说:“Java是解释执行的 ” .现在看来确实不是很准确,至于原因,在此简略解释: 首先,我们先解释一下在Java中解释执行和编译执行的区别. 解释执行:将编译好的字节码一行一行地翻译为机器 ...
- String是最基本的数据类型吗?
不是, 基本数据类型包括:byte,short,int,long,float,double,boolean,char. 而String是类代表字符串,属于引用类型,所谓引用类型包括:类,接口,数组.. ...
- PAT甲级1045. Favorite Color Stripe
PAT甲级1045. Favorite Color Stripe 题意: 伊娃正在试图让自己的颜色条纹从一个给定的.她希望通过剪掉那些不必要的部分,将其余的部分缝合在一起,形成她最喜欢的颜色条纹,以保 ...
- VS2015启动拷贝过来的项目无法启动IIS Express
最近将VS2015开发的项目考给同事,告知无法启动,大概分析了一下原因: 1.查看端口是否占用冲突 2.在解决方案上右键选择,清理解决方案->重建解决方案 3.以上两个方法还不生效的话,在Web ...
- QTP 10 破解 之路
1.下载QTP 10 安装包 2.破解软件(mgn-mqt82.exe) (阿里云云主机里执行不了,一执行CPU就99%,也没有生成lservrc) 手动创建C:\Program Files (x8 ...
- IPC low/medium/high density 什么意思?
http://wiki.altium.com/pages/viewpage.action?pageId=3080344 Land Pattern Information Density Level A ...