Pytest - 夹具

  • 简述

    夹具是函数,它将在应用它的每个测试函数之前运行。Fixtures 用于向测试提供一些数据,例如数据库连接、要测试的 URL 和某种输入数据。因此,我们可以将fixture函数附加到测试中,而不是为每个测试运行相同的代码,它会在执行每个测试之前运行并将数据返回给测试。
    一个函数被标记为一个夹具 -
    
    
    @pytest.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,它为测试提供输入。要访问夹具功能,测试必须提及夹具名称作为输入参数。
    Pytest 在执行测试时,会将夹具名称作为输入参数。然后它执行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
    
    ==========================
    
    
    然而,这种方法有其自身的局限性。在测试文件中定义的夹具函数仅在测试文件中具有范围。我们不能在另一个测试文件中使用该夹具。为了使一个夹具可用于多个测试文件,我们必须在一个名为 conftest.py 的文件中定义夹具函数。conftest.py在下一章中解释。