zoukankan      html  css  js  c++  java
  • 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

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

    • 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

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

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

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

  • 相关阅读:
    django实战-XX学院选课系统
    django学习记录
    WEB前端--CSS样式优先级
    python中__str__和__repr__的区别
    转载--SqlAlchemy ORM 学习
    转载---Python模块学习optparse 处理命令行参数
    转载--Python之路,进程、线程、协程篇(原文地址:http://www.cnblogs.com/alex3714/articles/5230609.html)
    python学习---模拟人生
    python学习---购物商场与ATM
    解决"回调地狱"的发展过程
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/15755534.html
Copyright © 2011-2022 走看看