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


👆对私有云感兴趣能够进入公众号回复“私有云”哦。python


前言


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

使用断言的好处有不少,最明显的几点是:app

  • 能够暴露调用者的错误编辑器

  • 便于调试单元测试

  • 对代码没有代价测试

而且断言在单元测试代码中很是重要,所以咱们很是建议在脚本里使用断言语句,来断定被测应用当前的状态是不是咱们预期中的状态flex

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


Airtest的断言语句


1. 验证UI界面

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

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

  • 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)

2. 验证数值

同时,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的断言语句


1. 断言图片存在于当前页面

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

  • v - 一个图片对象

  • msg - 断言的简短描述,它将被记录在报告中

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

2. 断言元素存在

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"等方法来查找元素。


断言相关的知识


1. 处理断言失败

不管是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点击语句仍是会正常执行:

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

2. assert_exists接口的超时时间和阙值

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

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

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

往期精彩回顾
学会一招,轻轻松松提升遍历pocoUI树的效率
“多机协做”--微信互加好友案例分析
如何用python模拟鼠标和键盘的操做


本文分享自微信公众号 - AirtestProject(AirtestProject)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索