当前位置: 首页 > news >正文

MonkeyRunner简介

monkeyrunner工具提供了编写控制Android设备或仿真器从Android的代码之外程序的API。随着monkeyrunner,您可以编写安装一个Android应用程序或测试包,运行它,发送击键它,需要它的用户界面截图,并将截图工作站上的Python程序。该monkeyrunner工具主要设计在功能/框架水平和运行单元测试套件来测试应用程序和设备,但你可以自由地将其用于其它用途。

monkeyrunner工具为Android的测试,这些独特的功能:

1.多设备控制:monkeyrunner API可以跨多个设备或仿真器应用一个或多个测试套件。您可以物理连接的所有设备或启动了所有的仿真器(或两者兼有)同时,连接到每一个轮流程序,然后运行一个或多个测试。您也可以启动一个模拟器配置编程,运行一个或多个测试,然后关闭模拟器。
2.功能测试:monkeyrunner可以运行Android应用程序的自动启动到完成测试。您提供的输入值与键盘或触摸事件,并查看结果的截图。
3.回归测试 - monkeyrunner可以运行一个应用程序,并比较其输出截图一组被称为是正确的截图测试应用程序的稳定性。
4.可扩展的自动化-由于monkeyrunner是一个API工具包,你可以开发基于Python模块和控制Android设备程序的整个系统。除了 ​​使用monkeyrunner API本身,你可以使用标准的Python OS和 子 模块的调用Android的工具,比如 Android的调试桥。

monkeyrunner 的三个模块

所述monkeyrunner API被包含在包中的三个模块 com.android.monkeyrunner:
1.MonkeyRunner:一类为monkeyrunner程序的实用方法。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它也提供了用于创建用户界面的monkeyrunner程序和用于显示内置帮助的方法。
2.MonkeyDevice:表示一个设备或模拟器。这个类提供了安装和卸载程序包,启动一个活动以及发送键盘或触摸事件到应用程序的方法。您也可以使用这个类来运行测试包。
3.MonkeyImage:表示一个屏幕捕获图像。这个类提供了捕捉屏幕,将位图图像,以各种不同的格式,比较两个MonkeyImage对象,写一个图像文件的方法。

1
2
3
4
#导入三个模块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

monkeyrunner的接入设备API

adb devices 命令可以获取设备对象的名称

1
2
3
#获取接入的设备,前面的为等待时间(s),后面正则或者设备的全名,返回一个device对象
#device=mr.WaitForConnection(1,'ss1z1')
device = mr.WaitForConnection()

安装apk

device.startActivity("package名/activity名")

1
device.installPackage( 'myproject/bin/MyApplication.apk' )

卸载,这应该是应用的包名

1
device.removePackage ( 'com.example.android.notepad' )

启动入口活动

1
device.startActivity (component = 'com.android.htccontacts/com.android.htccontacts.ContactsTabActivity' )

等待时间,秒

1
mr.sleep( 3 )

唤醒屏幕

1
mr.wake()

触摸屏幕,x,y坐标,触摸类型三种,UP,DOWN,DOWN_AND_UP

1
device.touch( 10 , 20 ,DOWN_AND_UP)

设备屏幕上模拟拖曳

用法:MonkeyDevice.drag(start,end,duration,steps)
start:拖曳开始坐标 - The starting point for the drag (a tuple (x,y) in pixels)
end:拖曳结束坐标点- The end point for the drag (a tuple (x,y) in pixels
duration:持续时间 - Duration of the drag in seconds (default is 1.0 seconds)
steps:拖曳步骤- The number of steps to take when interpolating points. (default is 10)

1
device.drag(( 472 , 1067 ),( 482 , 560 ))  

按键指令,前面为按键名称,如HOME键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
 
device.press( 'KEYCODE_HOME' , 'DOWN_AND_UP' )

  

输入一个字符串

device.type("你好")

获取monkeyrunner的帮助

1
device. help ()

获取设备系统环境变量的名称

1
device.getProperty()

重启设备

1
device.reboot()

一些图片的操作API

1
2
3
4
5
6
7
8
9
10
11
12
13
#获取截图
result1 = device.takeSnapshot()
#将结果输出到文件,前面为路径,后面为图片类型,可写可不写
result1.writeToFile( 'D:/demo1.png' , 'png' )
#两种写法都可以
result1.writeToFile( 'D:\\demo1.png' , 'png' )
#将当前图像转换为一个特定的格式并将其作为字符串返回,然后你可以访问的iterable二进制字节。
result.convertToBytes()
#图片的对比,先获取第二张截图
result2 = device.takeSnapshot()
result2.writeToFile( 'D:/demo2.png' , 'png' )
#判断图片相识度是否是为90%
if (result1.sameAs(result2, 0.9 )):

  

相关文章:

  • 百度编辑器取消高度自动拉长
  • View的layout机制
  • 免费 cdn
  • 利用js和JQuery定义一个导航条菜单
  • storm1.0节点间消息传递过久分析及调优
  • java api 调用es集群(1.7版本)
  • SQL Server 中WITH (NOLOCK)浅析
  • shiro权限认证与授权
  • 时间处理的一些代码片段
  • 自动化-----saltstack基础技术
  • 排序算法(java版)
  • 初学ArcGIS API for JavaScript
  • 倒排列表求交集算法汇总
  • BZOJ 4195: [Noi2015]程序自动分析 [并查集 离散化 | 种类并查集WA]
  • UIButton的titleLabel不同状态字体判断
  • JavaScript-如何实现克隆(clone)函数
  • EOS是什么
  • JavaScript类型识别
  • mongodb--安装和初步使用教程
  • sessionStorage和localStorage
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue实战(四)登录/注册页的实现
  • 记一次用 NodeJs 实现模拟登录的思路
  • 技术:超级实用的电脑小技巧
  • 坑!为什么View.startAnimation不起作用?
  • 码农张的Bug人生 - 初来乍到
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 小程序测试方案初探
  • 小而合理的前端理论:rscss和rsjs
  • 一个完整Java Web项目背后的密码
  • 硬币翻转问题,区间操作
  • 用Python写一份独特的元宵节祝福
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #{}和${}的区别?
  • #Linux(帮助手册)
  • (C++17) optional的使用
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十三)Flask之特殊装饰器详解
  • (转)ObjectiveC 深浅拷贝学习
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ******之网络***——物理***
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .Net Core 中间件验签
  • .Net Core和.Net Standard直观理解
  • .net 调用php,php 调用.net com组件 --
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET命令行(CLI)常用命令
  • @DataRedisTest测试redis从未如此丝滑
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成