我正在定义一个pytest固定装置,以覆盖the django_db_setup
fixture。
我所做的更改为安全起见,还进行了其他拆卸,因为使用此治具的集成测试可能会产生进程,有时需要进行清理以防止所有事物损坏。
这似乎是合理的,并且在pytest文档中也建议使用。但是,我不想复制粘贴django_db_setup
的相同逻辑,因为我对已经存在的内容感到满意。但是,将其作为功能运行会引发弃用警告:
/usr/local/lib/python3.6/dist-packages/_pytest/fixtures.py:799:
RemovedInPytest4Warning: Fixture "django_db_setup" called directly.
Fixtures are not meant to be called directly, are created automatically
when test functions request them as parameters. See
https://docs.pytest.org/en/latest/fixture.html for more information.
在pytest 4中处理这种情况的推荐方法是什么?是鼓励我们从要覆盖的灯具中复制粘贴代码,还是有另一种“继承”灯具的方法,并在之前和之后注入(inject)自定义行为?
最佳答案
要在调用初始固定装置之前注入(inject)自定义行为,您可以使用此行为创建单独的固定装置,并在覆盖先前定义的固定装置参数列表中的初始固定装置之前使用它:
@pytest.fixture(scope='session')
def inject_before():
print('inject_before')
@pytest.fixture(scope='session')
def django_db_setup(inject_before, django_db_setup):
print('inject_after')
关于python - 如何重写在pytest 4中调用原始的pytest固定装置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56163688/