APP自动化测试-6.断言处理assert与hamcrest
前言
主要记录一下常规断言assert的常用场景和hamcrest断言的简单使用
提示:以下是本篇文章正文内容,下面案例可供参考
一、assert断言
自动化测试中断言通常分为两种
元素存在判断,可以通过坐标或通过目标元素是否存在某个属性来判断,示例如下:
# 通过坐标判断元素是否存在
element = self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("点击登录")')
assert int(element.size['width']) > 1
assert int(element.size['height']) > 1
# 通过元素属性判断元素是否存在
ele_text = self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("点击登录")').text
assert '登录' in ele_text
注:
- assert后放的为表达式,若要定义异常信息,可以如下
assert 1 > 2, 'this is error message'
二、hamcrest断言
hamcrest是一个以测试为目的,能组合成灵活表达式的匹配器类库,用于编写断言的框架,使用这个框架编写断言,提高开发和测试的效率。
hamcrest提供了大量的匹配器方法,每个匹配器都用来执行特定的断言比较操作,同时hamcrest可扩展性比较强,能都自定义匹配器。
hamcrest语法:
def assert_that(actual, matcher=None, reason=""):
# actual 为实际值
# matcher为期望值
hamcrest匹配器:
'''
对象
equal_to - 匹配相等的对象
has_length - 匹配长度 len(item)
has_property - 匹配属性值
has_properties - 匹配包含所有属性值的对象
has_string - 匹配字符串 str(item)
instance_of - 匹配对象的类型
none, not_none - 匹配None或not None
same_instance - 匹配相同的对象
calling, raises - calling和raise结合使用
数字
close_to - 匹配接近的数字
greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to - 匹配数字大小
文本
contains_string - 匹配包含字符串
ends_with - 匹配以字符串结尾
equal_to_ignoring_case - 匹配完整字符串且忽略大小写
equal_to_ignoring_whitespace - 匹配完整的字符串且忽略空白字符
starts_with - 匹配以字符串开始
string_contains_in_order- 在相对位置,匹配部分字符如string_contains_in_order("bc", "fg", "jkl")将会匹配abcdefghijklm
逻辑
all_of - 匹配所有指定的匹配项 and
any_of - 匹配其中任意一个匹配项 or
anything - 匹配任何条件,等效于true
is_not - 匹配相反的条件,如assert_that(cheese, is_not(equal_to(smelly)))
not_ - 等效于is_not 如 assert_that(alist, not_(has_item(item)))
序列
contains_exactly - 匹配完整的序列,排序也要一致
contains_inanyorder - 匹配完整的序列,不要求排序一致
has_item - 匹配序列中指定的元素
has_items - 匹配序列中指定的多个元素,不要求排序
is_in - 匹配元素是否在指定序列中
only_contains - 匹配序列是否在指定list中出现
empty - 匹配空序列
字典
has_entries - 匹配字典多个键值对
has_entry - 匹配字典键值对
has_key - 匹配字典的key
has_value - 匹配字典的value
'''
常用匹配器示例:
# equal_to 比较对象相等
assert_that(10, equal_to(10))
# close_to 匹配接近的数字,close_to中的2个参数第一个是期望的值,比如为8,第二个参数为浮动空间,比如为1,那么实际值在区间:8+1与8-1之内即为true
assert_that(9, close_to(8, 1))
# contains_string,判断实际值中是否包含某个字符串,contains_string参数为包含或匹配的字符串,实际结果的字符串包含contains_string中定义的字符串即返回True
assert_that("this is test message", contains_string("message"))
通常actual值需要根据从元素属性中获取
总结
简单记录assert的断言,后面根据项目慢慢完善断言的使用。