0

问题:在将我的代码从 pytest v3.0.7 升级到 v6.2.4 时,我遇到了功能问题。这意味着,v6.x 中的代码行为与 v3.x 中的代码行为不同。pytest v3.x 和 v6.x 中的fixture范围不一样

此问题背后的原因:在最新的 pytest 版本中,pytest 固定装置范围的工作方式发生了变化。早些时候,在 v3.x 中,我看到函数作用域在会话作用域被允许之前被执行。但是,在 v6.x 中,会话范围严格在函数范围之前执行。参考1参考2

因此,升级 pytest 版本后,我的代码功能已经完全改变。作为一个遗留的测试框架,我不能那么容易地交换范围,因为很多插件/依赖代码会显示出意外的行为。

是否有任何解决方法可以保持执行与以前相同?所以,基本上我希望函数作用域在 v6.x 的 pytest 固定装置内的会话作用域之前执行。

例如,

import pytest

a = []
@pytest.fixture(scope="session")
def a_o():
    a.append('1')

@pytest.fixture(scope="function")
def b_o():
    a.append('2')

def test_order(b_o, a_o):
    assert a == ["2", "1"]

使用 pytest v.3.0.7 执行上述代码时,将断言 True(测试通过)。但是,对于 pytest v6.2.4,它会抛出一个错误,因为范围为“会话”的固定装置将首先执行,然后是范围为“功能”的固定装置。现在,我想要一种解决方法或修复方法,使测试将在与 pytest v6.2.4 相同的场景中通过,并且由于前面提到的原因,我无法更改范围。

4

0 回答 0