Рубрики
Без рубрики

Как запустить Python Tests «непрерывно» во время кодирования

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

На прошлой неделе я выполнял тренировку по развитию в тесте и подслушал кого-то упомянул еще один язык программирования, который имел тестовый бегун, который вы можете настроить, чтобы посмотреть свой каталог проекта и запустить свои тесты, когда файлы изменились. Я думал, что это была аккуратная идея. Я также думал, что могу легко написать свой собственный сценарий Python, чтобы сделать то же самое. Вот довольно грубая версия:

import argparse
import os
import subprocess
import time


def get_args():
    parser = argparse.ArgumentParser(
        description="A File Watcher that executes the specified tests"
        )
    parser.add_argument('--tests', action='store', required=True,
                        help='The path to the test file to run')
    parser.add_argument('--project', action='store', required=False,
                        help='The folder where the project files are')
    return parser.parse_args()


def watcher(test_path, project_path=None):
    if not project_path:
        project_path = os.path.dirname(test_path)

    f_dict = {}

    while True:
        files = os.listdir(project_path)
        for f in files:
            full_path = os.path.join(project_path, f)
            mod_time = os.stat(full_path).st_mtime
            if full_path not in f_dict:
                f_dict[full_path] = mod_time
            elif mod_time != f_dict[full_path]:
                # Run the tests
                cmd = ['python', test_path]
                subprocess.call(cmd)
                print('-' * 70)
                f_dict[full_path] = mod_time

        time.sleep(1)


def main():
    args = get_args()
    w = watcher(args.tests, args.project)

if __name__ == '__main__':
    main()

Чтобы запустить этот скрипт, вам нужно было сделать что-то вроде этого:

python watcher.py --test ~/path/to/tests.py --project ~/project/path

Теперь давайте найдя момент, чтобы поговорить об этом скрипте. Первая функция использует Python’s argparse Модуль, чтобы сделать программу принять до двух аргументов командной строки: -Test и -Project. Первый – путь к сценарию тестирования Python, когда второй предназначен для папки, в которой необходимо протестировать код. Следующая функция, наблюдатель , будет зацикливаться навсегда и воспользоваться всеми файлами из папки, которая была передана или использовать папку, в которой находится тестовый файл. Он будет схватить измененное время каждого файла и сохранить его в словаре. Ключ установлен на полный путь файла, и значение – это время модификации. Далее мы проверяем, изменено ли время модификации. Если нет, мы сплю на секунду и проверьте еще раз. Если он изменился, то мы запустим тесты.

На данный момент вы должны уметь редактировать свой код и тесты в своем любимом редакторе Python и просмотреть ваши тесты в терминале.

Используя watchdog.

Я оглянулся на другие кроссплатформенные методы просмотра каталога и наткнулся на Watchdog проект. Он не был обновлен с 2015 года (на момент написания), но я проверял его, и казалось, что для меня работает нормально. Вы можете установить Watchdog, используя PIP:

Теперь, когда у нас установлено Watchdog, давайте создадим какой-то код, который делает что-то похожее на предыдущий пример:

В этом коде мы храним get_args () Функция и добавить класс. Watchdog класс подкласса FileSystemeventHandler класс. В конечном итоге мы проходим в нашем пути тестового файла к классу и переопределите on_any_event () метод. Этот метод пожаровал в любое время события файловой системы. Когда это произойдет, мы управляем нашими тестами. Последнее бит в конце кода, где мы создаем Наблюдатель () Объект и скажите это, чтобы посмотреть указанный путь проекта и позвонить нашему обработчику событий, если что-то произойдет с файлами там.

Упаковка

На данный момент вы должны иметь возможность начать опробовать эти идеи в вашем собственном коде. Существуют также некоторые методы специфики платформы также для наблюдения за папкой (например pywin32 ), но если вы запустите в нескольких операционных системах, таких как я делаю, то WatchDog или прокат, может быть лучшим выбором.

Связанные чтения