Airtest自动化测试篇——python编写和执行用例(上)

Posted weixin_43802541

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Airtest自动化测试篇——python编写和执行用例(上)相关的知识,希望对你有一定的参考价值。

目录

  1. 导包

  2. 连接设备

  3. 编写脚本

  4. 生成报告

  5. 导包

主要需要导入三个包:

从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方式创建脚本,复制其中的初始化代码

  1. 连接设备

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基本一致:

  1. 电脑安装手机厂商的对应官方驱动

  2. 打开开发者选项,打开usb调试(部分手机还要打开允许模拟位置,允许通过usb安装应用)

  3. 插上数据线或通过wifi连接(注意关闭手机助手、豌豆荚等助手软件)

  4. 在手机端同意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.*”)

  1. 编写脚本

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基于图像识别的自动化测试工具

Airtest基于图像识别的自动化测试工具

airtest自动化测试MAC本地python运行airtest模块报没有权限

软件测试学习资料之Airtest自动化测试——AirtestIDE编写和执行用例

软件测试学习资料之Airtest自动化测试——Airtest环境搭建

软件测试学习资料之Airtest自动化测试——AirtestIDE编写和执行用例