conf文件中如何导入python变量_如何在pytest中设置导入前的配置conftest.py?

在myprj项目中,当运行tox测试时,由于日志文件路径不存在导致测试失败。尝试在conftest.py中通过fixture设置config.py的LOG_FILE变量,但问题依然存在。寻求在pytest执行开始前设置LOG_FILE以避免错误。
摘要由CSDN通过智能技术生成

我有myprj项目,文件如下。在$ tree myprj/

myprj/

├── prj

│   ├── __init__.py

│   ├── config.py

│   ├── my_logger.py

│   ├── my_module.py

│   └── tests

│   ├── __init__.py

│   ├── conftest.py

│   └── unit

│   ├── __init__.py

│   └── test_my_module.py

├── setup.py

└── tox.ini

配置.py

^{pr2}$

我的_logger.pyfrom prj import config

import logging

class MyLogger():

def __init__(self):

self.setup_logger()

def setup_logger(self):

logFilename = config.LOG_FILE

file_hdlr = logging.FileHandler(logFilename)

我的_模块.pyfrom prj import my_logger

myLogger = my_logger.MyLogger()

def my_method():

return 1

测试_模块.pyfrom prj import my_module

def test_my_method():

assert 1 == my_module.my_method()

设置.pyfrom setuptools import setup

setup(name="Tox Testing")

毒性试验[tox]

envlist = py35

[testenv]

deps=pytest

commands=py.test

当我对日志文件运行tox时,它失败,并返回path not exists。在GLOB sdist-make: /private/tmp/myprj/setup.py

py35 inst-nodeps: /private/tmp/myprj/.tox/dist/Tox Testing-0.0.0.zip

py35 installed: attrs==17.4.0,pluggy==0.6.0,py==1.5.2,pytest==3.3.2,six==1.11.0,Tox-Testing==0.0.0

py35 runtests: PYTHONHASHSEED='2231398989'

py35 runtests: commands[0] | py.test

========================================================================================================= test session starts =========================================================================================================

platform darwin -- Python 3.5.2, pytest-3.3.2, py-1.5.2, pluggy-0.6.0

rootdir: /private/tmp/myprj, inifile:

collected 0 items / 1 errors

=============================================================================================================== ERRORS ================================================================================================================

__________________________________________________________________________________________ ERROR collecting prj/tests/unit/test_my_module.py __________________________________________________________________________________________

prj/tests/unit/test_my_module.py:1: in

from prj import my_module

prj/my_module.py:3: in

myLogger = my_logger.MyLogger()

prj/my_logger.py:6: in __init__

self.setup_logger()

prj/my_logger.py:11: in setup_logger

file_hdlr = logging.FileHandler(logFilename)

/Users/nile2691/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py:1008: in __init__

StreamHandler.__init__(self, self._open())

/Users/nile2691/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py:1037: in _open

return open(self.baseFilename, self.mode, encoding=self.encoding)

E FileNotFoundError: [Errno 2] No such file or directory: '/path/exists/on/production/prj.log'

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

======================================================================================================= 1 error in 0.36 seconds =======================================================================================================

ERROR: InvocationError: '/private/tmp/myprj/.tox/py35/bin/py.test'

_______________________________________________________________________________________________________________ summary _______________________________________________________________________________________________________________

ERROR: py35: commands failed

我知道,日志文件路径在我的本地系统中不存在,它给出了错误。在

我试图使用conftest.pyfixture在config.py中设置LOG_FILE变量。在

conftest.pyimport pytest

from prj import config

@pytest.fixture(scope="session", autouse=True)

def set_config():

config.LOG_FILE = '/tmp/prj.log'

但它仍然返回相同的错误。如果我能够在开始测试执行之前调用某些东西,比如py.test的第一个执行步骤,那么我可以设置LOG_FILE,它不会引发错误。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值