Airtest1.2.7新增的14个断言API解析
以下基于
python3.8;airtestIDE1.2.14;airtest1.2.7;pocoui1.0.87
Airtest1.2.7新增了14个断言API,使得断言更多丰富,之前就有的4个断言:assert_exists、assert_not_exists、assert_equal、assert_not_equal,详细可以看:Airtest API精讲之断言,这里就不再过多介绍。
之前想断言一个变量是不是大于10,可以这样写:
a = 11
assert_equal(a>10, True)
像这次新加了一个assert_greater(),就可以这样写了:
a = 11
assert_greater(a, 10)
其实本质上没有任何区别,只是读代码方式变了,哪种更好用看自己习惯吧,那么下面就来看看具体都是哪14个吧。
新增断言
# __author__ = '测试工程师小站'
# __title__ = '断言测试'
from airtest.core.api import *
from airtest.report.report import simple_report
from airtest.core.assertions import *
auto_setup(__file__, devices=["android:///"], logdir=True)
# 断言参数1为True,成功的情况
assert_true(True, 'assert_true')
# 断言参数1为True,失败的情况
try:
assert_true(False, 'assert_true')
except:
pass
# 断言参数1为False,成功的情况
assert_false(False, 'assert_false')
# 断言参数1为False,失败的情况
try:
assert_false(True, 'assert_false')
except:
pass
# 断言参数1、参数2内存地址是否一样,成功的情况
assert_is('a', 'a', 'assert_is')
# 断言参数1、参数2内存地址是否一样,失败的情况
try:
assert_is('a', 'a1', 'assert_is')
except:
pass
# 断言参数1、参数2内存地址是否不一样,成功的情况
assert_is_not('a', 'a1', 'assert_is_not')
# 断言参数1、参数2内存地址是否不一样,失败的情况
try:
assert_is_not('a', 'a', 'assert_is_not')
except:
pass
# 断言参数1为None,成功的情况
assert_is_none(None, 'assert_is_none')
# 断言参数1为None,失败的情况
try:
assert_is_none('a', 'assert_is_none')
except:
pass
# 断言参数1不为None,成功的情况
assert_is_not_none('a', 'assert_is_not_none')
# 断言参数1不为None,失败的情况
try:
assert_is_not_none(None, 'assert_is_not_none')
except:
pass
# 断言参数1在参数2中,成功的情况
assert_in('a', ['a', 'b'], 'assert_in')
# 断言参数1在参数2中,失败的情况
try:
assert_in('a', ['a1', 'b'], 'assert_in')
except:
pass
# 断言参数1不在参数2中,成功的情况
assert_not_in('a', ['a1', 'b'], 'assert_not_in')
# 断言参数1不在参数2中,失败的情况
try:
assert_not_in('a', ['a', 'b'], 'assert_not_in')
except:
pass
# 断言参数1是参数2的实例,成功的情况
assert_is_instance(1, int, msg='assert_is_instance')
# 断言参数1是参数2的实例,失败的情况
try:
assert_is_instance('1', int, msg='assert_is_instance')
except:
pass
# 断言参数1不是参数2的实例,成功的情况
assert_not_is_instance(1, str, 'assert_not_is_instance')
# 断言参数1不是参数2的实例,失败的情况
try:
assert_not_is_instance('a', str, 'assert_not_is_instance')
except:
pass
# 断言参数1>参数2,成功的情况
assert_greater(2, 1, 'assert_greater')
# 断言参数1>参数2,失败的情况
try:
assert_greater(2, 3, 'assert_greater')
except:
pass
# 断言参数1>=参数2,成功的情况
assert_greater_equal(2, 2, 'assert_greater_equal')
# 断言参数1>=参数2,失败的情况
try:
assert_greater_equal(2, 3, 'assert_greater_equal')
except:
pass
# 断言参数1<参数2,成功的情况
assert_less(0, 1, 'assert_less')
# 断言参数1<参数2,失败的情况
try:
assert_less(2, 1, 'assert_less')
except:
pass
# 断言参数1<=参数2,成功的情况
assert_less_equal(1, 1, 'assert_less_equal')
# 断言参数1<=参数2,失败的情况
try:
assert_less_equal(2, 1, 'assert_less_equal')
except:
pass
simple_report(__file__)
运行之后我们可以看下报告,断言失败时是会终止运行的,但我们上面把失败的断言都try起来了,所以不会中断运行。可以看到报告左边是断言以及msg,右边显示具体的断言内容,以及一张当时的截图。断言加截图我很早就给官方提了建议,算是实现了!
断言是测试中很重要的部分,断言通过的情况下我们可能不太关心,但断言失败的时候,就会非常想知道当时到底是怎样的情况,加一张当时状态的截图是很有必要的,因为App是动态的。比如断言的时候正好其他App或系统弹了个窗,导致运行失败,但弹窗5秒后自动消失了。如果没有截图,我们永久不可能知道当时发生了什么。
断言参数
断言有2个共同的参数,msg和snapshot:
msg是此次断言的描述,默认为空,可以是中文;这个是一定要写的,不然你都不知道这个断言是干嘛的。
snapshot是断言时是否截图,默认为True,不要可以False,强烈建议截图。
上面的例子都写了msg以及截图,你也可以不截图,如
assert_less_equal(1, 1, msg='断言金额是否小于1', snapshot=False)
注意assert_exists是特殊的,它没有snapshot参数!!!
他是通过全局变量ST.SAVE_IMAGE来控制的,默认值是True,即截图,如果不想截图
ST.SAVE_IMAGE = False
assert_exists(Template(r"tpl16657992.png", "想不到有什么情况不截图的"))
ST.SAVE_IMAGE = True # 如果想后面继续截图,就加这句,想整个脚本都不截图,就不要加
assert_not_exists同上。
但是,但是,ST.SAVE_IMAGE不光控制断言是否截图,所有操作(点击、滑动等)都是这个全局变量控制的,这个一定要注意!
想不通为什么官方不统一给assert_exists、assert_not_exists加上snapshot参数并脱离ST.SAVE_IMAGE的控制。
ST全局变量,详情可以看:Airtest之全局变量
断言API代码文档可看:
https://airtest.readthedocs.io/en/latest/all_module/airtest.core.assertions.html
---------------------------------------------------------------------------------
关注微信公众号即可在手机上查阅,并可接收更多测试分享~