可以组合pytest灯具吗?

时间:2014-08-07 17:38:09

标签: python pytest

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

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

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

1 个答案:

答案 0 :(得分:13)

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

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