一、功能

Android自动化测试工具

二、环境配置

1 android-sdk

2 jdk

3 配置python环境

monkeyrunner在Android SDK的tools文件夹下

三、打开方式

1 命令行方式

命令:monkeyrunner

导入monkeyrunner所要使用的模块:

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice

device=MonkeyRunner.waitForConnection() #连接手机设备

device.installPackage("../samples/android-10/ApiDemos/bin/Apidemos.apk") #安装apk包到手机设备。

device.startActivity(component="com.example.android.apis/com.example.android.apis.ApiDemos") #启动活动

device.reboot() #手机设备重启

device.touch(300,300,'DOWN_AND_UP')

MonkeyRunner.alert("hello")#在emulator上会弹出消息提示

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

device.type('hello')#向编辑区域输入文本'hello'

2 Python文件

例如test.py,然后从命令行直接通过monkeyrunner运行:monkeyrunner test.py

实例:test.py

可能出现错误“Can't open specified script file”

原因在于python脚本文件路径不正确

1、将test.py文件存放到monkeyrunner文件同一目录中。可以执行:monkeyrunner test.py 调用

2、指定python文件位置。如果test.py文件在D盘根目录下,可以这样执行:monkeyrunner d:\test.py

如果运行正常,就会在终端看到

1.png

from com.android.monkeyrunner import Monkeyrunner,MonkeyDevice,MonkeyImage

device=MonkeyRunner.waitForConnection()

device.installPackage(f:\\Simple.apk")

MonkeyRunner.sleep(3)

device.shell('am force-stop simple.app.SimpleAppActivity')

MonkeyRunner.sleep(3)

device.startActivity(component='simple.app/simple.app.SimpleAppActivity')

device.drag((288,204),(288,1024),3,1)

MonkeyRunner.sleep(3)

result = device.takeshot()

result.writeToFile('d:\\simp.png','png')

3、利用monkey_recorder.py进行脚本录制及回放

下载monkeyrunner_py脚本.rar文件并解压到tools文件夹下

1、连接手机设备

2、在控制台输入monkeyrunner monkey_recorder.py

3、操作手机界面

4、点击export actions将脚本导出

5、在控制台输入monkeyrunner monkey_playback.py +脚本路径和文件名称

四、monkeyrunner语法

1 monkeyrunner命令语法

monkeyrunner -plugin

2 monkeyrunner API

主要包括三个模块

1、MonkeyRunner:这个类提供了用于连接monkeyrunner和设备或模拟器的方法,它还提供了用于创建用户界面显示提供了方法。

2、MonkeyDevice:代表一个设备或模拟器。这个类为安装和卸载包、开启Activity、发送按键和触摸事件、运行测试包等提供了方法。

3、MonkeyImage:这个类提供了捕捉屏幕的方法。这个类为截图、将位图转换成各种格式、对比两个MonkeyImage对象、将image保存到文件等提供了方法。

注意:在运行monkeyrunner之前必须先运行相应的模拟器,否则monkeyrunner无法连接到设备

运行模拟器有两种方法:1、通过eclipse中执行模拟器 2、在CMD中通过命令调用模拟器

3 命令:emulator -avd test

上面命令中test是指模拟器的名称。

4 导入需要的模块(有四种写法)

import sys

1、

from com.android.monkeyrunner import MonkeyRunner as mr

from com.android.monkeyrunner import MonkeyDevice as md

from com.android.monkeyrunner import MonkeyImage as mi

2、

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage

3、

import com.android.monkeyrunner

4、

import com.android.monkeyrunner as cam

等待连接到设备,与模拟器连接,返回monkeydevice对象,代表连接的设备。没有报错的话说明连接成功。

参数1:超时时间,单位秒,浮点数。默认是无限期地等待。

参数2:串deviceid,指定的设备名称。默认为当前设备(手机优先,比如手机通过USB线连接到PC、其次为模拟器)。

默认连接:device=MonkeyRunner.waitForConnection()

参数连接:device = mr.waitForConnection(1.0,'emulator-5554')

5 向设备或模拟器安装要测试的APK

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

安装成功返回true

6 从设备中删除指定的软件包,包括其相关的数据和调整缓存

device.removePackage('myproject/bin/MyApplication.apk')

删除成功返回true。

7 启动任意的Activity

device.startActivity(component="your.www.com/your.www.com.TestActivity")

device.startActivity(component="your.www.com/.TestActivity")

执行一个adb shell命令,并返回结果,如果有的话

device.shell("...")

8 暂停目前正在运行的程序指定的秒数

MonkeyRunner.sleep(秒数,浮点数)

9 对比截屏和已存在图片

result=device.takeSnapshot()

返回一个MonkeyImage对象(点阵图包装)

result.writeToFile('takeSnapshot\result1.png','png')

pic2=MonkeyRunner.loadImageFromFile('D:\picture2.png')

if (result.sameAs(pic2,0.9)):

print ("Success")

else:

print("Failure")

10 写文件MonkeyImage

MonkeyImage.writeToFile(参数1:输出文件名,也可以包括路径,参数2:目标格式)

写成功返回true,否则返回false

11 键盘上的类型指定的字符串

相当于要求每个字符串中的字符按(键码,DOWN_AND_UP)

12 字符串发送到键盘

device.type('字符串')

13 唤醒设备屏幕(在设备屏幕上唤醒)

device.wake()

14 重启设备

device.reboot()

15 单击操作

device.touch(x,y,TouchPressType-触摸事件类型) x,y的单位为像素

device.touch(200,300,'DOWN_AND_UP')

16 控制多个设备

from com.android.monkeyrunner import Monkeyrunner,MonkeyDevice,MonkeyImage

device1=MonkeyRunner.waitForConnection(5,'b4726a2d')

device2=MonkeyRunner.waitForConnection(5,'5dfadsf32scda')

device1.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)

