[AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例

目录结构

一、monkeyrunner引入
    1. monkeyrunner简介
    2. monkeyrunner功能
    3. monkeyrunner与monkey区别
    4. monkeyrunner环境搭建
二、monkeyrunner API三个类的应用
    1. MonkeyRunner类
    2. MonkeyDevice类
        1)常用方法
        2)实践案例:连接设备并启动APP
    3. MonkeyImage类
三、monkeyrunner综合实践


一、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发送特定的命令和事件来控制设备

4. monkeyrunner环境搭建

(1)安装井配置好JDK环境
(2)安装Android sdk
(3)安装Python
(4)monkeyrunner环境变量配置

变量名 变量值
ANDROID_HOME F:\Android\android-sdk
Path %ANDROID_HOME%\tools;

(5)检查安装效果
在控制台输入命令:monkeyrunner

[AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例_第1张图片


二、monkeyrunner API三个类的应用

monkeyrunner工具主要有三个类:
MonkeyRunner、MonkeyDevice、MonkeyImage

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

1. 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)

2. MonkeyDevice类

提供了安装和卸载程序包、开启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

2)实践案例:连接设备并启动APP

案例:连接设备,安装考研帮App并启动

代码实现
kyb_start.py

# -*- 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\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)

PS:代码中包含中文字符,需要在代码开头写上 # -*- coding: UTF-8 -*-

执行代码:
语法:monkeyrunner scriptfile
执行命令:monkeyrunner D:\CI_Env\Appium\monkeyrunner\kyb_start.py

[AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例_第2张图片
[AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例_第3张图片

3. MonkeyImage类

在测试过程中用来保存各种格式的测试截图,且可进行图像对比
takeSnapshot():进行屏幕截图
writeToFile():保存图像文件到指定文件路径
convertToBytes():转换图像格式
getRawPixel():获取当前坐标像素元组
getRawPixelInt():获取当前坐标像素值
sameAs():图像对比
getSubImage():截取子图像

使用方法:

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')


三、monkeyrunner综合实践

测试场景

连接设备,自动安装并启动考研帮APP;启动后登录预先注册号的账号,然后截图并保存到指定的文件路径

思路分析

连接设备
安装APP
启动APP
进入登录界面,输入用户名+密码,点击登录
保存登录之后的截图

脚本实现

kyb_login.py

# -*- 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

执行结果:

[AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例_第4张图片
[AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例_第5张图片
[AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例_第6张图片
截图文件

你可能感兴趣的:([AP_04] monkeyrunner环境搭建、monkeyrunner API类别&应用案例)