Appium自动化测试(七)monkeyrunner

MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,Monkeyrunner工具提供了一个API,用于编写从Android代码之外控制Android设备或模拟器的程序。 通过monkeyrunner,您可以编写一个Python程序,用于安装Android应用程序或测试包,运行它并向它发送按键事件,截取其用户界面的截图,并在工作区上存储屏幕截图。 monkeyrunner工具主要设计用于在功能/框架级别测试应用程序和设备,以及运行单元测试套件,但您可以自由地将其用于其他目的
monkeyrunner 路径:Andriod_SDK\tools

官方API文档 :

MonkeyRunner功能

1.多设备控制:API可以跨多个设备,一次启动全部模拟器来实施测试套件;
2.功能测试:为应用自动执行一次功能测试,然后观察输出结果的截屏。
3.可扩展自动化:因为monkeyrunner是一个API工具包,你可以开发基于Python模块的整个系统来控制Android设备;

Monkeyrunner与Monkey区别

Monkeyrunner与Monkey区别monkeyrunner和money没有什么直接的关系,monkey是在设备直接运行adb shell命令生成随机事件来进行测试的。相比较而言,monkeyrunner则是通过API发送特定的命令和事件来控制设备。

monkeyrunner环境搭建

安装并配置好jdk环境·
安装android sdk·
安装python
monkeyrunner环境变量配置: {Path}\Andriod_SDK\tools

安装结果检测
在控制台输入命令:monkeyrunner出现如下显示内容则说明安装成功
monkeyrunnerJython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35)[Java HotSpot™ 64-Bit Server VM (Oracle Corporation)] on java1.8.0_05>>>
Tips:退出monkeyrunner命令行模式可以 使用快捷键 ctrl+D退出。

MonkeyRunner工具主要有三个类:

1. MonkeyRunner

MonkeyRunner提供连接真机和模拟器、输入、暂停、警告框等方法。包括:
alert()——警告框
choice()——选项列表框
help()——API帮助文档
input()——输入
sleep()——暂停
waitForConnection()——等待链接设备
常用方法waitForConnection(float timeout, string deviceid),

from com.android.monkeyrunner import MonkeyRunner as mr
print ("connect devices......")
device = mr.waitForConnection()    #不传参数则获取已经链接的设备(通过查找adb device查找已经链接的设备)
# device=mr.waitForConnection(5,'127.0.0.1:62001')    # 如果已经链接了多个设备,则需要指定设备ip,并设置等待时间。第一个参数是等待的时间。

2. MonkeyDevice类

MonkeyDevice类提供了安装和卸载程序包、开启Activity、发送按键和点击事件、运行测试包等方法。包括:
broadcastIntent()——发送广播
drag()——拖动
getProperty()——获取当前设备属性
getSystemProperty()——获取当前设备属性
installPackage()——安装应用
instrument()——执行测试用例
press()——按键
reboot()——重启
removePackage()——删除指定的Package
shell()——执行命令
startActivity()——启动应用
touch()——点击
常用方法·
installPackage (string path)
removePackage (string package)
startActivity (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)
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,拖拽手势持续时间,默认为1.0s。
-integer steps,插值点的步数,默认值为10。

案例:
安装并启动微信,
以下代码用Notepad++或记事本编写,并保存为python文件,命名为weixin_start.py

from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md  

print("connect devices...")
device=mr.waitForConnection()

print("install app...")
device.installPackage(r"D:\Documents\Downloads\com.tencent.mm_7.0.6_1500.apk")
  # 必须含有r,这样才被识别为路径。   

print("launch app")
package='com.tencent.mm'
activity='com.tencent.mm.ui.LauncherUI'
runComponent =package+"/"+activity
device.startActivity(component=runComponent)

代码执行方式
monkeyrunner scripfile #scripfile是脚本名称
在cmd窗口执行以下命令

 monkeyrunner C:\Users\Administrator\Desktop\weixin_start.py

MonkeyImage类

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

from com.android.monkeyrunner import MonkeyImage as mi

print ("takeSnapshot")
screenshot = device.takeSanpshot()
screenshot.writeToFile(r"E:\test.png","png")

综合应用:
测试需求:链接设备,自动安装并启动微信,启动后点击登录,点击微信

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 device...")
device=mr.waitForConnection()
print("install app")
device.installPackage(r"D:\Documents\Downloads\com.tencent.mm_7.0.6_1500.apk")  
mr.sleep(10)
print("launch app")
package='com.tencent.mm'
activity='com.tencent.mm.ui.LauncherUI'
runComponent =package+"/"+activity
device.startActivity(component=runComponent)
mr.sleep(100)
print('click login')
device.touch(190,1500,"DOWN_AND_UP")
mr.sleep(5)
print("swich login method")
device.touch(100,710,"DOWN_AND_UP")
mr.sleep(5)
print("type username")
device.touch(290,445,"DOWN_AND_UP")
mr.sleep(3)
device.type("81666953")
mr.sleep(3)
print("type password")
device.touch(290,570,"DOWN_AND_UP")
mr.sleep(3)
device.type("123456987")
mr.sleep(3)
print("click login")
device.touch(300,880,"DOWN_AND_UP")
mr.sleep(2)
print ("takeSnapshot")
screenshot= device.takeSnapshot()
screenshot.writeToFile(r"E:\test_report\weixin.png","png")

注意事项:
方法调用错误
AttributeError: type object ‘com.android.monkeyrunner.XXXXX’ has no attribute XXXXXX检查调用的方法名是否写错,特别是注意区分大小写。
字符编码错误
SyntaxError: Non-ASCII character in file ‘E:\monkeyrunner_script\kyb.py’, but no encoding declared;
需要在代码顶部补充 # – coding: utf-8 – 或者去掉代码中的中文字符

monkey与monkeyrunner不足之处

元素定位依赖于坐标点,稳定性差
不支持跨平台使用(iOS平台无法使用)
没有成熟系统的管理框架
只适用于冒烟测试,检测app稳定性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值