Pytest 简明教程

Pytest - Fixtures

fixtures 是函数,它将在应用于它的每个测试函数之前运行。fixtures 用于向测试馈送一些数据,例如数据库连接、待测试的 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