pytest fixtures可以合并吗?

18 投票
1 回答
15889 浏览
提问于 2025-04-18 16:26

在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

撰写回答