device1.typr('monkeyrunner')

device2.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)

device2.typr('monkeyrunner')

17 发送到指定键的一个关键事件

device.press(参数1:键码,参数2:触摸事件类型)

参数1:见android.view.KeyEvent

参数2,如有TouchPressType()返回的类型-触摸事件类型,有三种。

1、DOWN 发送一个DOWN事件。指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上。

2、UP 发送一个UP事件。指定UP事件类型发送到设备,对应释放一个键或从屏幕上抬起。

3、DOWN_AND_UP 发送一个DOWN事件,然后一个UP事件。对应于输入键或点击屏幕。

以上三种事件做为press()或touch()参数。原英文如下:

use this with the type argument of press() or touch() to send a down event.

18 参数1的部分具体内容逻辑

按下HOME键 device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)

按下BACK键 device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)

按下下导航键 device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP)

按下上导航键 device.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP)

按下OK键 device.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP)

device.press('KEYCODE_ENTER',MonkeyDevice.DOWN_AND_UP)#输入回车

device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)#点击返回

菜单键 KEYCODE_MENU

home键 KEYCODE_HOME

返回键 KEYCODE_BACK

搜索键 KEYCODE_SEARCH

呼叫键 KEYCODE_CALL

结束键 KEYCODE_ENDCALL

上导航键 KEYCODE_DPAD_UP

下导航键 KEYCODE_DPAD_DOWN

左导航 KEYCODE_DPAD_LEFT

右导航键 KEYCODE_DPAD_RIGHT

ok键 KEYCODE_DPAD_CENTER

上音量键 KEYCODE_VOLUME_UP

下音量键 KEYCODE_VOLUME_DOWN

电源键 KEYCODE_POWER

相机键 KEYCODE_CAMERA

