我在conftest.py
中有一个带有函数作用域的fixture。
@pytest.fixture()
def registration_setup(
test_data, # fixture 1
credentials, # fixture 2
deployment # fixture 3
deployment_object # fixture 4
):
# pre-test cleanup
do_cleanup()
yield
# post-test cleanup
do_cleanup()
我在一个测试类中使用它,如下所示:
class TestClass:
@pytest.fixture(autouse=True)
def _inventory_cleanup(self, registration_setup):
log('Cleanup Done!')
def test_1():
...
def test_2():
...
def test_3():
...
现在我想创建一个新的测试类,在这里我为整个类运行一次registartion_setup
fixture。这里想要的行为是,首先执行测试前清理,然后执行新测试类中的所有测试,接着是测试后清理。我该如何实现这一点,谢谢帮助。
1条答案
按热度按时间368yc8dk1#
选项1
您可以使用与其他测试类相同的方法,但是将fixture范围设置为
class
:但是,您需要将fixture的作用域
registration_setup
更改为class
,以避免ScopeMismatch
错误。选项2
为了继续使用
function
作用域,我建议使用两个行为相同但作用域不同的fixture,如下所示:如果您的其他设备1、2、3和4具有
function
范围,则您也必须更改它们。选项3
如果您不希望两个相同的装置具有不同的作用域,可以执行以下操作:
在项目根目录下的
conftest.py
文件中:然后,无论您在何处安装固定装置:
我知道这仍然有点重复,但是这样类内的测试将只对整个类调用
registration_setup
fixture一次,而其他测试将总是调用它。也许现在知道这一点会找到更好的方法。有关文档的更多信息:
fixture可以对请求的测试上下文进行自省
可以查看所有收集的测试的会话夹具
pytest_配置(配置)