Airtest自动化测试篇——python编写和执行用例(上)
Posted weixin_43802541
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Airtest自动化测试篇——python编写和执行用例(上)相关的知识,希望对你有一定的参考价值。
目录
-
导包
-
连接设备
-
编写脚本
-
生成报告
-
导包
主要需要导入三个包:
从airtest.core.api中import所有API
from airtest.core.api import
from airtest.cli.parser import cli_setup
from airtest.report.report import simple_report
可以在AirtestIDE以.py方式创建脚本,复制其中的初始化代码
- 连接设备
2.1 基本的连接方式
可以使用以下语句进行设备连接:
if not cli_setup():
auto_setup(file,logdir=True,devices=[“android://127.0.0.1:5037/127.0.0.1:62025?cap_method=JAVACAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH”,],project_root=“D:/pyworkspace/airtest_demo1/blackjack”)
当没有外部参数传入时,就调用auto_setup函数自动配置运行环境。
auto_setup的函数参数如下:
auto_setup(basedir=None,devices=None,logdir=None,project_root=None, compress=None)
自动配置运行环境,如果当前没有连接设备的话,就默认尝试连接Android设备。
参数:
basedir – 设置当前脚本的所在路径,也可以直接传 __file__ 变量进来
devices – 一个内容为 connect_device uri 字符串的列表
logdir – 可设置脚本运行时的log保存路径,默认值为None则不保存log,如果设置为True则自动保存在/log目录中
project_root – 用于设置PROJECT_ROOT变量,方便 using 接口的调用
compress – 屏幕截图的压缩比率,在[1, 99]范围内的整数,默认是10
主要修改的是auto_setup函数的两个参数:devices和project_root:
project_root:
设置为项目的根目录
devices:
修改这个参数就可以适配不同设备
也可以使用以前的connect_device进行设备连接
2.2 连接Android
连接前的准备工作和AirtestIDE基本一致:
-
电脑安装手机厂商的对应官方驱动
-
打开开发者选项,打开usb调试(部分手机还要打开允许模拟位置,允许通过usb安装应用)
-
插上数据线或通过wifi连接(注意关闭手机助手、豌豆荚等助手软件)
-
在手机端同意usb调试
devices:
#连接本地第一台手机
devices=[“android:///”,]
#连接远程手机或是模拟器
devices=[“android://127.0.0.1:5037/手机或模拟器IP:端口?cap_method=JAVACAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH”,]
wifi连接手机
并先用USB线将手机和电脑连接起来,在电脑端执行命令 adb tcpip 5555 ,其中 5555 是端口号,可以根据自己的需求来指定,5555是默认值
获取手机的IP地址,可以在 手机设置-关于手机-状态信息-IP地址 里找到,也可以执行 adb ifconfig来查看
随后可以拔掉USB线,在AirtestIDE的 远程设备连接 处输入 adb connect 手机ip:刚才填入的端口号5555 ,点击连接,刷新ADB后就能在设备列表中看到连上的设备了
2.3 连接ios设备
和AirtestIDE中准备工作一样,需要先在xcode安装iOS-Tagent:
https://github.com/AirtestProject/iOS-Tagent
devices:
#连接本地第一台手机
devices=[“iOS:///”,]:
#连接远程手机
devices=[“iOS:///127.0.0.1:8100”,]:
2.4 连接windows应用
devices:
连接windows桌面
connect_device(“Windows:///”)
根据窗口句柄连接,可以在AirtestIDE的设备窗口查看
devices=[“Windows:///396680”,]
连接windows应用标题正则表达式为:unity.*
connect_device(“Windows:///?title_re=unity.*”)
- 编写脚本
3.1 基础知识
3.1.1 Airtest的坐标系
Airtest主要使用的是绝对坐标系,即屏幕左上角为坐标原点(0,0),向右为x轴正向,向下为y轴正向,右下角坐标为最大分辨率,例如720x1280分辨率的手机,右下角坐标为(720,1280)
airtest的touch接口,实际上点击的是一个 (x, y)绝对坐标,在截图语句中,airtest会先根据传入的图片找到该图片在当前画面上的位置坐标,然后进行点击。
airtest的swipe接口,滑动起点和滑动终点使用的也是(x, y)绝对坐标。
3.1.2 操作图片的封装类Template
在对图像进行识别时,图像都被封装为一个Template类对象,其源代码为:
classTemplate(filename,threshold=None,target_pos=5, record_pos=None, resolution=(),rgb=False)
参数:
filename: 图片文件名
threshold:识别阈值,默认全局0.7
target_pos: 点击图片的点(默认为5)
record_pos: 录制时的点击相对屏幕中心点的相对坐标点,由两个0-1之间的浮点数构成
resolution: 录制时,屏幕的分辨率
rgb: 识别结果是否使用rgb三通道进行校验.
record_pos要和resolution配合一起使用
具体代码可参考源码:
https://airtest.readthedocs.io/zh_CN/latest/_modules/airtest/core/cv.html#Template
举例:
touch(Template(r"tpl1606371978472.png", record_pos=(0.194, 0.115), resolution=(720, 1280)))
3.2 常用api
3.2.1 模拟输入
3.2.1.1 touch点击
touch(v, times=1, **kwargs)在当前设备画面上进行一次点击
参数:
v:点击位置,可以是一个Template图片实例,或是一个绝对坐标 (x, y)
times:点击次数,默认一次
kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档
返回:
实际点击位置坐标 (x, y)
举例:
touch(Template(r"./pic/10k.png"))
touch(Template(r"tpl1606371978472.png", record_pos=(0.194, 0.115), resolution=(720, 1280)))
3.2.1.2 swipe滑动
swipe(v1,v2=None,vector=None,**kwargs)在当前设备画面上进行一次滑动操作
有两种使用方式:
swipe(v1, v2=Template(…)) # 从 v1 滑动到 v2
swipe(v1, vector=(x, y)) # 从 v1 开始滑动,沿着vector方向
参数:
v1:滑动的起点,可以是一个Template图片实例,或是绝对坐标 (x, y)
v2:滑动的终点,可以是一个Template图片实例,或是绝对坐标 (x, y)
vector:滑动动作的矢量坐标,可以是绝对坐标 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)
**kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档
引发:
Exception – 当没有足够的参数来执行滑动时引发异常
返回:
原点位置和目标位置
举例:
swipe(Template(r"tpl1606727895882.png", record_pos=(-0.158, -0.104), resolution=(1320,722)),Template(r"tpl1606727841951.png", record_pos=(0.008, 0.108), resolution=(1320, 722)))
3.2.1.3 text输入
text(text, enter=True, **kwargs)在目标设备上输入文本,文本框需要处于激活状态(需要先点击一下输入框)
参数:
text:要输入的文本
enter:是否在输入完毕后,执行一次 Enter ,默认是True
返回:
None
3.2.1.4 keyevent按键
keyevent(keyname, **kwargs) 在设备上执行keyevent按键事件
参数:
keyname – 平台相关的按键名称
**kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档
返回:
None
举例:
#点击删除按键
keyevent(“KEYCODE_DEL”)
keyevent(“67”)
想返回上一个页面时,会选择按touch返回的UI按钮,但其实一般情况下keyevent(“BACK”)也可以达到目的,简单直接且兼容性又好
安卓平台的按键可以参考:https://developer.android.com/reference/android/view/KeyEvent.html
windows平台参考pywinauto支持的windows按键
iOS设备现在暂时 只支持 HOME 按键的keyevent
3.2.1.5 snapsshot截屏
snapshot(filename=None,msg="",quality=None, max_size=None)对目标设备进行一次截图,并且保存到文件中
参数:
filename – 保存截图的文件名,默认保存路径为 ST.LOG_DIR
中
msg – 截图文件的简短描述,将会被显示在报告页面中
quality – 图片的质量,[1,99]的整数,默认是10
max_size – 图片最大尺寸, e.g 1200
返回:
截图文件的绝对路径
3.2.1.6 wait等待
wait(v,timeout=None,interval=0.5,intervalfunc=None)等待当前画面上出现某个匹配的Template图片
参数:
v – 要等待出现的目标Template实例
timeout – 等待匹配的最大超时时长,默认为None即默认取 ST.FIND_TIMEOUT 的值,默认20s
interval – 尝试查找匹配项的时间间隔(以秒为单位),默认0.5s
intervalfunc – 在首次尝试查找匹配失败后的回调函数
引发:
TargetNotFoundError – 在超时后仍未找到目标则触发
返回:
匹配目标的坐标
【未完待续…】
以上是关于Airtest自动化测试篇——python编写和执行用例(上)的主要内容,如果未能解决你的问题,请参考以下文章
airtest自动化测试MAC本地python运行airtest模块报没有权限
软件测试学习资料之Airtest自动化测试——AirtestIDE编写和执行用例