pytest fixtures可以合并吗?
在pytest中,一个测试工具能否依赖另一个测试工具呢?我有一个非常简单的测试工具,叫做“cleaner”,它的定义如下:
import pytest
from mypackage import db
@pytest.fixture()
def cleaner(request):
def finalizer():
db.clear()
request.addfinalizer(finalizer)
然后在我的 setup.cfg
文件中,我有:
[pytest]
norecursedirs = .git venv
usefixtures = cleaner
这样每次测试后,数据库都会被清空,这很好。但是现在我想让我创建的其他测试工具也能调用“cleaner”中的结束操作。有没有办法定义另一个测试工具,让它可以扩展或调用“cleaner”呢?
1 个回答
30
你需要明确声明你的其他测试用例依赖于清理器:
import pytest
@pytest.fixture
def cleaner(request):
def finalizer():
print '\n"cleaner" finalized'
print '\n"cleaner" fixture'
request.addfinalizer(finalizer)
@pytest.fixture
def other(cleaner):
print '\n"other" fixture'
def test_foo(other):
pass
用 py.test -s -v
运行这个会产生:
test_foo.py@16::test_foo
"cleaner" fixture
"other" fixture
PASSED
"cleaner" finalized