Pytest:为整个测试制作全局夹具 运行
Pytest: making global fixture for entire test run
我有以下模块结构:
.
├── 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
我希望顶级目录中的 运行ning 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 ===========================
很明显,每个测试模块都会调用 fixture 函数两次,并且 fixture 在测试结束时退出 运行。
如何在整个测试会话期间使我的夹具全局化?
您不必在测试文件中导入夹具。 fixtures 由 pytest 自动发现。从测试文件中删除以下行后尝试。
from conftest import sophisticated_fixture
我有以下模块结构:
.
├── 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
我希望顶级目录中的 运行ning 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 ===========================
很明显,每个测试模块都会调用 fixture 函数两次,并且 fixture 在测试结束时退出 运行。
如何在整个测试会话期间使我的夹具全局化?
您不必在测试文件中导入夹具。 fixtures 由 pytest 自动发现。从测试文件中删除以下行后尝试。
from conftest import sophisticated_fixture