官方介绍:

Monkeyrunner工具提供了一个API,用于编写可从Android代码外部控制Android设备或模拟器的程序。使用monkeyrunner,您可以编写一个Python程序来安装Android应用程序或测试包,运行它,向其发送击键,获取其用户界面的屏幕快照,并将屏幕快照存储在工作站上。Monkeyrunner工具主要用于在功能/框架级别测试应用程序和设备以及运行单元测试套件,但是您可以将其自由用于其他目的。

MonkeyRunner工具使用Jython,它是使用Java编程语言的Python实现。Jython允许Monkeyrunner API与Android框架轻松交互。使用Jython,您可以使用Python语法访问API的常量,类和方法。

MonkeyRunner功能

1.多设备控制:Monkeyrunner API可以在多个设备或仿真器上应用一个或多个测试套件。

2.功能测试:monkeyrunner可以运行Android应用程序的自动完成测试。您可以通过击键或触摸事件提供输入值,并将结果作为屏幕截图查看。

3.可扩展的自动化:由于Monkeyrunner是API工具包,因此您可以开发用于控制Android设备的基于Python的模块和程序的整个系统。

MonkeyRunner与monkey的区别

两者没有直接关系

MonkeyRunner:在工作站上通过API定义的特定命令和事件控制设备,可以智能截图进行对比,回溯详细的bug路径,相对比较灵活;

monkey:在设备上直接运行adb shell 命令生成随机的事件进行测试

MonkeyRunner环境搭建

  • 安装配置好jdk环境
  • 安装android-sdk
  • 安装python
  • 环境变量的配置     [路径]、Android-SDK\tools

安装成功后,在cmd中检测,输入monkeyrunner,有返回java jdk版本就安装成功

C:\Users\admin>monkeyrunner
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_31
>>>

MonkeyRunner  API

1.MonkeyRunner

2.MonkeyDevice

3.MonkeyImage

官方文档:https://www.android-doc.com/tools/help/monkeyrunner_concepts.html

1.MonkeyRunner类:

提供连接真机和模拟器、输入、暂停、警告框等方法。

常用方法(连接设备):waitForConnection(float timeout,string deviceid)

from com.android.monkeyrunner import MonkeyRunner as mr

device = mr.waitForConnection(5,'127.0.0.1:62001')

2.MonkeyDevice类

提供了安装和卸载程序包、开启Activity、发送按键和点击事件、运行测试包等方法

常用方法:

installPackage(pc端存放apk路径) 安装应用

removePackage(apk包名) 卸载应用

startActivity(package+'/'+activity) 启动应用

touch(integer x,integer y, integer type) x,y为坐标值,type(DOWN,UP,DOWN_AND_UP........)

drag(tuple start,tuple end,float duration,integer steps)拖拉控件  float duration拖动持续时间,默认为1s,integer steps拖动的步数默认为10

takeSnapshot()截屏

press(string keycode,dictionary type) 按键   keycode:KEYCODE_HOME、KEYCODE_BACK等等  type(DOWN,UP,DOWN_AND_UP........)

type(string message)输入字符

3.MonkeyImage类

sameAs(MonkeyImage other,float percent)图像对比,对比的相似度,结果boolean类型

writetoFile(string path,string format)图像保存

 运行一个淘宝登录实例.

这里用的是夜神模拟器,所以设置等待时间比较长,有条件的同学可以用真机调试

from com.android.monkeyrunner import MonkeyRunner as mr

from com.android.monkeyrunner import MonkeyDevice as md

from com.android.monkeyrunner import MonkeyImage as mi

print("launch connect")#连接设备
device = mr.waitForConnection(5,'127.0.0.1:62001')

if not device:
print("connect fail")

print("install package...")#安装应用
device.installPackage("E:/tao.apk")

print("startActivity")#启动app
device.startActivity(component='com.taobao.taobao/com.taobao.tao.welcome.Welcome')
mr.sleep(20)
print("start agree")#同意用户协议
device.touch(535.5,1273.3,'DOWN_AND_UP')
mr.sleep(15)

#进入我的界面

device.touch(965,1874,'DOWN_AND_UP')
mr.sleep(5)

#输入用户账号、密码

device.touch(175.8,370.4,'DOWN_AND_UP')
device.type('账号')
mr.sleep(2)

device.touch(155.8,501.7,'DOWN_AND_UP')
device.type('密码')
mr.sleep(2)

