Как разделить юнит-тесты и интеграционные тесты в pytest - PullRequest
0 голосов
/ 27 февраля 2019

Согласно Википедии и различным статьям рекомендуется разделять тесты на модульные тесты (первый запуск) и интеграционные тесты (второй запуск), где модульные тесты обычно выполняются очень быстро.и должен выполняться с каждой сборкой в ​​среде CI, однако интеграционные тесты выполняются дольше и должны быть больше ежедневного выполнения.

Есть ли способ разделить их в pytest?Кажется, что в большинстве проектов нет нескольких тестовых папок, поэтому есть ли способ убедиться, что я запускаю только Unit, Integration или оба в соответствии с ситуацией (CI против ежедневных сборок)?При расчете покрытия тестами я предполагаю, что мне придется выполнить оба.

Правильно ли я поступаю так, пытаясь разделить тесты на эти категории?Есть ли где-нибудь хороший пример проекта, который сделал это?

Ответы [ 2 ]

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

Вы также можете физически разделить модульные и интеграционные тесты в определенных каталогах.Вот пример структуры файла из статьи А. Шоу Начало работы с тестированием на Python :

enter image description here

При структурном подходе:

  1. вам не нужно вручную отмечать различные тесты с атрибутами, или @pytest.mark
  2. вы не ограничены конкретным исполнителем тестов.Примеры из каталога project/:

С unittest из стандартной библиотеки:

> python -m unittest discover -s tests/integration

С nose:

> nose tests/integration:

С pytest:

> pytest tests/integration

Многие организаторы тестов имеют механизм автоматического обнаружения тестов, который может находить тесты в подкаталогах, например,

> cd root_dir
> pytest project/
0 голосов
/ 27 февраля 2019

Да, вы можете пометить тесты с помощью декоратора pytest.mark.

Пример:

def unit_test_1():
    # assert here

def unit_test_2():
    # assert here

@pytest.mark.integtest
def integration_test():
    # assert here

Теперь из командной строки вы можете запустить pytest -m "not integtest" только для устройстваtests, pytest -m integtest только для интеграционного теста и обычный pytest для всех.

(Вы также можете украсить свои юнит-тесты с помощью pytest.mark.unit, если хотите, но я считаю, что это немного утомительно / многословно)

См. Документацию для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...