• Airtest1.2.7新增断言API介绍


    1. 前言
    1.2.7版本的Airtest中,一个很重要的功能是 新增了非常丰富的断言API ,今天我们就来详细看一下Airtest都给我们提供了哪些断言语句。

    2. 旧版Airtest提供的断言语句
    先回顾下,旧版Airtest一直以来,都只给我们提供了2种断言语句,一种是断言目标存在/不存在当前页面:

    assert_exists
    assert_not_exists
    另一种是断言2个值相等/不相等:

    assert_equal
    assert_not_equal
    1)断言目标存在/不存在当前画面

    1. assert_exists(Template(r"tpl1665570124249.png", record_pos=(0.118, -0.026), resolution=(720, 1440)), "请填写测试点")
    2. assert_not_exists(Template(r"tpl1665570165989.png", record_pos=(0.118, -0.032), resolution=(720, 1440)), "请填写测试点")

    2)断言2个值相等/不相等

    1. assert_equal(poco("score").get_text(), "100", "分数为100分")
    2. assert_not_equal(poco("score").get_text(), "0", "分数不为0")

    3. 新版Airtest新增的断言语句

    而Airtest1.2.7版本,又给我们新增了14个断言的API,包含断言表达式为True或者False(bool)、断言表达式为空/不为空、断言2个值的大小情况等:

    1)断言表达式为True/False(bool)

    1. from airtest.core.assertions import *
    2. # 断言表达式为True
    3. assert_true(1==1, msg="assert 1==1")
    4. # 断言表达式为False
    5. assert_false(1==2, msg="assert 1!=2")

     2)断言2个对象相同/不相同

    1. from airtest.core.assertions import *
    2. # 断言2个对象相同
    3. assert_is(1, 1, msg="assert 1 is 1")
    4. # 断言2个对象不相同
    5. assert_is_not(1, 2, msg="assert 1 is not 2")

    3)断言表达式为None/不为None

    1. from airtest.core.assertions import *
    2. # 断言表达式为None
    3. assert_is_none(None, msg="assert None is None")
    4. # 断言表达式不为None
    5. assert_is_not_none(1, msg="assert 1 is not None")

    4)断言第一个参数是否在第二个参数中(包含关系)

    1. from airtest.core.assertions import *
    2. # 断言第一个参数在第二个参数中
    3. assert_in(1, [1, 2], msg="assert 1 in [1, 2]")
    4. # 断言第一个参数不在第二个参数中
    5. assert_not_in(3, [1, 2], msg="assert 3 not in [1, 2]")

    5)断言对象是不是某种类型的实例

    1. from airtest.core.assertions import *
    2. # 断言对象是某种类型的实例
    3. assert_is_instance(1, int, msg="assert 1 is int")
    4. # 断言对象不是某种类型的实例
    5. assert_not_is_instance(1, str, msg="assert 1 is not str")

    这个断言语句中,第一个参数为obj,是一个具体的对象实例,第二个参数为cls,是一种类型,我们可以用这个断言来判断某个实例是不是属于某种类型的。

    不过这个断言,在AirtestIDE中执行会报一个错误,我们会在下个版本修复这个问题:

    TypeError: can't pickle mappingproxy objects
    

    6)断言第一个值大于/大于等于第二个值

    1. from airtest.core.assertions import *
    2. # 断言第一个值大于第二个值
    3. assert_greater(2, 1, msg="assert 2 > 1")
    4. # 断言第一个值大于等于第二个值
    5. assert_greater_equal(1, 1, msg="assert 1 >= 1")
    7)断言第一个值小于/小于等于第二个值
    1. from airtest.core.assertions import *
    2. # 断言第一个值小于第二个值
    3. assert_less(1, 2, msg="assert 1 < 2")
    4. # 断言第一个值小于等于第二个值
    5. assert_less_equal(1, 1, msg="assert 1 <= 1")

    4. 拓展:Airtest断言的msg参数说明

    可以看到,所有Airtest的断言语句中,都包含msg参数,这个参数是为了方便我们给当前的断言语句增加一个说明,并且该说明会显示在Airtest报告,断言步骤的描述上:

    5. 拓展:Airtest断言的snapshot参数说明
    从Airtest1.2.7版本起,断言还新增了一个snapshot的参数,为了支持同学们在设置断言时,还能附带截取当前画面的图片,然后显示在Airtest报告中。

    当然如果我们不需要断言截图的话,也可以设置关闭断言的截图:

    1. # 默认情况下,断言截图会开启
    2. assert_is_not_none("1", msg="assert '1' is not None")
    3. # 如不需要断言时截取当前画面,则可以设置关闭断言的截图
    4. assert_is_not_none("1", msg="assert '1' is not None",snapshot=False)

    1)assert_exists关闭截图的特殊说明

    比较特别的是,assert_exists 默认也是带截图的,但是要设置这个步骤不截图,不能使用 snapshot=False 来设置,而是要通过Airtest的全局设置来控制:

    1. ST.SAVE_IMAGE = False
    2. assert_exists(Template(r"tpl1665719197992.png", "请填写测试点"))

     assert_not_exists 也是同理。如果给assert_exists强行传入snapshot=False,则会报错:

    TypeError: assert_exists() got an unexpected keyword argument 'snapshot'
    

    最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

    文档获取方式:

    加入我的软件测试交流群:632880530免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

    这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

    以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

  • 相关阅读:
    用于工业物联网和自动化的 Apache Kafka、KSQL 和 Apache PLC4
    通讯录管理系统C++版本
    在Qt creator中使用多光标
    岩土工程安全监测无线振弦采集仪在无线组网的关键要点
    计算机设计大赛 题目:基于python的验证码识别 - 机器视觉 验证码识别
    应急启动电源+充气一体式方案设计
    zip包解压时报malformed input off : 0, length : 1
    【技术美术知识储备】纹理基础2.0-凹凸映射
    java学习day7(Java基础)方法和封装
    05方法的定义,调用重载
  • 原文地址:https://blog.csdn.net/yjt2045263063/article/details/133684571