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 在下一章解释。