学习pytest总会习惯性的和unittest对比使用,天然就断言pytest和unittest也是有些区别的。html
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只须要用assert来断言就行,相对更简单而便捷java
assert xx :判断 xx 为真 assert not xx :判断 xx 不为真 assert a in b :判断 b 包含 a assert a == b :判断 a 等于 b assert a != b :判断 a 不等于 b
# -*- coding: utf-8 -*- # @Time : 2020/10/20 19:37 # @Author : longrong.lang # @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 断言特色和《Pytest之使用断言指定异常》,再来一个异常的案例,好比除数不能为零,示例代码以下:python
# 异常断言 # 异常断言 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 值正则表达式
示例代码以下:函数
# 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' 也可使用学习
示例代码以下:测试
# 断言装饰器 @pytest.mark.xfail(raises=ZeroDivisionError) def test_f(): 1 / 0
我的以为这个断言装饰器,和java的注解相似,相对更轻量快捷code
代码抛出异常,可是和raises指定的异常类相匹配,因此不会断言失败
它至关于一个检查异常装饰器,功能:检查是否有异常,不肯定是否有异常
with pytest.raise(ZeroDivisionError) 对于故意测试异常代码的状况,使用可能会更好
而@pytest.mark.xfail(raises=ZeroDivisionError) 对于检查未修复的错误(即,可能会发生异常),使用检查断言可能会更好regexp
装饰器这部分还没学习,后续继续更新,先放一放htm
系列参考文章:
https://www.cnblogs.com/poloyy/category/1690628.html