Как разделить типы тестов с помощью Django

У меня есть серия тестов в Django, которые подразделяются на различные «типы», такие как «модуль», «функциональный», «медленный», «производительность»,...

В настоящее время я комментирую их с помощью декоратора, который используется только для запуска тестов определенного типа (аналогично @skipIf(...)), но это не кажется оптимальным подходом.

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

Основной причиной этого желания является запуск эффективного конвейера сборки, и поэтому мои приоритеты таковы:

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

person Rog    schedule 16.08.2012    source источник


Ответы (2)


Способ, которым моя компания организует тесты, состоит в том, чтобы разделить их на две большие категории. Блок и функционал. Модульные тесты находятся внутри обнаружения тестов Django. Тест manage.py запустит их. Функциональные тесты находятся за пределами этого каталога. Они запускаются либо вручную, либо с помощью CI. Buildbot в этом случае. Они по-прежнему запускаются с помощью unittest textrunner. У нас также есть подкатегория функциональных тестов, называемая стресс-тестами. Это тесты, которые нельзя запускать параллельно, потому что они грубо работают с серверами. Например, отключить базу данных и посмотреть, что произойдет.

Затем CI может запускать каждый тип теста как отдельный шаг. Тесты можно украсить скипифом.

Это не идеальное решение, но оно достаточно ясное и понятное.

person aychedee    schedule 16.08.2012

Мой способ для этого выглядит так:

  1. Создайте папку tests в папке вашего приложения
  2. Создайте py-файлы с тестовыми примерами (unit_test.py, functions_test.py и т. д.)
  3. Создайте __init__.py в тестовом каталоге с помощью:

    from unit_tests import *
    
    from functional_tests import *
    

И вы можете запустить свой тест из manage.py следующим образом:

manage.py test # run all tests (include django tests)
manage.py test my_app # run all my tests
manage.py test my_app.UnitTestCase # run specific test case
person dikamilo    schedule 16.08.2012