Есть ли способ начать модульные тесты, связанные только с измененным кодом?
В моем проекте 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
прочитайте сохраненный файл, чтобы получить инструкции импорта и получить все необходимые значения из проверенного по столбцу, чтобы покрыть сохраненный файл и зависимости. Затем запустите тестовые модули.
Я предполагаю, что это также может работать из командной строки, принимая измененное имя файла в качестве параметра.
Я думаю, что, возможно, отслеживание зависимостей должно идти другим путем. Если это так, тогда необходимо проанализировать импорт для всего, что находится в каталоге, в котором находится измененный модуль. Остальная часть процесса будет одинаковой.