Не удается получить pytest для понимания аргументов командной строки в настройках

Поэтому я пытался заставить pytest запускать тесты селена в разных средах на основе некоторого аргумента командной строки. Но он продолжает выдавать эту ошибку:

TypeError: setup_class() takes exactly 2 arguments (1 given)

Кажется, это понимание того, что setup_class принимает 2 аргумента, но host не передается. Вот код для setup_class:

def setup_class(cls, host):
        cls.host = host

А вот и файл conftest.py:

def pytest_addoption(parser):
    parser.addoption("--host", action="store", default='local',
        help="specify the host to run tests with. local|stage")

@pytest.fixture(scope='class')
def host(request):
    return request.config.option.host

Что странно в том, что host это видно по функциям (поэтому, если я сделаю функцию test_function и передам хост в качестве параметра, он получит его просто отлично), это просто setup светильники, которые не работают.

Я оглянулся и нашел это, pytest - используйте funcargs внутри setup_module, но это, похоже, не работает (и оно устарело с 2.3.

Кто-нибудь знает, что я делаю не так? Использование py.test 2.3.2.

Спасибо

2 ответа

Решение

setup_module/class/method и друзья не могут работать с приборами pytest напрямую. Способ Pytest-2.3 сделать эквивалентный - использовать автоматические приборы. Если вы можете, лучше передать приборы для тестирования функций или поставить маркер usefixtures на класс или модуль.

Чтобы получить доступ к параметрам командной строки из функций настройки, вы можете использовать объект pytest.config. Вот пример... адаптироваться по мере необходимости.

import pytest

def setup_module(mod):
    print "Host is %s" % pytest.config.getoption('host')
Другие вопросы по тегам