Pytest:为整个测试运行制作全局夹具

时间:2019-01-03 10:24:40

标签: python unit-testing pytest fixtures

我具有以下模块结构:

.
├── conftest.py
└── test
    ├── test_one.py
    └── test_two.py

我的conftest.py包含一个固定装置:

import pytest

@pytest.fixture(scope='session')
def sophisticated_fixture():
    print('\nFixture init')
    yield 42
    print('\nFixture kill')

我的test_{one,two}.py测试看起来像这样:

from conftest import sophisticated_fixture


def test_a(sophisticated_fixture):
    assert sophisticated_fixture == 42


def test_b(sophisticated_fixture):
    assert sophisticated_fixture == 42

我希望在顶级目录中运行pytest -s会使用相同的固定装置运行所有测试,因为我已将其定义为会话级。但是,发生这种情况:

============================= test session starts ==============================
platform linux -- Python 3.6.6, pytest-4.0.2, py-1.7.0, pluggy-0.8.0
rootdir: /home/tomasz/example, inifile:
collected 4 items

test/test_one.py 
Fixture init
..
test/test_two.py 
Fixture init
..
Fixture kill

Fixture kill


=========================== 4 passed in 0.01 seconds ===========================

每个测试模块都会清楚地调用夹具功能两次,并且夹具在测试运行的最后退出。

在整个测试过程中,如何使我的灯具全局化?

1 个答案:

答案 0 :(得分:2)

您不必将灯具导入测试文件中。夹具由pytest自动发现。从测试文件中删除以下行后,请尝试。

from conftest import sophisticated_fixture