Подтвердить что ты не робот

Как и где py.test находит светильники

Где и как py.test ищет светильники? У меня такой же код в 2 файлах в одной папке. Когда я удаляю conftest.py, cmdopt не может быть найден под управлением test_conf.py(также в той же папке. Почему sonoftest.py не выполняется поиск?

# content of test_sample.py
def test_answer(cmdopt):
    if cmdopt == "type1":
        print ("first")
    elif cmdopt == "type2":
        print ("second")
    assert 0 # to see what was printed

содержимое conftest.py

import pytest

def pytest_addoption(parser):
    parser.addoption("--cmdopt", action="store", default="type1",
        help="my option: type1 or type2")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--cmdopt")

содержание sonoftest.py

import pytest

def pytest_addoption(parser):
    parser.addoption("--cmdopt", action="store", default="type1",
        help="my option: type1 or type2")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--cmdopt")

Документы говорят

http://pytest.org/latest/fixture.html#fixture-function

  • pytest находит test_ehlo из-за префикса test_. Для функции тестирования требуется аргумент функции с именем smtp. Соответствующее приспособление функция обнаруживается путем поиска функции, обозначенной ярлыком SMTP.
  • smtp() вызывается для создания экземпляра.
  • test_ehlo() вызывается и не работает в последней строке тестовой функции.
4b9b3361

Ответ 1

py.test импортирует conftest.py и все файлы Python, соответствующие шаблону python_files, по умолчанию test_*.py. Если у вас есть тестовое устройство, вам нужно включить или импортировать его из conftest.py или из тестовых файлов, которые зависят от него:

from sonoftest import pytest_addoption, cmdopt

Ответ 2

Вот порядок и где py.test ищет приборы (и тесты) (взятые из здесь):

py.test загружает модули плагина при запуске инструмента следующим образом:

  • загружая все встроенные плагины

  • загружая все плагины, зарегистрированные через точки ввода setuptools.

  • путем предварительного сканирования командной строки для параметра -p name и загрузки указанного плагина перед фактическим разбором командной строки.

  • загружая все файлы conftest.py, как это было сделано в результате вызова командной строки (тестовые файлы и все его родительские каталоги). Обратите внимание, что conftest.py файлы из подкаталогов по умолчанию не загружаются запуск инструмента.

  • путем рекурсивной загрузки всех плагинов, заданных переменной pytest_plugins в conftest.py файлах