Перенос форм с носов setup_package () на pytest - PullRequest
0 голосов
/ 17 сентября 2018

прямо сейчас я пытаюсь преобразовать некоторые API-тесты из Nose в Pytest.Когда я попытался сделать это, я столкнулся с небольшой проблемой: Pytest не поддерживает функциональность «setup_package ()».«Setup_package ()» находится в файле __init__.py, где находятся тесты.

Это структура каталогов:

tests/__init__.py
      test_001.py
      test_002.py
      ...

Простым решением было бы дать setup_package () функционируют как фиксаторы, но проблема здесь в том, что мой setup_package () обращается к глобальному счетчику в __init__.py.Таким образом, файл __ini__.py выглядит следующим образом:

counter_id = 0

def setup_package():
    global counter
    counter = some_function()

def teardown_package():
    global counter
    clear_object(counter_id)

Я уверен, что существует очень простое решение для переноса этого, но, поскольку я новичок в Pytest, я хочу знать "pytestian" способпереноса этого конкретного примера на Pytest!Моя первая идея состояла в том, чтобы использовать прибор с функциональностью params, но я не уверен, что это вообще хороший способ для миграции.

1 Ответ

0 голосов
/ 21 февраля 2019

Как @hoefling уже намекал в комментариях:

Я только что создал новый файл conftest.py (относится к В pytest, для чего нужен файл conftest.py? )в каталоге tests (см. первоначальный вопрос о структуре папок).

tests/__init__.py
      conftest.py
      test_001.py
      test_002.py
      ... 

В этом файле conftest.py я только что скопировал в него функцию setup_package со следующим фиксатором:

@pytest.fixture(scope='session', autouse=True)
def setup_and_teardown_package():
(...) #setup
yield
(...) #teardown

Относительно counter_id: нам больше не нужен flags, так как у нас есть одна функция для наших setup и teardown, так что переменные не будут потеряны.yield указывает функции останавливаться до завершения всех тестов, а затем продолжать метод.Таким образом, в основном: все ДО yield будет вести себя как установка, и все ПОСЛЕ yield будет вести себя как демонтаж -> Больше нет необходимости в глобалах:)

...