Создавать разные настройки среды в pytest - PullRequest
0 голосов
/ 12 января 2019

Я новичок в pytest. Я хочу создать тест, который будет работать в разных средах. Каждая среда имеет свои собственные переменные (base_url, идентификаторы и т. Д.). Я хочу отправить окружение в командной строке, чтобы тест использовал соответствующие переменные. Я думал о создании разных видов «settings.py» для каждой среды с разными постфиксами. например, settings-dev.py, settings-qa.py и т. д. Но я не уверен, как указать тесту, какой из них использовать, и как правильно сделать это в pytest. В общем (могут быть другие вопросы), как я могу установить этот тип «глобальных переменных» для использования во всех тестах?

1 Ответ

0 голосов
/ 12 января 2019

Существует несколько пакетов, которые переопределяют систему настроек Django так, как ее можно использовать в проектах, не относящихся к Django; Вот пример использования simple-settings:

# settings_dev.py
SPAM = 'eggs'


# 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 ======================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...