Python 在pytest中创建不同的环境设置

Python 在pytest中创建不同的环境设置,python,environment-variables,pytest,Python,Environment Variables,Pytest,我是个新手。我想创建一个在不同环境下运行的测试。每个环境都有自己的变量(基本url、ID等)。我想在命令行中发送环境,以便测试将使用相关变量。我想为每个环境创建不同类型的“settings.py”,并使用不同的后缀。例如settings-dev.py、settings-qa.py等等,但我不确定如何告诉测试使用哪一个,以及在pytest中使用哪种正确的方法。 一般来说(可能是一个不同的问题),我如何设置这种“全局变量”在所有测试中使用 有几个包重新实现了Django的设置系统,使其能够在非Dja

我是个新手。我想创建一个在不同环境下运行的测试。每个环境都有自己的变量(基本url、ID等)。我想在命令行中发送环境,以便测试将使用相关变量。我想为每个环境创建不同类型的“settings.py”,并使用不同的后缀。例如settings-dev.py、settings-qa.py等等,但我不确定如何告诉测试使用哪一个,以及在pytest中使用哪种正确的方法。
一般来说(可能是一个不同的问题),我如何设置这种“全局变量”在所有测试中使用

有几个包重新实现了Django的设置系统,使其能够在非Django项目中使用;下面是一个示例,使用:


# settings_prod.py
SPAM = 'bacon'
# test_spam.py
from simple_settings import settings


def test_spam():
    assert settings.SPAM in ['eggs', 'bacon']

# settings_prod.py
SPAM = 'bacon'
# test_spam.py
from simple_settings import settings


def test_spam():
    assert settings.SPAM in ['eggs', 'bacon']
如果通过环境变量传递设置,thins将立即生效:

$ SIMPLE_SETTINGS=settings_dev pytest 
======================================== test session starts ========================================
platform linux -- Python 3.6.6, pytest-4.0.2, py-1.7.0, pluggy-0.8.0
rootdir: /home/hoefling/projects/private/stackoverflow/so-54159045, inifile:
collected 1 item                                                                                    

test_spam.py .                                                                                [100%]

===================================== 1 passed in 0.01 seconds ======================================
如果要通过命令行参数传递设置,则需要使
--settings
arg为
pytest
所知:创建一个
conftest.py
文件,其中包含以下内容:

def pytest_addoption(parser):
    parser.addoption('--settings', action='store')
现在
pytest
将识别
--settings
arg,但在其他地方忽略它

$ pytest --settings=settings_prod
======================================== test session starts ========================================
platform linux -- Python 3.6.6, pytest-4.0.2, py-1.7.0, pluggy-0.8.0
rootdir: /home/hoefling/projects/private/stackoverflow/so-54159045, inifile:
plugins: xdist-1.25.0, metadata-1.7.0, html-1.19.0, forked-0.2
collected 1 item                                                                                    

test_spam.py .                                                                                [100%]

===================================== 1 passed in 0.01 seconds ======================================

您是在测试django项目还是只想重用其设置模式?@hoefling-不是django,只是想做类似的事情。。。可能是其他好的解决方案谢谢你的详细回答。看起来不错。我会试试,让你知道我很高兴能帮上忙!