前面重点介绍了 Airtest 的操作,也是新手入门的主要学习内容,这篇短文将介绍一些相关全局设置、脚本的引用、脚本执行与报告生成。
Airtest 脚本全局设置
在 airtest.core.settings 里面,提供了部分全局默认属性,其中我们列举出几个常见属性和它们的默认值:
LOG_DIR = None | log 保存路径; |
---|---|
LOG_FILE = “log.txt” | log名称; |
RESIZE_METHOD=staticmethod(cocos_min_strategy) | 图像识别算法设置;按照默认的算法顺序即可; |
THRESHOLD = 0.7 | 图像阈值;这个值在前面的内容提到过,有兴趣的可以看看之前的内容,也可以单独设置某个图片的阈值; |
THRESHOLD_STRICT = 0.7 | 与上面一样,区别是版本问题;1.1.6之后不用考虑; |
OPDELAY = 0.1 | 步骤之间的时间间隔; |
FIND_TIMEOUT = 20 | 查询超时时长;例如:touch、double_click、swipe、wait、assert_exists; |
FIND_TIMEOUT_TMP = 3 | 查询超时时长,例如:exists、assert_not_exists; |
PROJECT_ROOT = os.environ.get(“PROJECT_ROOT”, “”) | 设定一个默认项目根目录PROJECT_ROOT,让使用using接口时能够在当前根目录下寻找别的子脚本,无需填写完整路径,让脚本之间相互调用使用更加方便。 |
SNAPSHOT_QUALITY = 10 | 截图压缩精度; |
IMAGE_MAXSIZE = os.environ.get(“IMAGE_MAXSIZE”, None) | 截图尺寸大小; |
SAVE_IMAGE = True | 保存运行过程的截图;False-不保存;如果是 True,在报告里面的步骤中会有截图; |
手动修改 settings 里面的值,比较常用的就是LOG_DIR、LOG_FILE、THRESHOLD、FIND_TIMEOUT、PROJECT_ROOT,这里以修改图像阈值为例;
from airtest.core.api import *
# airtest.core.api中包含了一个名为ST的变量,即为全局设置
ST.THRESHOLD = 0.8
# 未指定图片threshold,默认使用ST.THRESHOLD中的0.8
touch(Template(r"tpl1532588127987.png", record_pos=(0.779, 0.382), resolution=(407, 264)))
# 手工指定图片threshold,以图片设置的0.6为准
touch(Template(r"tpl1532588127987.png", record_pos=(0.779, 0.382), resolution=(407, 264), threshold=0.6))
Airtest 脚本引用与调用
在自动化测试中,会有一些通用的东西,为了简洁、避免重复造轮子,可以单独抽离出来,这就牵扯到了脚本的引用与调用,Airtest 使用 using() 方法引用脚本;但是,要提前将被引用的脚本加入 sys.path,这样在使用的时候才能找到该脚本,以及其中包含的图片文件。上面介绍过一个项目根目录参数 PROJECT_ROOT,一旦配置了项目根目录,using() 就会去当前根目录下查找被调用的脚本,无需填写完整的路径,这种方法看似不错,但是脱离IDE就会报错,找不到文件,所以,我一般不用这种方法,而是直接将脚本加入 sys.path,实际情况看各位的需要。
设置根目录,引用脚本,记住:先调用脚本,然后 import 导入,最后才是使用。
import sys
ST.PROJECT_ROOT = "D:/test/user/project" # 添加到项目根目录也可以;
using(r"common.air") # 调用脚本
from common import common_function # 使用脚本
将脚本加入 sys.path,这种方法即使脱离 IDE 也能运行。
import os
import sys
sys.path.append(os.path.join(os.path.dirname(os.getcwd()),"login.air"))
using(r"login.air")
from login import login
if is_login:
login("1312091xxxx")
脚本批量执行
官方介绍了使用 bat 来执行 Airtest,这里先介绍一下,因为我在工作中不使用这种方式,后面会介绍,这里介绍它是因为,大家根据实际情况选择使用。
官方介绍了使用 bat 来执行 Airtest,这里先介绍一下,因为我在工作中不使用这种方式,后面会介绍,这里介绍它是因为,大家根据实际情况选择使用。
bat 执行单个脚本,先新建一个 txt 文件,输入下面的内容,:: 后面是注释内容。在这个例子中,我已经在示例脚本的开头添加了设备和 log 的初始化内容,所以,不用另外在运行命令时添加各种参数,如果你的设备是固定的,可以这么写。编辑完成之后,后缀改成 .bat,然后就可以执行了。
::关闭回显
@echo off
::切换到D盘
D:
::进入D盘的test目录,这里是你自己的脚本存放目录
cd D:\test
::执行 airtest run 命令
start airtest run newsLogin.air
exit
bat 执行多个脚本,这里是按照你书写的顺序去执行。
@echo off
D:
cd D:\test
title 正在执行第一个脚本
airtest run order.air
title 正在执行第二个脚本
airtest run Follow.air
exit
bat 也可以在多机运行,使用 start 命令开启多个命令窗口,实现多台设备上执行同一个脚本。
@echo off
D:
cd D:\test
start "正在使用模拟器1跑脚本" airtest run Order.air --device Android://127.0.0.1:5037/emulator-5554
start "正在使用模拟器2跑脚本" airtest run Follow.air --device Android://127.0.0.1:5037/127.0.0.1:7555
exit
到此,结合前面的内容,你就可以自己利用 Airtest 写自动化脚本,包括自己搭建自动化框架,道理都是 PO 分层那一套,以前做过 selenium 自动化,能很快上手。但是,事情还没完,因为,这里的报告,一般都是针对单个脚本的,如果整合到一起,如何参数化数据,请看后面的内容。