Django тестовый заказ, --failfast и TransactionTestCase - PullRequest
0 голосов
/ 30 января 2020

Это вопрос "возможно ли это в Python или мне нужно написать скрипт оболочки":

Мое приложение состоит из трех частей:

  1. a Django app (1.11, но оперативное поведение здесь похоже на 3)
  2. семанти c парсер
  3. a MySQL база знаний, совместно используемая обоими

Грубо говоря, Django помещает данные в КБ и запускает серию запросов к парсеру semanti c. Парсер semanti c считывает данные из базы знаний, чтобы сообщить результаты запроса. Django и КБ старые друзья; Django и парсер semanti c - старые друзья; Интеграция между анализатором semanti c и КБ является новой.

Если я использую Django стандартный TestCase, синтаксический анализатор semanti c не сможет увидеть какие-либо промежуточные изменения в базе знаний, сделанные во время тест, потому что весь тест обернут в атомы c () на Django. Это облом, но хорошо: тесты, в которых анализатор semanti c должен читать из базы данных, теперь наследуются от TransactionTestCase.

Проблема в том, что мы являемся исследовательским магазином, и мы часто экспериментируем с новые методы, которые нарушают поведение низкого уровня. Раньше у меня был тщательно заказанный TestSuite из более чем 50 тестов, который начинается с простых строительных блоков и накапливается в сложности для полного использования. При запуске с параметром --failfast это представляло ошибки в логическом порядке для моего цикла разработки.

Django, однако, помещает TransactionTestCases в свои собственные маленькие корзины случайного порядка :

Чтобы гарантировать, что весь код TestCase начинается с чистой базы данных, Django организатор тестов переупорядочивает тесты следующим образом:

  • Все подклассы TestCase запускаются первыми.
  • Затем выполняются все остальные Django тесты (тесты, основанные на SimpleTestCase, включая TransactionTestCase), без какого-либо особого упорядочения, гарантированного и не применяемого среди них.
  • Затем любой другой unittest.TestCase выполняются тесты (в том числе doctests), которые могут изменить базу данных, не восстанавливая ее в исходное состояние.

... что, конечно, отлично и верно для регрессионных тестов и CI, но затормозил весь мой рабочий процесс исправления ошибок в логическом порядке.

Кажется, есть некоторые расширенные варианты тестирования, но я не заинтересован погрузиться в обнаружение пользовательских тестов, если нет оснований ожидать, что Django действительно будет соблюдать тот порядок, который я установил sh. Есть ли такая надежда, вы, кто более знаком с Django тестами, чем я? Или я застрял, переводя свой TestSuite в сценарий оболочки и потребляя дополнительные издержки?

...