Рассмотрим простое решение, которое позволяет быстро поднять авто тесты на базе WordPress. И понять что такое TDD и как оно ускоряет разработку в 10х раз. По ходу еще повышая качество кода.
Это давняя история и процесс автоматизированного тестирования я изучал много лет. И никак не мог понять почему все так сложно и так бестолково.
В итоге наломав дров и написав тучу костылей – решил что вот уже пора писать свое решений – свой плагин, который позволяет делать тесты легко и просто.
Встречаем – плагин Testeroid https://github.com/uptimizt/testeroid
Ставится как обычный плагин для WordPress.
И позволяет запускать тесты в 1 команду: wp test
Сравнение с PHPUnit & PestPHP
Перепробовав самые популярные решения для авто тестов с PHP, я собрал некую сравнительную табличку:
Из этой таблицы можно увидеть что данное решение проще поставить и проще освоить чем остальные. Но именно для WordPress.
Чтобы что?
Зачем вообще понадобилось писать очередной велосипед?
На то были причины:
- базовые решения сложно развернуть и долго и дорого изучать
- из коробки они работают только в качестве unit тестов без БД – что по сути бесполезно и выглядит как попытка кипятить океан чайником
Я искал решения проще и мне кажется нашел. Это решение ставится за 5 минут – и работает проще чем популярные аналоги.
Ключевое слово тут – работает.
Разработка без тестов – это ок?
Да, на самом для 99% проектов про WordPress – авто тесты не нужны. А попытки их писать превращаются в ИБД.
Но бывают такие решения где без авто тестов никуда.
Как пример – плагин WooMS – про интеграцию склада и магазина.
Там 10+ подмодулей, 20+ опций – в сумме 100500 разных сценариев как это может работать.
По началу все было относительно просто и как то работало.
Но с годами добавлялись опции, сценарии копились, добавлялись слои абстракции.
В какой то момент разработка превратилась в ад.
Ты решаешь 1 ошибку и добавляешь еще 10 ошибок.
Я пробовал настроить PHPUnit & PestPHP – но их настройка и изучение занимало много времени.
В итоге Тестероид как решение – оказалось рабочим и вывело эффективность на качественно новый уровень.
TDD – разработка через тестирование
По ходу всех этих экспериментов я понял преимущества TDD. Это когда сначала пишешь тесты, а потом под тесты меняешь код.
Это сложно описать словами. Но этот плагин теперь позволяет вести разработку через TDD.
По моим личным ощущениям эффективность разработки выросла в 10х раз. И в разы выросло качество кода.
Этот подход позволяет лучше писать код – когда ты сначала пишешь тест и потом смотришь на результат – то видишь ошибки в структуре кода.
Это позволяет быстрее исправить структуру и при этом убедиться что результат не сломался. И все работает как положено.
Уверенность в том что ничего не сломал
TDD – это лишь половина преимуществ. Вторая половина – это уверенность в том что код работает как положено.
Тесты постепенно накапаливаются.
И когда я вношу очередные изменения – пишу wp test – плагин мне показывает – все ли ок – или что то где то сломалось.
За последний месяц я уже 100 раз ломал свой же плагин.
Но каждый раз запуская тесты – я вижу что и где сломалось.
И это позволяет увидеть ошибку еще до релиза – еще до того как плагин уйдет в продакшн.
Это экономит огромное количество времени и заметно повышает качество продукта.
Как это работает?
В целом инструкция описана на странице плагина https://github.com/uptimizt/testeroid
Ключевое:
- поставить плагин
- указать путь до тестов
- уметь запускать команды wp cli типа wp test
Это сильно проще чем настраивать PHPUnit & PestPHP.
Современный и понятный для людей синтаксис
Одно из преимуществ – тут тесты пишутся на человеческом языке, без классов и убогих имен функций.
Идея взята у PestPHP.
Тест пишется так:
test('что мы хотим проверить', function(){
... код проверки
});
Все до ужаса просто.
Доказательство результата – PoC
Сам плагин я сделал около месяца назад и тестировал на нем базовые рабочие задачи.
Но в течении месяца мне удалось опробовать его на опенсорс плагине WooMS. Это достаточно сложный плагин про логику синхронизации склада и магазина.
Чтобы далеко не ходить, сразу готовый пример, на котором это решение было проверено https://github.com/wpcraft-ru/wooms/tree/master/tests
Возможно это первый плагин в РФ – где работают настоящие авто тесты с WordPress.
Итого
Большинство команд и проектов – лишь заявляют что хотят начать писать авто тесты.
Мало кто отваживаются и те пишут обычно дичь. Там не авто тесты, а ИБД. Детально писал тут https://wpcraft.ru/blog/unit-tests-wordpress/
Этот плагин – возможно первое решение для WP, где попробовать писать авто тесты может почти любой, даже начинающий разработчик.