Android自动化测试基础知识——Monkey Runner
目录
Monkey Runner
monkeyrunner引入
MonkeyRunner类
MonkeyDevice类
MonkeyImage类
录制回放功能----隐藏功能
Easy Monkey Device——隐藏功能
Monkey Runner
安装环境:JDK SDK Python Pycharm monkeyrunner环境变量配置
配置环境变量
dos命令窗口下输入monkeyrunner 遇到问题
SWT folder '..\framework\x86_64' does not exist.Please set ANDROID_SWT to po修改monkeyrunner.bat.set frameworkdir=lib (纠正)==》set frameworkdir=..\lib
.Dcom.android.monkeyrunner.bindir=..\framework -jar %jarpath% %* (纠正)==》-Dcom.android.monkeyrunner.bindir=..\..\platform-tools -jar %jarpath% %*
monkeyrunner引入
1. monkeyrunner简介
monkeyrunner工具是使用Jython(Java编程语言实现的python)写出来的,它提供了多个API,
通过monkeyrunner API可以写一个Python程序来模拟操控Android设备中的app,
测试其稳定性并通过截屏记录出现的问题
monkeyrunner工具提供了一个API用于编写程序,实现从Android代码之外控制Android设备or模拟器。通过monkeyrunner,可以编写一个Python程序,用于安装Android应用程序or测试包,运行并向它发送按键事件,截取用户界面的截图并存储在工作区上。monkeyrunner工具主要涉及用于在功能or框架级别测试应用程序和设备,以及运行单元测试套件
2. monkeyrunner功能
(1)多设备控制:API可跨多个设备,一次启动全部模拟器来实施测试套件
(2)功能测试:为应用自动执行一次功能测试,然后观察输出结果的截屏
(3)可扩展自动化:monkeyrunner是一个API工具包,可以开发基于Python模块的整个系统来控制Android设备
3. monkeyrunner与monkey区别
monkeyrunner与monkey没有直接关系,monkey是在设备直接运行adb shell命令生成随机事件来进行测试的;而monkeyrunner则是通过API发送特定的命令和事件来控制设备
MonkeyRunner类
来源: https://developer.android.google.cn/studio/test/monkeyrunner/MonkeyRunner?hl=zh_cn
方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
alert (string message, string title, string okTitle)
针对运行当前程序的进程显示一个提醒对话框。 |
||||||||||
integer |
choice (string message, iterable choices, string title)
显示一个对话框,其中列出了针对运行当前程序的进程的选项。 |
||||||||||
void |
help (string format)
使用指定格式以类似于 Python 的 |
||||||||||
string |
input (string message, string initialValue, string title, string okTitle, string cancelTitle)
显示一个接受输入的对话框。 |
||||||||||
void |
sleep (float seconds)
将当前程序暂停指定的秒数。 |
||||||||||
MonkeyDevice
|
waitForConnection (float timeout, string deviceId)
尝试在 |
提供连接真机和模拟器、输入、暂停、警告等方法
alert()
:警告框
choice()
:选项列表框
help()
:API帮助文档
input()
:输入
sleep()
:暂停
waitFor Connection()
:等待设备连接
常用方法:
waitForConnection(float timeout,string deviceid)
timeout:超时时间限制
devices:具体连接的设备
# 导入MonkeyRunner类,并创建别名
from com.android.monkeyrunner import MonkeyRunner as mr
print("connect devices...")
# 通过MonkeyRunner类调用其下的等待连接设备方法
device=mr.waitForConnection()
# device=mr.waitForConnection(5,127.0.0.1:62001)
MonkeyDevice类
来源: https://developer.android.google.cn/studio/test/monkeyrunner/MonkeyDevice?hl=zh_cn
方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
broadcastIntent (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, iterable flags)
向此设备广播 Intent,就像 Intent 来自应用一样。 |
||||||||||
void |
drag (tuple start, tuple end, float duration, integer steps)
在此设备的屏幕上模拟拖动手势(轻触、按住和移动)。 |
||||||||||
object |
getProperty (string key)
在给定系统环境变量的名称后,返回此设备的相应值。此方法的详细说明中列出了可用的变量名称。 |
||||||||||
object |
getSystemProperty (string key)
. |
||||||||||
void |
installPackage (string path)
将包含在 packageFile 中的 Android 应用或测试软件包安装到此设备上。如果应用或测试软件包已安装,则会被替换。 |
||||||||||
dictionary |
instrument (string className, dictionary args)
在 Android 插桩下运行指定的组件,并在字典中返回结果,该字典的具体格式由正在运行的组件决定。该组件必须已存在于此设备上。 |
||||||||||
void |
press (string name, dictionary type)
将 type 指定的按键事件发送到键码指定的按键。 |
||||||||||
void |
reboot (string into)
将此设备重新启动到 bootloadType 指定的引导加载程序中。 |
||||||||||
void |
removePackage (string package)
从此设备中删除指定的软件包,包括其数据和缓存。 |
||||||||||
object |
shell (string cmd)
执行 |
||||||||||
void |
startActivity (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)
通过发送根据提供的参数构造的 Intent,在此设备上启动一个 Activity。 |
||||||||||
MonkeyImage
|
takeSnapshot()
捕获此设备的整个屏幕缓冲区,并生成一个 |
||||||||||
void |
touch (integer x, integer y, integer type)
将 type 指定的轻触事件发送到由 x 和 y 指定的屏幕位置。 |
||||||||||
void |
type (string message)
将消息中包含的字符发送到此设备,就好像这些字符是在设备键盘上输入的一样。这等同于使用 |
||||||||||
void |
wake ()
唤醒此设备的屏幕。 |
创建连接
newdevice = MonkeyRunner.waitForConnection()
提供了安装和卸载程序包、开启Activity、发送按键和点击事件、运行测试包等方法
broadcastIntent()
:发送广播
drag()
:拖动
getProperty()
:获取当前设备属性
getSystemProperty()
:获取系统配置信息
installPackage()
:安装应用
instrument()
:执行测试用例
press()
:按键
reboot()
:重启
removePackage()
:删除指定的Package
shell()
:执行命令
startActivity()
:启动应用
touch()
:点击
1)常用方法
installPackage(string path)
path:程序包的路径
removePackage(string package)
package:程序包名
startActivity(string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)
通常传递包名、activity名
touch(integer x, integer y, integer type)
touch参数说明:
integer x:x坐标值
integer y:y坐标值
integer type:key event类型(DOWN、UP、DOWN_AND_UP)
DOWN为按下事件UP为弹起事件 DOWN AND UP为按下弹起事件
drag(tuple start, tuple end, float duration, integer steps)
drag参数说明:
tuple start:拖拽起始位置,为tuple类型的(x,y)坐标点
tuple end:拖拽终点位置,为tuple类型的(x,y)坐标点
float duration:拖拽手势的持续时间,默认为1s
integer steps:插值点的步数,默认值为10
# -*- coding: UTF-8 -*- from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md# 连接设备
print("connect devices...")
device=mr.waitForConnection()# 安装APP
print("install app...")
device.installPackage(r'C:\Users\Administrator\Desktop\kaoyan_4.3.7beta.243.apk')# 配置APP信息
package='com.tal.kaoyan'
activity='com.tal.kaoyan.ui.activity.SplashActivity'
runComponent=package+'/'+activity# 启动应用
print("launch app...")
device.startActivity(component=runComponent)
MonkeyImage类
来源: https://developer.android.google.cn/studio/test/monkeyrunner/MonkeyImage?hl=zh_cn
方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
string |
convertToBytes (string format)
将当前图片转换为特定格式并以字符串形式返回该图片,然后您可以将其作为二进制字节的可迭代对象来访问。 |
||||||||||
tuple |
getRawPixel (integer x, integer y)
以 (a,r,g,b) 格式的整数元组形式返回图片位置 (x,y) 处的单个像素。 |
||||||||||
integer |
getRawPixelInt (integer x, integer y)
以 32 位整数形式返回图片位置 (x,y) 处的单个像素。 |
||||||||||
MonkeyImage
|
getSubImage (tuple rect)
根据当前图片的矩形选择区创建一个新的 |
||||||||||
boolean |
sameAs (MonkeyImage other, float percent)
将此 |
||||||||||
void |
writeToFile (string path, string format)
将当前图片以 |
from com.android.monkeyrunner import MonkeyImage as mi
print("takeSnapshot")
screenshot-device.takeSnapshot()
screenshot.writeToFile(r'D:\CI_Env\Appium\monkeyrunner\file\test.png','png')
# -*- coding: UTF-8 -*- 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("connect devices...")
device=mr.waitForConnection()# 安装APP
print("install app...")
device.installPackage(r'C:\Users\Administrator\Desktop\kaoyanbang_3.3.7beta.243.apk')# 配置APP信息
package='com.tal.kaoyan'
activity='com.tal.kaoyan.ui.activity.SplashActivity'
runComponent=package+'/'+activity# 启动应用
print("launch app...")
device.startActivity(component=runComponent)
mr.sleep(12) # 根据APP启动响应速度调整等待时间# 点击"跳过"按钮
print("touch skip button")
device.touch(645,53,'DOWN_AND_UP')
mr.sleep(3)# 输入用户名+密码
print("input username and password")
device.touch(121,282,'DOWN_AND_UP')
mr.sleep(2)
device.type("xxxxxx") # 实际的用户名device.touch(117,360,'DOWN_AND_UP')
mr.sleep(2)
device.type("yyyyyy") # 实际的密码
mr.sleep(2)# 点击登录按钮
print("touch login button")
device.touch(356,464,'DOWN_AND_UP')
mr.sleep(10)# 截图并保存
print("take snapshot")
screenshot=device.takeSnapshot()
screenshot.writeToFile(r'D:\CI_Env\Appium\monkeyrunner\file\kyb.png','png')
执行命令:
monkeyrunner D:\CI_Env\Appium\monkeyrunner\kyb_login.py
录制回放功能----隐藏功能
Monkey_recorder 和 Monkey_playback
Easy Monkey Device——隐藏功能
device=MonkeyRunner.waitForConnection()
device.startActivity('com.android.calculator2/.Calculator')
easy=EasyMonkeyDevice(device)
easy.touch(By.id('id/start').MonkeyDevice.DOWN_AND_UP)
Android自动化测试基础知识——Monkey Runner相关推荐
- Android自动化测试基础知识——Appium
目录 Appium 理念 使用Appium进行自动化测试有两个好处 Appium架构 Appium API Appium 理念 Appium是基于以下的四个理念设计来满足移动平台测试自动化的要求的: ...
- android培训总结范文,android培训基础知识总结
android培训基础知识总结,有需要的朋友可以参考下. android培训之1. Android的四大组件是哪些,它们的作用? Activity:Activity是Android程序与用户交互的窗口 ...
- android系统知识,Android系统基础知识百科
Android系统基础知识百科 2015-12-16 17:58:31 954浏览 Android系统作为一款功能强大的移动计算平台,在保持开放性的同时,必须提供强健的安全保障.Android的系统安 ...
- Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)...
简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...
- Android 应用基础知识和应用组件
应用基础知识 安装到设备后,每个 Android 应用都运行在自己的安全沙箱内: Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户: 默认情况下,系统会为每个应 ...
- Android 动画基础知识学习(下)
1.属性动画 属性动画可以对任意对象的属性进行动画不仅仅是View,动画默认时间间隔是300ms,默认帧率是100ms/帧. 作用:在一个时间间隔内完成对一个对象从属性值到另一个属性值的改变. 三个常 ...
- Android Systrace 基础知识(10) - Binder 和锁竞争解读
本文是 Systrace 系列文章的第十篇,主要是对 Systrace 中的 Binder 和锁信息进行简单介绍,简单介绍了 Binder 的情况,介绍了 Systrace 中 Binder 通信的表 ...
- Android开发基础知识
Android 开发 1. Android基础知识 1.1 发展历程 1.2 Android系统体系架构 Android采用分层架构: Kernel层:Android平台的基础.有线程管理和内存管理等 ...
- 第四章 Android WiFi基础知识
系列文章目录 第一章 国内下载AOSP最新源码的方法 第二章 下载AOSP WiFi相关的代码 第三章 将源码导入Android Studio(无需编译idegen) 文章目录 系列文章目录 前言 一 ...
最新文章
- [导入]VB实现SQL Server数据库备份/恢复
- 创建、添加字段IFields
- oracle消除重复的行使用的什么函数,利用Oracle的row_number() over函数消除重复的记录...
- 关于php的问题有哪些,关于PHP的报错问题?
- SpringMVC自学日志03(SpringMVC注解)
- Wireshark实战分析之DNS协议分析(一)
- 小程序组件传值方法调用
- Mac自带浏览器safari怎么打开开发者选项
- 狂神ajax,Ajax 学习笔记 by狂神说
- 【安价】亚拉奈夫想要复兴贫弱男爵家的样子【内政】1
- WPS文字 JSA 学习笔记 - 转PDF后要带自定义目录
- 数云融合丨重构传统商贸数字化解决方案
- JAVA面试题100道
- 汉明码生成过程图文详解
- C/C++编程:tan、atan、sin、cos等三角函数用法的代码演示及结果,注意角度和弧度的转换!
- dos2unix install on mac_全新的签名工具,支持win,mac
- 电脑黑客或电脑天才方面的电影
- 邯郸 南北两湖规划基本定型
- superword中一次精彩的重构
- [Java反序列化]CommonsCollections3利用链学习