Я последнее время немало человеко-часов провел в экспериментах с Руби и Рельсами (об этом я еще напишу отдельный пост). Вернувшись назад в мир разработки на PHP мне стало очень не хватать одной простой утилиты, к которой я успел так привыкнуть. Называется она autotest. Проблема в том, что она для руби. Я быстренько поискал в Гугле и на Гитхабе и не нашел ни одного решения на PHP (позже все же нашел несколько, но они мне все равно не понравились). А я верю в то, что инструменты для разработки на каком-то языке должны писаться на нем же. Хотя бы потому, что ты как разработчик на этом языке не будешь испытывать проблем, если потребуется что-то на скорую руку исправить или модифицировать. Тут руки зачесались, и я написал свой вариант автотеста.

Прошу любить и жаловать — php.autotest.

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

sudo ln bin/autotest.php /usr/bin/autotest

Не забудьте проверить, чтобы были выставлены права на выполнение.

Использование не сложнее установки. Просто перейдите в корень приложения и запустите автотест:

autotest

Он не выведет никаких сообщений, а просто начнет молчаливо ждать изменений в коде приложения или тестов. Как только изменения будут замечены, сразу же будут запущены соответствующие тесты. Как скоро автотест заметит изменения зависит от настройки таймаута, по умолчанию это 1 секунда. Но это время всегда можно изменить с помощью опции timeout:

autotest --timeout=5

Так он будет проверять изменения раз в 5 секунд.

Есть еще несколько полезных опций для не совсем «стандартных» проектов. Например, кода несколько иначе называются директории с кодом или тестам (по умолчанию считается, что для кода — src, для тестов — tests). Или же когда надо указать команду для phpunit.

autotest --src_path=sources --tests_path=testing --cmd=/usr/local/zend/bin/phpunit

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

Надеюсь, утилита будет кому-то полезной.