我们经常会在conftest.py中定义一些fixture提供给测试方法使用,但是在有些测试中,我们用不上或者需要对其结果进行处理后再用,这时候,就需要我们对fixture进行覆盖或重写。
在学习pytest-8.2.x官方文档看到了它给出的覆盖全局fixture的示例如下:
python
tests/
conftest.py
# content of tests/conftest.py
import pytest
@pytest.fixture
def username():
return 'username'
test_something.py
# content of tests/test_something.py
def test_username(username):
assert username == 'username'
subfolder/
conftest.py
# content of tests/subfolder/conftest.py
import pytest
@pytest.fixture
def username(username):
return 'overridden-' + username
test_something_else.py
# content of tests/subfolder/test_something_else.py
def test_username(username):
assert username == 'overridden-username'
我们可以看到,在subfolder/conftest.py文件中重写的"username " fixture访问了tests/conftest.py 文件中的"username "。
这种用法官方文档中也给出了解释:"Note that the base or super fixture can be accessed from the overriding fixture easily - used in the example above."说明官方是也是支持这么用的。
但是当我在pycharm中运行的时候,却报错了:
百思不得其解的时候,在网上看到了这位博主的文章【pytest-fixture】十一、覆盖各个级别的fixture_fixture级别-CSDN博客,发现他的运行是成功的,仔细看了他的运行环境,发现pytest版本是6.2.5。莫非是pytest版本问题?
于是,我将环境也换成了他的版本,运行结果真的时PASSED。
这... 嗯...问题记录下来吧~~