一、前言

学习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 : 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之使用断言指定异常》,再来一个异常的案例,比如除数不能为零,示例代码如下:

# 异常断言
# 异常断言
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/poloyy/category/1690628.html

最新文章

  1. 错误403,You don't have permission to access /index.html on this server.
  2. Windows 搭建 .NET 跨平台环境并运行应用程序
  3. Sublime Text3 (转) 配置 以及快捷键配置
  4. jquery 动画效果插件
  5. 【半平面交】bzoj1038 [ZJOI2008]瞭望塔
  6. 系统架构师JD
  7. iOS开发:AFNetworking、MKNetworkKit和ASIHTTPRequest比较
  8. 【python常用模块】os.path
  9. python3之socket&socketserver网络编程
  10. 也谈Reactor模式
  11. Palindrome POJ - 3974 (字符串hash+二分)
  12. echarts起始角度
  13. springboot+ibatis 多数据源配置
  14. 在flask中使用swagger(flasgger使用方法及效果展示)
  15. python面试题之python下多线程的限制
  16. [MacOS] Genymotion***下载模拟器方法
  17. CPU个数、CPU核心数、CPU线程数
  18. 看起来像是break的考量
  19. E - Let's Go Rolling!
  20. ajax解决跨域

热门文章

  1. 秒懂JVM的三大参数类型,就靠这十个小实验了
  2. 面试官问:Mybatis中的TypeHandler你用过吗?
  3. golang 条件语句 for range 分析
  4. 5.CyclicBarrier-栅栏
  5. XDCMS审计(复现)
  6. Python3基础数据类型(数字、字符串、元组、列表、集合、字典)
  7. golang开发:channel使用
  8. 详细分析 Java 中启动线程的正确和错误方式
  9. SpringBoot-03-JSR303数据校验和多环境切换
  10. 部署项目到服务器 & 搭建博客网站