我有以下脚本:
conftest.py :
import pytest
@pytest.fixture(scope="session")
def setup_env(request):
# run some setup
return("result")
test.py :
import pytest
@pytest.mark.usefixtures("setup_env")
class TestDirectoryInit(object):
def setup(cls):
print("this is setup")
ret=setup_env()
print(ret)
def test1():
print("test1")
def teardown(cls):
print("this teardown")
我收到错误:
def setup(cls):
print("this is setup")
> ret=setup_env()
E NameError: name 'setup_env' is not defined
在setup()
中,我想从setup_env()
中的conftest.py
获取返回值“结果”。
有专家可以指导我怎么做吗?
答案 0 :(得分:1)
我认为@pytest.mark.usefixtures
更适用于执行每项测试之前的状态更改。来自文档:
“有时候测试功能不需要直接访问夹具对象。”
https://docs.pytest.org/en/latest/fixture.html#using-fixtures-from-classes-modules-or-projects
意味着您的灯具在每次测试开始时都在运行,但您的功能无法访问它。
如果您的测试需要访问灯具返回的对象,那么当它放在conftest.py
并标有@pytest.fixture
时,它应该已经按名称填充。您需要做的就是将夹具的名称作为测试功能的参数,如下所示:
https://docs.pytest.org/en/latest/fixture.html#using-fixtures-from-classes-modules-or-projects
如果您希望在课程或模块级别执行此操作,则需要更改scope
语句的@pytest.fixture
,如下所示:
很抱歉这么多文档的链接,但我认为他们有很好的例子。希望能够解决问题。