美文网首页
Pytest学习2 -断言

Pytest学习2 -断言

作者: C1R2 | 来源:发表于2020-10-30 22:25 被阅读0次
一、前言

学习pytest总会习惯性的和unittest对比使用,自然就断言pytest和unittest也是有些区别的。

二、断言对比

unittest 断言

assertEqual(a, b)        # 判断a和b是否相等
assertNotEqual(a, b)     # 判断a不等于b
assertTrue(a)            # 判断a是否为Ture
assertFalse(a)           # 判断a是否为False  
assertIn(a, b)           # a 包含在b里面 
asserNotIn(a, b)         # a 不包含在b里面

pytest 断言
pytest只需要用assert来断言就行,相对更简单而便捷

assert xx :    判断 xx 为真
assert not xx :判断 xx 不为真
assert a in b :判断 b 包含 a
assert a == b :判断 a 等于 b
assert a != b :判断 a 不等于 b
三、pytest示例代码
# -*- coding: utf-8 -*-
# @Time    : xxx
# @Author  : cr
# @FileName: test_assert.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def f():
    return 5;


def test_f():
    n = f()
    assert n % 3 == 0, "判断n 是否能被3整除,当前 n 的值为:%s" % n
    

四、执行结果
pytest -v test_assert.py


图片.png

五、异常断言
结合pytest 断言特点和《Pytest之使用断言指定异常》,再来一个异常的案例,比如除数不能为零,示例代码如下:

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

知识点:
使用pytest.raises,来捕获对应的异常示例,exceptionInfo为一个对象示例来接收属性信息,通常是断言异常的 type 和 value 值

1、使用match断言
match 关键字是测试正则表达式与异常的字符串表示形式是否匹配
这种方法只能断言value,不能断言类型
示例代码如下:

# match的使用
def test_zero_division_match():
    with pytest.raises(ZeroDivisionError, match=".*zero.*") as exceptionInfo:
        100 / 0
    # 也可以这样
    with pytest.raises(ZeroDivisionError, match="zero") as exceptionInfo:
        100 / 0
        

match 方法的regexp参数与 re.search 函数匹配,因此在上面的示例中 match='zero' 也可以使用

2、检查断言装饰器使用
示例代码如下:

# 断言装饰器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
    1 / 0
    

个人觉得这个断言装饰器,和java的注解类似,相对更轻量快捷

3、执行结果

知识点
代码抛出异常,但是和raises指定的异常类相匹配,所以不会断言失败
它相当于一个检查异常装饰器,功能:检查是否有异常,不确定是否有异常
with pytest.raise(ZeroDivisionError) 对于故意测试异常代码的情况,使用可能会更好
而@pytest.mark.xfail(raises=ZeroDivisionError) 对于检查未修复的错误(即,可能会发生异常),使用检查断言可能会更好


参考链接
https://www.cnblogs.com/longronglang/p/13848899.html
系列参考文章:
https://www.cnblogs.com/poloyy/category/1690628.html

相关文章

网友评论

      本文标题:Pytest学习2 -断言

      本文链接:https://www.haomeiwen.com/subject/xrklvktx.html