首页 > 其他分享 >Airtest1.2.7新增的14个断言API解析

Airtest1.2.7新增的14个断言API解析

时间:2023-08-20 18:22:45浏览次数:35  
标签:try 截图 断言 except assert API 参数 Airtest1.2 14

以下基于
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

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

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

标签:try,截图,断言,except,assert,API,参数,Airtest1.2,14
From: https://www.cnblogs.com/songzhenhua/p/17644352.html

相关文章

  • FastApi-1-结合sql 增/查demo
    目录FastAPI学习记录项目结构部分接口/代码展示感受全部代码FastAPI学习记录fastapi已经学习有一段时间,今天抽时间简单整理下。官网介绍:FastAPI是一个用于构建API的现代、快速(高性能)的web框架,使用Python3.6+并基于标准的Python类型提示。快速:可与NodeJS和Go......
  • 西农OJ P1491 城市电话号码
    题目描述某城市电话号码包括地区码、前缀、有效号码三部分组成,其中地区码是0-4位数字;前缀是以非0开头的3位数字,有效号码是4位数字,各部分之间用减号(-)分隔,地区码为空时地区码与前缀之间不包含分隔符。请编写函数检测输入号码num的有效性,若输入号码符合上述规定返回0,否则返回1。函......
  • python采集京东商品详情页面数据,京东API接口,京东h5st签名(2023.08.20)
    一、原理与分析1、目标页面https://item.jd.com/6515029.html  在chrome中打开,按f12键进入开发者模式,找到商品详情数据接口,如下:2、URL链接:https://api.m.jd.com/?appid=pc-item-soa&functionId=pc_detailpage_wareBusiness&client=pc&clientVersion=1.0.0&t=1692499380806&bod......
  • 第二十三节 API(算法,lambda,练习)
    常见的七种查找算法:​ 数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构,再回头看算法。1.基本查找​ 也叫做顺序查找​说明:顺序......
  • PHP简单ChatGPT API对接方法
    <?php$chat=$_GET['chat'];//设置参数$data=array('model'=>'gpt-3.5-turbo','messages'=>array(array('role'=>'system','content'=>'Your_GP......
  • api分享103.216.155.x
    在日常生活中,我们有很多类似api场景,比如电脑需要调用手机里面的信息,这个时候会拿一个数据线将电脑和手机连接起来,电脑和手机连接数据线的接口就是我们所说的api接口。常见web接口是http/https协议的接口,API是处理系统之间数据传输的媒介。在API调用过程中,客户端会通过API发送请求,A......
  • mondb核心api
    和mysql一样需要先定义一个类加上注解@Document("ap_associate_words"),ap_associate_words表示哪个表的名称保存或者修改,该对象有id表示修改,无id表示新增mongoTemplate.save(保存的对象)查询一个对象mongotemplate.findById("id",类.class)多条件查询Queryquery=Query.......
  • 8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状
    当你使用GitLabAPI并收到状态码400,这通常意味着你发送的请求是“坏的”或格式不正确。以下是一些建议,帮助你解决问题:1.**验证请求正文**:确保你提供的请求正文(如果有的话)是正确的并符合API的预期格式。对于触发管道的API,你可能需要提供有关分支、变量等的信息。2.**检查URL*......
  • 如何使用U盘安装Ubuntu 14.04
    对于做运维的同学来说U盘装个系统不就是分分钟的事吗,这有什么好说的?可偏偏通过U盘安装Ubuntu却是问题重重,下面我们就来说说几个U盘安装UbuntuServer时遇到的问题。对于做运维的同学来说U盘装个系统不就是分分钟的事吗,这有什么好说的?U盘安装系统一般就是如下几步:下载系统......
  • 114514
    个人认为我的思路是比较自然的。首先,显然\(\gcd(a_i,a_j,a_k,a_l)=1\)是不好做的,考虑将其转换成总方案数减去\(\gcd(a_i,a_j,a_k,a_l)\neq1\)的方案数。记后半部分为\(num\),则原问题等价于求\(\binomn4-num\)。考虑怎么求\(num\),显然有\(\gcd(a_i,a_j,a_k,a_l)......