测试同学都应该知道的断言知识...

简介: 测试同学都应该知道的断言知识...

前言



在编写代码的时候,我们经常会做出一些假设,断言的作用就是在代码中捕捉这些假设。

使用断言的好处有很多,最明显的几点是:


  • 可以暴露调用者的错误
  • 便于调试
  • 对代码没有代价


并且断言在单元测试代码中非常重要,因此我们非常建议在脚本里使用断言语句,来判定被测应用当前的状态是否是我们预期中的状态。


下文将详细讲解在Airtest和Airtest-selenium中提供的断言接口。


Airtest的断言语句



验证UI界面


Airtest给我们提供了assert_existsassert_not_exists两个接口,来断言一张图片存在或不存在于当前画面中。


这俩个接口都支持AndroidiOSWindows平台,它们的参数如下:


  • v – 要检查的目标
  • msg – 断言的简短描述,它将被记录在报告中


比如,我们以当前设备屏幕上存在天气应用的icon,来判断当前设备上存在天气应用的app为例,就可以写出如下的断言:


assert_exists(Template(r"tpl1578970400453.png", record_pos=(-0.345, 0.142), resolution=(1080, 1920)), "存在天气应用")
复制代码



此刻的参数v是一张天气应用的icon,填写的msg也会在对应的断言步骤上显示出来。需要注意的是,目前只有airtest版本为1.1.1时才支持显示断言信息,1.2.2版本的IDE内嵌的airtest版本并不是1.1.1,所以暂不支持显示断言信息。



(该报告用命令行生成,本地airtest版本为1.1.1)


验证数值


同时,airtest还提供了assert_equalassert_not_equal两个接口,来断言传入的两个值相等或者不相等。


跟上述的俩个接口一样,这俩个接口也支持AndroidiOSWindows平台。它们的参数如下:


  • first – 第一个值
  • second – 第二个值
  • msg – 断言的简短描述,它将被记录在报告中


大多数情况下,这俩个接口用于判断控件的某个属性值与预期值是否相等,例如:


# assert_equal("实际值", "预测值", "请填写测试点.")
# 获取控件的“text”属性值
value = poco("com.miui.calculator:id/btn_8_s").attr("text")
assert_equal(value, "8", "按钮值为8")
复制代码


如示例代码所示,这里通过poco获取了一个控件的“text”属性值,然后再通过断言来判断这个属性值是否为“8”。填写的msg依旧会显示在报告的断言信息上。



Airtest-selenium的断言语句



断言图片存在于当前页面


Airtest-Selenium给我们提供了assert_template()接口,用于断言目标存在于当前页面中,它包含以下参数:


  • v - 一个图片对象
  • msg - 断言的简短描述,它将被记录在报告中


# 断言当前页面存在百度logo这张图片
driver.assert_template(Template(r"tpl1578993813194.png", record_pos=(12.32, 3.915), resolution=(100, 100)), "成功打开百度网页")
复制代码



断言元素存在


assert_exist()接口用来断言页面存在某个元素,它的参数与其它断言相比比较特殊:


  • param - 方法的参数
  • operation - 查找元素的方法
  • msg - 断言的简短描述,它将被记录在报告中


# 断言当前页面存在“百度新闻”的页面元素
driver.assert_exist("//a[@href='http://news.baidu.com']", "xpath", "存在百度新闻元素")
复制代码



示例代码中的参数"xpath"代表用"xpath"这个方法来查找页面元素,该元素的"xpath"属性值为"//a[@href='http://news.baidu.com']";同理,还可以用"id""name"等方法来查找元素。


断言相关的知识



处理断言失败


不论是airtest提供的断言接口,还是Airtest-selenium提供的断言接口,如果断言失败,都会引发AssertionError,从而导致脚本执行终止;如果不想脚本因为一个断言失败就终止,可以将断言用try语句包起来


value = poco("com.miui.calculator:id/btn_8_s").attr("text")
try:
    assert_equal(value, "8", "按钮值为8")
except AssertionError:
    print("按钮值断言失败")
poco("com.miui.calculator:id/btn_9_s").click()
复制代码


这样即使断言失败,后面的poco点击语句还是会正常执行:



否则断言失败时,脚本会直接报错,终止运行:



assert_exists接口的超时时间和阙值


assert_existsassert_not_exists这两个接口是用来验证某个图片是否存在于当前设备屏幕上,在查找图片时,它们会有一个超时时间和阙值:



从源码中可以得知,这俩接口查找图片的超时时间和阙值都是全局变量,timeout为20s,threasold为0.7,所以脚本只有在20s内找到置信度>0.7的结果,断言才会成功。


如果想要修改这俩个接口查找图片的超时时间和阙值,把对应俩个全局变量的值修改即可。

相关文章
|
11月前
|
人工智能 并行计算 安全
从零到一,打造专属AI王国!大模型私有化部署全攻略,手把手教你搭建、优化与安全设置
【10月更文挑战第24天】本文详细介绍从零开始的大模型私有化部署流程,涵盖需求分析、环境搭建、模型准备、模型部署、性能优化和安全设置六个关键步骤,并提供相应的示例代码,确保企业能够高效、安全地将大型AI模型部署在本地或私有云上。
3152 7
|
存储 算法 vr&ar
精通 Python OpenCV4:第二部分
精通 Python OpenCV4:第二部分
220 0
|
存储 Java 索引
|
存储 大数据 Apache
大数据治理系统框架Apache Atlas实践
大数据元数据和数据管理框架 Apache Atlas实践 今天技术小伙伴占卫同学分享了Apache Atlas元数据管理实践,被atlas的强大的血缘关系管理能力震撼,以下为本次分享内容: •Apache Atlas简介 •Apache Atlas架构 ...
10035 0
|
Linux Docker 容器
安装新版本Docker报错container-selinux >= 2:2.74 - 蓝易云
以上步骤应该能够帮助你解决遇到的问题。如果问题仍然存在,你可能需要寻求专业的技术支持。
3012 0
|
存储 Java 测试技术
滚雪球学Java(30):多维数组:定义和初始化一次搞定
【5月更文挑战第5天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
251 0
滚雪球学Java(30):多维数组:定义和初始化一次搞定
|
存储 Java
Java 可变参数:灵活的函数调用艺术
【4月更文挑战第21天】
218 1
|
JavaScript 安全 前端开发
js控制浏览器前进、后退、页面跳转
js控制浏览器前进、后退、页面跳转
228 3
|
缓存 中间件 API
FastAPI
【2月更文挑战第1天】FastAPI是一个用于构建API的现代、快速的Python Web框架,具有以下特点:
318 9
|
自然语言处理 中间件 开发者
Django的国际化与本地化支持:打造多语言应用
【4月更文挑战第15天】Django,一款强大的Web框架,内置出色的支持国际化和本地化功能,使得创建多语言应用变得简单。本文介绍了国际化(i18n)与本地化(l10n)的概念,阐述了Django的相应机制,包括标记可翻译字符串、提取与翻译、设置语言和地区、本地化格式处理。遵循文中步骤,开发者能有效构建适应不同语言和地区需求的Web应用,提升用户体验。