zoukankan      html  css  js  c++  java
  • pytest七:assert断言

    断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?
    简单来讲就是实际结果和期望结果去对比,符合预期那就测试 pass,不符合预期那就测试 failed

    pytest 允许使用标准 Python 断言来验证 Python 测试中的期望和值。例如

    断言 f()函数的返回值,接下来会看到断言失败,因为返回的值是 3,判断等于 4,所以失败了
    从报错信息可以看到断言失败原因:E assert 3 == 4

    import pytest

    def f():
    return 3

    def test_function():
    assert f() == 4

    if __name__=='__main__':
    pytest.main()


    异常信息
    接下来再看一个案例,如果想在异常的时候,输出一些提示信息,这样报错后,就方便查看是什么原因了

     

    这样当断言失败的时候,会给出自己写的失败原因了
    E AssertionError: 判断 a 为偶数,当前 a 的值为:3

    import pytest

    def f():
    return 3

    def test_function():
    a = f()
    assert a % 2 ==0, f'判断a为偶数,当前a的值为:{a}'

    if __name__=='__main__':
    pytest.main()


    异常断言:为了写关于引发异常的断言,可以使用 pytest.raises 作为上下文管理器,如下

    import pytest

    def test_zero_division():
    with pytest.raises(ZeroDivisionError):
    1 / 0

    if __name__=='__main__':
    pytest.main()

     如果我们要断言它抛的异常是不是预期的,比如执行:1/0,预期结果是抛异常:ZeroDivisionError: division by zero,那我们要断言这个异常,通常是断言异常的 type 和 value 值了。

    这里 1/0 的异常类型是 ZeroDivisionError,异常的 value 值是 division by zero,于是用例可以这样设计

    excinfo 是一个异常信息实例,它是围绕实际引发的异常的包装器。主要属性是.type、 .value 和 .traceback
    注意:断言 type 的时候,异常类型是不需要加引号的,断言 value 值的时候需转 str
    在上下文管理器窗体中,可以使用关键字参数消息指定自定义失败消息

     

    import pytest

    def test_zero_division():
    ''' 断言异常 '''
    with pytest.raises(ZeroDivisionError) as excinfo:
    1 / 0
    # 断言异常类型 type
    assert excinfo.type == ZeroDivisionError
    # 断言异常value值
    assert 'division by zero' in str(excinfo.value)


    常用断言

    pytest 里面断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种
    assert xx 判断 xx 为真
    assert not xx 判断 xx 丌为真
    assert a in b 判断 b 包含 a
    assert a == b 判断 a 等于 b
    assert a != b 判断 a 不等于 b

    import pytest

    def is_true(a):
    if a > 0:
    return True
    else:
    return False

    def test_01():
    '''断言xx为真'''
    a = 5
    b = -1
    assert is_true(a)
    assert not is_true(b)

    def test_02():
    '''断言b包含a'''
    a = 'hello'
    b = 'hello world'
    assert a in b

    def test_03():
    '''断言相等'''
    a = "XXX"
    b = "XXX"
    assert a == b

    def test_04():
    '''断言不等于'''
    a = 5
    b = 6
    assert a != b

    if __name__ == "__main__":
    pytest.main()
    
    
    
    
  • 相关阅读:
    python列表、字典、循环结构练习题
    python的数据类型
    git配置子模块
    zabbix通过jmx采用默认tomcat模板监控tomcat好多值不支持的问题排查
    阿里云ecs自定义监控项
    开源跳板机jumpserver的安装部署和使用详细教程及踩坑经验
    kubernetes介绍
    git使用方法
    20199323 2019-2020-2 《网络攻防实践》第4周作业
    20199323 2019-2020-2 《网络攻防实践》第3周作业
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/9681002.html
Copyright © 2011-2022 走看看