- Pytest 教程
- Pytest - 首页
- Pytest - 简介
- Pytest - 环境设置
- 识别测试文件和函数
- Pytest - 从基本测试开始
- Pytest - 文件执行
- 执行测试套件的子集
- 测试名称的子字符串匹配
- Pytest - 测试分组
- Pytest - Fixture
- Pytest - conftest.py
- Pytest - 参数化测试
- Pytest - Xfail/Skip 测试
- 在 N 次测试失败后停止测试套件
- Pytest - 并行运行测试
- 测试执行结果以 XML 格式输出
- Pytest - 总结
- Pytest - 结论
- Pytest 有用资源
- Pytest - 快速指南
- Pytest - 有用资源
- Pytest - 讨论
Pytest - Fixture
Fixture 是函数,它们会在应用于每个测试函数之前运行。Fixture 用于向测试提供一些数据,例如数据库连接、要测试的 URL 和某种输入数据。因此,与其为每个测试运行相同的代码,不如将 fixture 函数附加到测试,它将在执行每个测试之前运行并返回数据到测试。
一个函数通过以下方式标记为 fixture:
@pytest.fixture
测试函数可以通过将 fixture 名称作为输入参数来使用 fixture。
创建一个文件test_div_by_3_6.py,并在其中添加以下代码
import pytest @pytest.fixture def input_value(): input = 39 return input def test_divisible_by_3(input_value): assert input_value % 3 == 0 def test_divisible_by_6(input_value): assert input_value % 6 == 0
这里,我们有一个名为input_value的 fixture 函数,它为测试提供输入。为了访问 fixture 函数,测试必须将 fixture 名称作为输入参数。
在测试执行过程中,Pytest 会看到 fixture 名称作为输入参数。然后它执行 fixture 函数,并将返回值存储到输入参数,测试可以使用该参数。
使用以下命令执行测试:
pytest -k divisible -v
以上命令将生成以下结果:
test_div_by_3_6.py::test_divisible_by_3 PASSED test_div_by_3_6.py::test_divisible_by_6 FAILED ============================================== FAILURES ============================================== ________________________________________ test_divisible_by_6 _________________________________________ input_value = 39 def test_divisible_by_6(input_value): > assert input_value % 6 == 0 E assert (39 % 6) == 0 test_div_by_3_6.py:12: AssertionError ========================== 1 failed, 1 passed, 6 deselected in 0.07 seconds ==========================
但是,这种方法有其自身的局限性。在测试文件中定义的 fixture 函数的作用域仅限于该测试文件。我们无法在另一个测试文件中使用该 fixture。为了使 fixture 可用于多个测试文件,我们必须在名为 conftest.py 的文件中定义 fixture 函数。conftest.py将在下一章中进行解释。
广告