将变量从conftest返回到测试类

时间:2017-05-31 21:27:36

标签: python pytest fixture

我有以下脚本:

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获取返回值“结果”。

有专家可以指导我怎么做吗?

1 个答案:

答案 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,如下所示:

https://docs.pytest.org/en/latest/fixture.html#sharing-a-fixture-across-tests-in-a-module-or-class-session

很抱歉这么多文档的链接,但我认为他们有很好的例子。希望能够解决问题。