访问autouse fixture而不必将其添加到method参数中

时间:2016-05-03 09:30:48

标签: python-3.x pytest

我在conftest.py中有一个会话范围的夹具

@pytest.fixture(scope="session",autouse=True)
def log(request):
    testlog = LogUtil(testconf.LOG_NAME).get()
    return testlog

如果在mytest.py中定义了一个测试方法,则加载并按预期工作,如下所示:

def test_hello_world(self, log):
        log.info("hello world test")

有没有办法使用灯具(因为它启用了autouse)而无需在测试方法中添加额外的“log”参数?

def test_hello_world(self):
        log.info("hello world test") #log is not found

@pytest.mark.usefixtures("log")
def test_hello_world2(self):
        log.info("hello world test") #log is not found

def test_hello_world3(self,log):
        log.info("hello world test") #log object is accessible here

错误 - NameError:未定义名称“log”

2 个答案:

答案 0 :(得分:1)

如果您只想使用autouse灯具进行设置/拆卸,通常会使用autouse灯具。

如果您需要访问fixture返回的对象,您需要将其指定为参数,如第一个示例所示。

答案 1 :(得分:0)

我们还在处理固定装置吗?还是可以通过标准库例程更简单地解决这个问题?

common.py

import logging
import os

logger = logging.getLogger()
project_id = os.getenv('PROJECT_ID', 'maris-baccus')

test_stuff.py

from common import logger, project_id

def test_this():
    logger.info(f'This is the {project_id}')

如果我们积累了很多常用的例程,我想我们会把它们放到一个模块中,然后将它们导入到我们的测试中,就像任何其他库一样。