目录

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 的 pydoc 工具的样式显示 monkeyrunner API 引用。

string input (string message, string initialValue, string title, string okTitle, string cancelTitle)

显示一个接受输入的对话框。

void sleep (float seconds)

将当前程序暂停指定的秒数。

MonkeyDevice waitForConnection (float timeout, string deviceId)

尝试在 monkeyrunner 后端与指定的设备或模拟器之间建立连接。

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

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)

adb shell getprop <key>. 的等效 API。This is provided for use by platform developers.

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)

执行 adb shell 命令并返回结果(如果有)。

void startActivity (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)

通过发送根据提供的参数构造的 Intent,在此设备上启动一个 Activity。

MonkeyImage takeSnapshot()

捕获此设备的整个屏幕缓冲区,并生成一个 MonkeyImage 对象,其中包含当前显示的屏幕截图。

void touch (integer x, integer y, integer type)

将 type 指定的轻触事件发送到由 x 和 y 指定的屏幕位置。

void type (string message)

将消息中包含的字符发送到此设备,就好像这些字符是在设备键盘上输入的一样。这等同于使用 DOWN_AND_UP 类型的按键事件针对 message 中的每个键码调用 press()

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)

根据当前图片的矩形选择区创建一个新的 MonkeyImage 对象。

boolean sameAs (MonkeyImage other, float percent)

将此 MonkeyImage 对象与另一个对象进行比较,并返回比较结果。percent 参数会指定允许两个“相等”的图片之间可以存在的百分比差异。

void writeToFile (string path, string format)

将当前图片以 format 指定的格式写入 filename 指定的文件。

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相关推荐

  1. Android自动化测试基础知识——Appium

    目录 Appium 理念 使用Appium进行自动化测试有两个好处 Appium架构 Appium API Appium 理念 Appium是基于以下的四个理念设计来满足移动平台测试自动化的要求的: ...

  2. android培训总结范文,android培训基础知识总结

    android培训基础知识总结,有需要的朋友可以参考下. android培训之1. Android的四大组件是哪些,它们的作用? Activity:Activity是Android程序与用户交互的窗口 ...

  3. android系统知识,Android系统基础知识百科

    Android系统基础知识百科 2015-12-16 17:58:31 954浏览 Android系统作为一款功能强大的移动计算平台,在保持开放性的同时,必须提供强健的安全保障.Android的系统安 ...

  4. Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)...

    简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...

  5. Android 应用基础知识和应用组件

    应用基础知识 安装到设备后,每个 Android 应用都运行在自己的安全沙箱内: Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户: 默认情况下,系统会为每个应 ...

  6. Android 动画基础知识学习(下)

    1.属性动画 属性动画可以对任意对象的属性进行动画不仅仅是View,动画默认时间间隔是300ms,默认帧率是100ms/帧. 作用:在一个时间间隔内完成对一个对象从属性值到另一个属性值的改变. 三个常 ...

  7. Android Systrace 基础知识(10) - Binder 和锁竞争解读

    本文是 Systrace 系列文章的第十篇,主要是对 Systrace 中的 Binder 和锁信息进行简单介绍,简单介绍了 Binder 的情况,介绍了 Systrace 中 Binder 通信的表 ...

  8. Android开发基础知识

    Android 开发 1. Android基础知识 1.1 发展历程 1.2 Android系统体系架构 Android采用分层架构: Kernel层:Android平台的基础.有线程管理和内存管理等 ...

  9. 第四章 Android WiFi基础知识

    系列文章目录 第一章 国内下载AOSP最新源码的方法 第二章 下载AOSP WiFi相关的代码 第三章 将源码导入Android Studio(无需编译idegen) 文章目录 系列文章目录 前言 一 ...

最新文章

  1. [导入]VB实现SQL Server数据库备份/恢复
  2. 创建、添加字段IFields
  3. oracle消除重复的行使用的什么函数,利用Oracle的row_number() over函数消除重复的记录...
  4. 关于php的问题有哪些,关于PHP的报错问题?
  5. SpringMVC自学日志03(SpringMVC注解)
  6. Wireshark实战分析之DNS协议分析(一)
  7. 小程序组件传值方法调用
  8. Mac自带浏览器safari怎么打开开发者选项
  9. 狂神ajax,Ajax 学习笔记 by狂神说
  10. 【安价】亚拉奈夫想要复兴贫弱男爵家的样子【内政】1
  11. WPS文字 JSA 学习笔记 - 转PDF后要带自定义目录
  12. 数云融合丨重构传统商贸数字化解决方案
  13. JAVA面试题100道
  14. 汉明码生成过程图文详解
  15. C/C++编程:tan、atan、sin、cos等三角函数用法的代码演示及结果,注意角度和弧度的转换!
  16. dos2unix install on mac_全新的签名工具,支持win,mac
  17. 电脑黑客或电脑天才方面的电影
  18. 邯郸 南北两湖规划基本定型
  19. superword中一次精彩的重构
  20. [Java反序列化]CommonsCollections3利用链学习

热门文章

  1. 咒术回战,HTMLCSS,简单,介绍页面
  2. 巧记口诀确定正方体表面展开图
  3. JS 对手机号和身份证号进行脱敏处理
  4. 国画经典之梅花PSD素材
  5. ios功耗测试软件,iOS开发耗电检测及优化
  6. java执行jar包
  7. webassembly学习-安全控制
  8. 全国青年男女快宅出精神病了…哈哈哈哈
  9. 用matplotlib获取雅虎股票数据并作图【转载】
  10. u盘文件乱码怎么恢复数据?用嗨格式数据恢复软件