初识 pytest 及断言使用
章节目录:
- 一、pytest 相关概述
- 二、环境搭建
- 三、使用前提
- 四、断言
- 4.1 常用断言
- 4.2 异常断言
- 4.3 断言装饰器
- 五、结束语
一、pytest 相关概述
pytest 是一个基于 Python 编写的测试框架,用于编写和运行各种类型的软件测试。它提供了丰富的功能和灵活的语法,用于组织、执行和报告测试结果。它具有以下优点:
- 简单易用:pytest 的语法简洁明了,学习曲线相对较低,不需要太多的配置和编写代码就可以开始编写测试用例。
- 自动化和自动发现:pytest 能够自动发现和收集测试用例,无需手动编写测试套件。它根据约定的命名规则在你的代码中自动找到测试函数或方法。
- 多样化的断言库:pytest 支持多种断言库,如
assert
语句、unittest 库的断言方法、第三方库如pytest_assert等。这使得编写和阅读断言变得更加直观和灵活。 - 丰富的插件生态系统:pytest 有一个庞大的插件生态系统,可以扩展它的功能。这些插件可以帮助你进行性能测试、代码覆盖率分析、多线程测试等,使测试过程更加高效和全面。
- 并行执行测试用例:pytest 支持并行执行测试用例,可以加快测试的速度,提高测试效率。
- 集成于开发环境:pytest 可以与常见的开发环境集成,如 PyCharm、VSCode 等,提供了便捷的测试运行和调试功能。
二、环境搭建
- 解释器:python 3.x
- IDE:pycharm
- 通过IDE 安装 pytest:
- 设置默认运行:
三、使用前提
在使用 pytest 编写测试用例时,按照一定的规则可以确保测试用例被正确识别和执行。
- 文件名:
test_
*.py 文件和 *_test
.py。 - 类:以
Test
开头,不能包含__init__(self)
方法。 - 函数:以
test_
开头。 - 所有的包 package 必须要有 __init__.py 文件。
四、断言
在 pytest 中,使用
assert
来定义断言。assert
语句接受一个条件表达式作为参数,如果条件为假,则断言失败,pytest 会将其报告为一条测试失败的消息。
4.1 常用断言
-
assert
xx :判断 xx 为真 -
assert
not xx :判断 xx 不为真 -
assert
a in b :判断 b 包含 a -
assert
a == b :判断 a 等于 b -
assert
a != b :判断 a 不等于 b -
代码示例:
num = 11
assert num % 2 == 0, "当前值 %s 不是偶数。" % num
# AssertionError: 当前值 11 不是偶数。
4.2 异常断言
可以使用
pytest.raises()
作为上下文管理器,当抛出异常时可以获取到对应的异常实例。
- 代码示例:
import pytest
def test_function_pass():
with pytest.raises(ZeroDivisionError) as e:
# 捕获到对应异常则通过。
i = 3 / 0
# PASSED
def test_function_failed():
with pytest.raises(ZeroDivisionError) as e:
# 没有捕获到对应异常则失败。
i = 3 / 1
# Failed: DID NOT RAISE <class 'ZeroDivisionError'>
- 可以将
match
关键字参数传递给上下文管理器,以测试正则表达式与异常的字符串表示形式是否匹配:
import pytest
def test_function():
with pytest.raises(ZeroDivisionError, match=".*zero") as e:
# 是对应的异常类型 且 异常的 value 和 match 正则匹配上,则通过。
i = 3 / 0
# PASSED
- 提示:使用
match
只能断言 value,不能断言 type。
4.3 断言装饰器
@pytest.mark.xfail(raises=Exception)
- 代码示例:
import pytest
# 和 raises 指定的异常类相匹配 -> case ignored。
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_function():
i = 3 / 0
# E ZeroDivisionError: division by zero
pytest.raises()
对于故意测试异常代码的情况,使用可能会更好。- 而
@pytest.mark.xfail(raises=Exception)
对于检查未知的错误会更好。
五、结束语
“-------怕什么真理无穷,进一寸有一寸的欢喜。”
微信公众号搜索:饺子泡牛奶。