pytest(三)---断言

1.断言

即然是测试框架,自然应该有对测试结果的验证,执行的测试用例是Pass还是Fail,需要有预期结果与实际结果的比对,结果匹配测试结果Pass,反之则失败。pytest使用标准的python 断言验证测试结果的值。
可过以下几种方式进行断言校验:

  • assert a == b 判断a等于b
  • assert a != b 判断a不等于b
  • assert a in b 判断b包含b
  • assert a 判断a为真
  • assert not a 判断a不为真
    在这里插入图片描述
    运行结果如下:
    在这里插入图片描述

2.预期异常

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

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

如果您需要访问实际的异常信息,可以使用:

    with pytest.raises(RuntimeError) as excinfo:

        def f():
            f()
        f()
	assert excinfo.type == RuntimeError
    assert "maximum recursion" in str(excinfo.value)

exinfo是一个ExceptionInfo实例,它是实际引发异常的包装器。主要属性有**.type、.value和.traceback**。
注意:断言type的时候,异常类型是不需要加引号的,断言value值的时候需转str。

可以将match关键字参数传递给上下文管理器进行测试,通过正则表达式是否与异常的字符串表示形式匹配(类似于测试用例.assertraiseregexp来自unittest的方法):

import pytest

def myfunc():
    raise ValueError("Exception 123 raised")
    
def test_match():
    with pytest.raises(ValueError, match=r".* 123 .*"):
        myfunc()

在版本3.0中已修改:上下文管理中,可使用参数message指定自定义失败信息:

with pytest.raises(ZeroDivisionError, message="Expecting ZeroDivisionError"):
    pass

结果:Failed: Expecting ZeroDivisionError

python 2.4中需要使用以下方式来测试预期的异常:

pytest.raises(ExpectedException, func, *args, **kwargs)

3.使用上下文进行对比

pytest在校验对比时提供了丰富的上下文对比信息,例如:

# content of test_assert2.py
def test_set_comparison():
    set1 = set("1308")
    set2 = set("8035")
    assert set1 == set2

可得到以下结果
在这里插入图片描述
对一些特殊情况的用例进行了比较:

  • 比较长字符串:显示上下文差异
  • 比较长序列:显示第一个失败的索引
  • 比较字典:显示不同的key-value键对值

4.举例接口测试时的校验

import pytest

def request_code(act_code=None):
    act_code = 400
    return act_code

def request_meg(act_msg=None):
    act_msg = 'success'
    return act_msg

def test__code():
    assert request_code() == 200

def test_msg():
    assert request_meg() in 'message": "success感谢***提供***赞助'

if __name__ == "__main__":
    pytest.main(['test_assert3.py'])

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值