• APP自动化测试-6.断言处理assert与hamcrest


    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注:

    • assert后放的为表达式,若要定义异常信息,可以如下
    assert 1 > 2, 'this is error message'
    
    • 1

    二、hamcrest断言

    hamcrest是一个以测试为目的,能组合成灵活表达式的匹配器类库,用于编写断言的框架,使用这个框架编写断言,提高开发和测试的效率。

    hamcrest提供了大量的匹配器方法,每个匹配器都用来执行特定的断言比较操作,同时hamcrest可扩展性比较强,能都自定义匹配器。

    hamcrest语法:

    def assert_that(actual, matcher=None, reason=""):
    # actual 为实际值
    # matcher为期望值
    
    • 1
    • 2
    • 3

    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
        
        '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    常用匹配器示例:

    # 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(81))
    
    # contains_string,判断实际值中是否包含某个字符串,contains_string参数为包含或匹配的字符串,实际结果的字符串包含contains_string中定义的字符串即返回True
    	assert_that("this is test message", contains_string("message"))
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    通常actual值需要根据从元素属性中获取


    总结

    简单记录assert的断言,后面根据项目慢慢完善断言的使用。

  • 相关阅读:
    Springboot注解
    大数据学习——Zookeeper集群搭建
    Stream常用操作以及原理探索
    机器学习实战:用SVD压缩图像
    【极客时间2】左耳听风
    JTS:11 Overlaps 部分重叠
    vscode远程连接XHR(wget download failed)解决方法
    35岁测试工程师现状:被生活、房贷车贷压得喘不过气,哪敢谈什么追求~
    最新版阿里云Linux CentOS7 ecs-user用户安装Mysql8详细教程(超简单)
    Linux下connect函数 阻塞 与 非阻塞 问题
  • 原文地址:https://blog.csdn.net/weixin_42517691/article/details/125887094