Есть ли способ начать модульные тесты, связанные только с измененным кодом?

В моем проекте Python у нас есть большое количество модульных тестов (несколько тысяч). Хотя они логически распределены между файлами и классами, мне иногда нужно много времени, чтобы найти те, которые охватывают меня меняющуюся функциональность.

Конечно, я могу запускать все тесты из определенного файла/класса, но опять же из-за большого количества этих тестов, потребуется много времени для их непрерывного запуска (я выполняю модульные тесты каждый раз после сохранения файл в моей среде IDE).

В общем, мне нужно некоторое решение, которое будет выполнять следующие действия за раз:

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

Есть ли у кого-нибудь идеи о чем-то подобном?

Ответ 1

Вам может потребоваться проверка pytest-incremental:

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

Установите через pypi:

pip install pytest-incremental

Использование:

$ py.test --inc

Я думаю, что он делает то, что вы ищете, он "ищет рекурсивные ресурсы для поиска зависимостей (используя AST)" и запускает только измененные тесты.

Ответ 2

Предположение 1: вы можете настроить IDE для запуска сохранения script при сохранении файла.

Предположение 2: script может получить имя сохраняемого файла и получить доступ к содержимому файла.

Вы можете создать описание "файл" тестового покрытия (место хранения: нерелевантно) по строкам:

**module**         **tested by**
mymod1.py       testsuite1.py
mymod2.py       testsuite2.py
mysubmod1.py    testsuite3.py
mysubmod2.py    testsuite3.py

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

Я предполагаю, что это также может работать из командной строки, принимая измененное имя файла в качестве параметра.

Я думаю, что, возможно, отслеживание зависимостей должно идти другим путем. Если это так, тогда необходимо проанализировать импорт для всего, что находится в каталоге, в котором находится измененный модуль. Остальная часть процесса будет одинаковой.