ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Airtest之全局变量

2022-01-01 16:04:04  阅读:356  来源: 互联网

标签:截图 IMAGE air TIMEOUT Airtest 全局变量 FIND


上期回顾: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

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

  • LOG_DIR和LOG_FILE:设置生成LOG的目录和文件名,这个一般情况下我们就用默认的就好了,对Python不熟悉的话自定义设置后可能导致无法生成日志和报告

  • RESIZE_METHOD:分辨率适配规则,用默认的即可。具体原理稍有复杂,引用官网原文:

在使用不同分辨率的设备进行图像识别时,可能会导致识别成功率不佳,因此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"]
  • THRESHOLD:图片识别的阙值。详情可以看之前的文章Airtest-API精讲之Template

  • OPDELAY:操作之间的间隔,保持默认就好。但如果你力求稳定,想让每个操作之前多停一会,可以调大。

  • FIND_TIMEOUT和FIND_TIMEOUT_TMP:在Airtest源码分析--图像识别整体流程中我们讲了,图像识别是在一个指定时间内进行的,超时则认为失败。FIND_TIMEOUT和FIND_TIMEOUT_TMP分别为长、短超时时间。
    使用FIND_TIMEOUT的接口有:assert_exists()、touch()、wait()、swipe() 等;
    使用FIND_TIMEOUT_TMP的接口有:assert_not_exists()、exists() 等。

    全局变量是在全局生效的,在一些接口中还可以自定义超时时间,如:

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")

 

  • SNAPSHOT_QUALITY和IMAGE_MAXSIZE:分别表示截图精度和截图大小,以用在报告中。Airtest核心API汇总 第12点snapshot中有详细示例

  • SAVE_IMAGE:是否保存脚本运行过程中截图。保存截图会体现在报告中,以图片显示当时的截图以及操作的点位,如:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有