device.touch(521.5,644.7,'DOWN_AND_UP')

print("Snapshot...")#截图
result = device.takeSnapshot()
result.writeToFile('E:/test.png','png')

#按home键返回桌面

device.press('KEYCODE_HOME','DOWN_AND_UP')

print("remove package")#卸载应用
device.removePackage('com.taobao.taobao')

 相应的按键对应的名称如下:

home键:KEYCODE_HOME
back键:KEYCODE_BACK
send键:KEYCODE_CALL
end键:KEYCODE_ENDCALL
上导航键:KEYCODE_DPAD_UP
下导航键:KEYCODE_DPAD_DOWN
左导航:KEYCODE_DPAD_LEFT
右导航键:KEYCODE_DPAD_RIGHT
ok键:KEYCODE_DPAD_CENTER
上音量键:KEYCODE_VOLUME_UP
下音量键:KEYCODE_VOLUME_DOWN
power键:KEYCODE_POWER
camera键:KEYCODE_CAMERA
menu键:KEYCODE_MENU

MonkeyRunner的简介与综合实践的更多相关文章

  1. MonkeyRunner 综合实践

    综合实践 测试场景 连接设备,自动安装并启动考研帮app 启动后登录账号(账号zxw1234 密码:zxw123456),然后截图并保存到指定文件位置. 思路分析 连接设备 安装app 启动app 输 ...

  2. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  3. Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...

  4. Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...

  5. Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...

  6. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  7. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  8. MonkeyRunner API简介

    MonkeyRunner工具主要有三个类: MonkeyRunner MonkeyDevice MonkeyImage 官方API文档 :http://www.android-doc.com/tool ...

  9. 【三小时学会Kubernetes!(二) 】Kubernetes 简介及Pod实践

    Kubernetes 简介 我向你保证我没有夸大其词,读完本文你会问“为什么我们不称它为 Supernetes?” Kubernetes 是什么? 从容器启动微服务后,我们有一个问题,让我们通过如下问 ...

随机推荐

  1. ES 知识点

    一.ES基于_version 进行乐观锁并发控制 post /index/type/id/_update?retry_on_conflict=5&version=6 1.内部版本号 第一次创建 ...

  2. caoz的梦呓:创业公司如何做好信息安全

    猫宁!!! 参考链接:https://mp.weixin.qq.com/s/gCWjzHBRfbPFhNeg2VtFhA https://mp.weixin.qq.com/s/bmifCmD2CHV1 ...

  3. SQL注入之手工注入

    手工注入 用的是墨者学院的靶场:传送门 涉及以下数据库: MySQL.Access.SqlServer(MSSQL).SQLite.MongoDB.Db2(IBM).PostgreSQL.Sybase ...

  4. vue---EleElement UI 表格导出功能

    步骤一:安装依赖 安装依赖:npm install --save xlsx file-saver 步骤二:在放置需要导出功能的组件中引入相关组件 import FileSaver from 'file ...

  5. job创建之后,不运行

    创建job的时候要commit,然后还要看job是否分派进程 加上之后还是没有执行,后来发现 show parameter job_queue_process; 的结果为0,没有为job分配进程,所以 ...

  6. 多进程-Pool进程池

    from multiprocessing import Pool import os,time def Foo(i): time.sleep(2) print("in process&quo ...

  7. Codeforces 1190B. Tokitsukaze, CSL and Stone Game

    传送门 不妨把每一堆按照石头数量从小到大排序 注意到每次只能拿一个石头,那么不论何时每堆石头的排名都是一样的 那么最终所有堆的状态一定就是 $0,1,2,...,n-1$,现在每一堆最终的石头数量都确 ...

  8. Bash Plays with Functions CodeForces - 757E (积性函数dp)

    大意: 定义函数$f_r(n)$, $f_0(n)$为pq=n且gcd(p,q)=1的有序对(p,q)个数. $r \ge 1$时, $f_r(n)=\sum\limits_{uv=n}\frac{f ...

  9. easyui在table单元格中添加进度条

    function XR_jd(alue, rowData, rowIndex){ var value; ...... var htmlstr = '<div class="easyui ...

  10. JVM(6)之 二次标记

    开发十年,就只剩下这套架构体系了! >>>   上一章我们讲到了标记,但是不是被标记了就肯定会被回收呢?不知道小伙伴们记不记得Object类有一个finalize()方法,所有类都继 ...