其他分享
首页 > 其他分享> > Airtest之全局变量

Airtest之全局变量

作者:互联网

上期回顾:Airtest API精讲之text()


以下基于
python3.8;airtestIDE1.2.11;airtest1.2.2;pocoui1.0.83

如同所有测试框架都有一个存放全局变量的地方,Airtest也有一个存在全局变量的地方:

# 文件位置:your_python_path/site-packages/airtest/core/settings.py
class Settings(object):
    DEBUG = False
    LOG_DIR = None
    LOG_FILE = "log.txt"
    RESIZE_METHOD = staticmethod(cocos_min_strategy)
    # keypoint matching: kaze/brisk/akaze/orb, contrib: sift/surf/brief
    CVSTRATEGY = ["mstpl", "tpl", "surf", "brisk"]
    if LooseVersion(cv2.__version__) > LooseVersion('3.4.2'):
        CVSTRATEGY = ["mstpl", "tpl", "sift", "brisk"]
    KEYPOINT_MATCHING_PREDICTION = True
    THRESHOLD = 0.7  # [0, 1]
    THRESHOLD_STRICT = None  # dedicated parameter for assert_exists
    OPDELAY = 0.1
    FIND_TIMEOUT = 20
    FIND_TIMEOUT_TMP = 3
    PROJECT_ROOT = os.environ.get("PROJECT_ROOT", "")  # for ``using`` other script
    SNAPSHOT_QUALITY = 10  # 1-100 https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html#jpeg
    # Image compression size, e.g. 1200, means that the size of the screenshot does not exceed 1200*1200
    IMAGE_MAXSIZE = os.environ.get("IMAGE_MAXSIZE", None)
    SAVE_IMAGE = True

在之前的文章中,已经用过或讲过少部分全局变量,在将来的文章中也会在用到的地方再次陈述。这里我们简单再说下比较典型的:

在使用不同分辨率的设备进行图像识别时,可能会导致识别成功率不佳,因此Airtest提供了默认的分辨率适配规则(使用的是Cocos引擎的默认缩放规则)http://docs.cocos.com/creator/manual/zh/ui/multi-resolution.html

想要提高2d游戏的识别精度,最好的办法就是明确指定你的游戏的分辨率适配规则,例如,直接在.air脚本文件的开头这样写:

from airtest.core.api import *

def custom_resize_method(w, h, sch_resolution, src_resolution):
    return int(w), int(h)

# 替换默认的RESIZE_METHOD
ST.RESIZE_METHOD = custom_resize_method

上面的代码指定了一个自定义的缩放规则:直接return原来的值,不管屏幕分辨率,所有UI都不进行缩放(有的游戏就是这种策略)。

这里的RESIZE_METHOD,即我们定义的custom_resize_method使用的输入参数为:
w, h # 录制下来的UI图片的宽高
sch_resolution # 录制时的屏幕分辨率
src_resolution # 回放时的屏幕分辨率

输出为:
回放时的UI图片宽高

若要自定义你的RESIZE_METHOD,只需要知道你测试的游戏的缩放规则,然后在custom_resize_method中用代码实现即可。这样做,能够大大提升不同分辨率设备下的图像识别成功率。

from airtest.core.settings import Settings as ST
ST.CVSTRATEGY = ["mstpl", "tpl"]
from airtest.core.settings import Settings as ST

# 设置全局的超时时长为60s
ST.FIND_TIMEOUT = 60
ST.FIND_TIMEOUT_TMP = 60

# 设置单条wait语句的超时时长
wait(Template(r"tpl.png", record_pos=(-0.044, -0.177), resolution=(1080, 1920)),timeout=120)

 

from airtest.core.settings import Settings as ST

# PROJECT_ROOT需要填写绝对路径
ST.PROJECT_ROOT = "D:/test/user/project"
using("test1.air")
using("test2.air")

# 如不设置项目根目录,我们可能要这么调用test1.air、test2.air
using("D:/test/user/project/test1.air")
using("D:/test/user/project/test2.air")

 

from airtest.core.api import *

ST.SAVE_IMAGE = False  # 关闭截图
touch((100, 100))  # 这条语句将不会保存当前画面图片

ST.SAVE_IMAGE = True  # 保存截图
touch((100, 100))

生成报告后,第一个touch将没有截图,第二个touch会显示截图

第一个touch

第二个touch

注意:如果要修改全局变量并使其全局有效,记得一定要放在脚本的开头。

 

---------------------------------------------------------------------------------

关注微信公众号即可在手机上查阅,并可接收更多测试分享~

标签:截图,IMAGE,air,TIMEOUT,Airtest,全局变量,FIND
来源: https://www.cnblogs.com/songzhenhua/p/15755534.html