可以组合pytest灯具吗?

Tre*_*out 6 python pytest

在pytest中,1个夹具可以构建在另一个上吗?我有一个非常简单的夹具叫做"清洁剂",定义为......

import pytest
from mypackage import db

@pytest.fixture()
def cleaner(request):
  def finalizer():
    db.clear()
  request.addfinalizer(finalizer)
Run Code Online (Sandbox Code Playgroud)

然后在我的setup.cfg中我...

[pytest]
norecursedirs = .git venv
usefixtures = cleaner
Run Code Online (Sandbox Code Playgroud)

这导致数据库在每次测试后被截断.哪个好.但是现在我想要我制作的其他灯具也可以从清洁器中调出终结器.有没有办法定义另一个以某种方式扩展或称为清洁的夹具?

Bru*_*ira 15

您必须声明您的其他灯具明确依赖于清洁剂:

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
Run Code Online (Sandbox Code Playgroud)

运行此py.test -s -v产生:

test_foo.py@16::test_foo
"cleaner" fixture

"other" fixture
PASSED
"cleaner" finalized
Run Code Online (Sandbox Code Playgroud)