android 自动化测试之monkeyrunner学习(三),自动化测试之Monkeyrunner相关推荐

  1. Android 持续集成实践(三)——编写 .gitlab-ci.yml 实现自动化

    文章目录 前言 系列文章 Android 持续集成实践(三)--编写 .gitlab-ci.yml 实现自动化 要实现的效果 定义 gitlab-ci 工作场景阶段 定义 build 任务 定义 re ...

  2. JB测试之旅-浅谈自动化知识

    先说明 本篇不会讲解某种语言或某种框架,这种事情请直接找google,本篇是面向小白或对自动化不熟悉的同学,或是想深入了解自动化理论知识的同学,因此,大神请右上: 理论为主,只有明白更多的理论,做事才 ...

  3. Android Studio Gradle实践之多渠道自动化打包+版本号管理

    转: Android Studio Gradle实践之多渠道自动化打包+版本号管理 上次介绍了Android Studio的安装.配置和基本使用.这次讲一下Android Studio用到的打包工具G ...

  4. 基于强化学习的自动化剪枝模型

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨AI科技评论 编辑丨极市平台 导读 GitHub上最新开源的一 ...

  5. 人工智能AI实战100讲(五)-基于强化学习的自动化剪枝模型

    1介绍 文中涉及代码请参见: 人工智能AI-图像处理cv-基于强化学习的自动化裁剪 目前的强化学习工作很多集中在利用外部环境的反馈训练agent,忽略了模型本身就是一种能够获得反馈的环境.本项目的核心 ...

  6. 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  7. 学习Ansible自动化

    学习Ansible自动化 自动化运维工具 ​ shell脚本/Ansible(无客户端)/Saltstack 目录 学习Ansible自动化 1.Ansible基本概述 2.Ansible能做什么 3 ...

  8. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述 2 框架更改总览 3 框架更改详解   3.1 解析新增页面目录   3.2 解析新增测试用例目录 ...

  9. Linux云自动化运维第三课

    Linux云自动化运维第三课 一.正则表达式 1.匹配符 * ###匹配0到任意字符 ? ###匹配单个字符 [[:alpha:]] ###匹配单个字母 [[:lower:]] ###匹配单个小写字母 ...

最新文章

  1. python 包用法_Python 基础教程之包和类的用法
  2. vue-cli脚手架
  3. 编译GCC4.8.2
  4. eclipse中Tomcat启动了 但看不到tomcat首页
  5. 设计模式-简单工厂模式
  6. Scrapy-xpath用法以及实例
  7. opencv python matplotlib.pyplot.hist() 如何绘制灰度直方图,如何根据灰度直方图确定最优二值化值
  8. React和设计良好的jQuery插件并没有什么不兼容的问题。
  9. ACM算法 -- 数论 -- 开灯关灯问题(数论,整数分解,因子个数,公式推导)
  10. elasticsearch java_java Elasticsearch详细介绍及使用实例分析
  11. 【Pytorch神经网络实战案例】21 基于Cora数据集实现Multi_Sample Dropout图卷积网络模型的论文分类
  12. 力扣209-长度最小的子数组(Java,双指针解法)
  13. 基于Python的电子教室软件中远程关机功能的原理与实现
  14. 学习笔记(03):2020软考数据库系统工程师-基础知识培训视频-计算机系统--安全性可靠性与性能评测(一)...
  15. 蛋白质组学数据分析实践
  16. 由ERA5逐小时数据获取逐日数据——三种方法
  17. Docker 安装 It seems there is already a Binary at
  18. iOS 视频转gif
  19. 网络基础系统红枫产线落地金华,助力打造千亿级产业集群!
  20. 与化学相关的计算机应用情况,计算机化学的发展、应用与展望

热门文章

  1. 技能系统设计笔记 3
  2. 减少HTTP请求的方法
  3. 7-1 最长连续递增子序列 (20 分)
  4. 机器学习算法中文视频教程
  5. 将已有项目转为se项目_如何将 Java 项目转换成 Maven 项目
  6. ceiling和floor转化
  7. 吴裕雄--天生自然 高等数学学习:平面及其方程
  8. flex布局问题整理
  9. Oozie 3.3.1安装
  10. (四)Trigger