10 инструментов тестирования PHP для плагинов WordPress
Опубликовано: 2022-08-05Никакое программное обеспечение не свободно от ошибок. Это аксиома, применимая к каждому языку программирования и каждому приложению.
Когда эти ошибки развертываются на вашем веб-сайте в рабочей среде, вы можете столкнуться с неблагоприятными последствиями различной степени тяжести. Вот несколько примеров, от раздражающих до экономически разрушительных:
- Легкая: пользователь не может щелкнуть неработающую ссылку.
- Серьезно: кнопка «Отправить» в контактной форме не работает, что пользователь обнаруживает только после того, как составил свое сообщение.
- Серьезный: неправильно настроенный платежный шлюз, из-за чего пользователи не могут покупать товары в вашем интернет-магазине и покидают сайт.
Одного инструмента недостаточно для обработки всех аспектов тестирования приложения со всех возможных точек зрения. Действительно, помимо поиска ошибок, жизненно важно выполнить дополнительные тесты для проверки других функций приложения, таких как:
- Доступность и удобство использования
- Приемлемая производительность
- Управление трафиком и нагрузкой
В этой статье мы рассмотрим 10 инструментов, созданных сообществом открытого исходного кода, которые могут помочь составить стек для тестирования PHP-кода в плагинах WordPress. Некоторые из этих инструментов были специально разработаны для тестирования PHP-кода; другие предназначены для тестирования кода WordPress; и несколько других инструментов были созданы для обработки некоторых общих функций, полезных для тестирования.
1. ДевКинста
DevKinsta — это локальный пакет разработки для сайтов WordPress. Просто предоставив некоторые основные сведения, локальный экземпляр сайта WordPress будет немедленно установлен, и он поставляется в комплекте с несколькими полезными инструментами разработки, такими как почтовый ящик, менеджер базы данных и ведение журнала для упрощения устранения неполадок.
DevKinsta обычно используется разработчиками и дизайнерами при создании тем и плагинов WordPress. Но его также можно использовать в качестве локального веб-сервера для выполнения интеграционных и функциональных тестов. Это достигается в сочетании с инструментом HTTP, который помогает вам проверить правильность содержимого вашего ответа и заголовков.
Основные функции DevKinsta:
- Легко создать новую среду WordPress и удалить ее, если она больше не нужна.
- Позволяет тестировать любую поддерживаемую версию PHP и WordPress и любую их комбинацию.
- Легко интегрируется с MyKinsta, где пользователи могут создавать внешние резервные копии своих сайтов и данных.
2. PHPЮнит
PHPUnit — это фреймворк для тестирования PHP, ориентированный на программистов. Это самая популярная среда для выполнения модульных тестов в PHP-коде с целью проверки отдельных модулей исходного кода.
Тесты PHPUnit позволяют разработчикам находить проблемы как можно раньше в рамках цикла разработки, помогая гарантировать, что не было введено никаких регрессий кода (т. е. изменения в каком-то фрагменте кода не вызвали проблем где-то еще).
Основные функции PHPUnit:
- Тестирование новых функций
- Проверка кода после рефакторинга
- Может быть полностью автоматизирован и выполнен в рамках выбранного процесса непрерывной интеграции.
- Отладка
- Автоматическое документирование ожидаемого использования посредством вызова функций и ограничений
- Позволяет использовать подход Test-Driven Development (TDD), при котором разработчики сначала создают тесты, а затем функциональность.
3. Мозговая обезьяна
Brain Monkey — утилита для тестирования PHP и WordPress. Он предоставляет инструменты, не зависящие от фреймворка, которые позволяют вам переопределять методы PHP и тестировать поведение любого приложения PHP. Он также предоставляет инструменты для тестирования кода WordPress.
Главными особенностями Brain Monkey являются:
- Позволяет модульным тестам взаимодействовать с внешними незагруженными библиотеками.
- Разрешает вызов функций WordPress без необходимости загрузки среды WordPress.
- Может утверждать, что функции WordPress (такие как
add_filter
илиdo_action
) вызывают ожидаемую функциональность.
4. Мозговой обманщик
Brain Faker использует Faker (популярную PHP-библиотеку для создания поддельных данных) и Brain Monkey, чтобы обеспечить простое создание поддельных объектов WordPress и связанных с ними функций для тестирования, в том числе:
- Экземпляры
WP_Post
и имитирующие функции, такие какget_post
иget_post_field
-
WP_User
и связанные с имитации функции, такие какget_userdata
,get_user_by
,user_can
и другие. -
WP_Term
и фиктивные связанные с ними функции, такие какget_term
иget_term_by
-
WP_Comment
-
WP_Site
и фиктивные связанные с ними функции, такие какget_site
- Экземпляры
WP_Post_Type
и имитации связанных функций, таких какget_post_type_object
иpost_type_exists
-
WP_Taxonomy
и фиктивные связанные с ними функции, такие какget_taxonomy
иtaxonomy_exists
. -
WP_Error
Главными особенностями Brain Faker являются:
- Вводит поддельные, но реалистичные данные WordPress в модульный тест — доступ к дате изменения поддельного сообщения будет вести себя как дата (например
2022-04-17T13:06:58+00:00
), имя пользователя будет подходящим (например,"John Smith"
), поддельный экземпляр сообщения создан поддельным экземпляром пользователя и т. д. - Поддельные данные могут быть предоставлены заранее или сгенерированы случайным образом.
- Расширяемость — разработчики могут имитировать классы и функции из своих собственных плагинов WordPress.
5. Издевательство
Mockery — это простая, но гибкая платформа PHP-фиктивных объектов, предназначенная для использования вместе с PHPUnit, PHPSpec или любой другой средой модульного тестирования. Он предлагает тестовую двойную структуру, способную определять все возможные операции и взаимодействия с объектами с использованием удобочитаемого предметно-ориентированного языка (DSL).
Основные функции Mockery:
- Обеспечивает гибкое создание фиктивных объектов и заглушек (которые предоставляют предопределенные готовые ответы на определенные вызовы, сделанные во время тестов).
- Расширяет возможности изоляции тестов PHPUnit.
- Гибкий API для выражения фиктивных ожиданий, максимально имитирующий описание на естественном языке (например
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - Модульные тесты с использованием фиктивных объектов в памяти, чтобы избежать необходимости доступа к более медленным системам (таким как базы данных, файловые системы или внешние службы).
- Может имитировать как детерминированное, так и недетерминированное поведение
6. Встроенный инструмент экспорта WordPress
Собственный инструмент экспорта WordPress загружает данные WordPress сайта на ваше устройство в виде XML-файла, включая сообщения, страницы, настраиваемые типы сообщений, комментарии, настраиваемые поля, категории, теги, настраиваемые таксономии, пользователей и медиа. Файл XML имеет собственный формат (называемый файлом WordPress eXtended RSS или WXR), который можно импортировать на любой сайт WordPress.
Этот инструмент не предназначен специально для тестирования. Однако его полезность заключается в возможности создавать моментальные снимки базы данных WordPress, содержащие подходящий набор данных, которые затем можно использовать для тестирования. Это означает, что работающий сайт WordPress, содержащий реальные данные, можно экспортировать и импортировать в разрабатываемый или промежуточный экземпляр для тестирования новых функций.
Основные функции инструмента экспорта WordPress:
- Создание тестовых данных с использованием реального сайта WordPress.
- Общий экспортный файл всей базы данных
- Полезно как для интеграции, так и для модульного тестирования
7. Жрать
Guzzle — это HTTP-клиент PHP, который упрощает отправку HTTP-запросов и интеграцию с веб-сервисами.
Guzzle — универсальный инструмент, поэтому тестирование — лишь один из возможных вариантов его использования. Вместе с локальным веб-сервером, таким как DevKinsta, Guzzle позволяет выполнять интеграционные тесты: вы можете использовать Guzzle для отправки HTTP-запроса на веб-сервер разработки, а затем передать ответ модульному тесту в PHPUnit, который проверяет содержимое и заголовки. установлены, как и ожидалось.
Основные функции Guzzle:
- Удовлетворяет стандартной рекомендации PHP «PSR-7» (для интерфейсов сообщений HTTP), исключая привязку к поставщику.
- Просто и быстро
- Тесты выполняются на реальном сайте WordPress, что повышает надежность
- Может быть выполнен из PHPUnit для простоты и скорости
- Интеграционные тесты могут быть автоматизированы и добавлены в процесс непрерывной интеграции.
8. WP-CLI
WP-CLI — это интерфейс командной строки для WordPress. С его помощью вы можете обновлять плагины, настраивать многосайтовые установки и многое другое, не используя веб-браузер.
WP-CLI не является инструментом тестирования, но тестирование входит в число его многочисленных вариантов использования. Например, после запуска нового веб-сервера разработки вы можете выполнить сценарий bash, содержащий команды WP-CLI, для импорта данных тестирования на сайт WordPress, создания пользователей с соответствующими ролями и возможностями, установки необходимых сторонних плагинов и другие подобные задачи.
Поскольку скрипт с командами WP-CLI может храниться в вашем репозитории Git, процесс выполнения интеграционных тестов может быть затем автоматизирован и интегрирован в ваш процесс непрерывной интеграции:
- Используйте инструмент экспорта WordPress для создания реальных данных тестирования и сохранения их в репозитории Git.
- Используйте DevKinsta для запуска веб-сервера с новым экземпляром WordPress.
- Используйте WP-CLI для импорта данных тестирования на сайт WordPress (DevKinsta может работать через WP-CLI).
- Создайте модульный тест в PHPUnit, чтобы Guzzle выполнил HTTP-запрос к веб-серверу, чтобы проверить содержимое и заголовки вашего ответа.
Основные функции WP-CLI:
- Позволяет удаленно выполнять команды для экземпляра WordPress через интерфейс командной строки.
- Расширяемый с помощью других инструментов
- Расширяет возможности стека тестирования
- Позволяет полностью автоматизировать процесс
9. XОтладка
XDebug — это расширение для PHP, которое предоставляет ряд функций для улучшения процесса разработки PHP, включая отладку, улучшения отчетов об ошибках PHP, трассировку, профилирование и анализ покрытия кода.
XDebug не поможет вам протестировать код, но поможет найти ошибку. Комбинация XDebug с PHPUnit особенно эффективна: если тест не пройден и вы не можете найти источник проблемы, вы можете использовать XDebug для добавления точек останова в код модульного теста. При повторном запуске модульного теста PHP-скрипт будет приостановлен в каждой из этих точек останова, что позволит вам проверить текущее состояние выполнения (стек вызовов, значения свойств и объектов и т. д.) и попытаться обнаружить, что не так.
Основные функции XDebug:
- Особенности интеграции для популярных редакторов PHP, включая VS Code, PHPStorm и Sublime.
- Профили, сколько времени тратится на каждый вызов функции и сколько памяти он потребляет
- Гораздо мощнее, чем простое использование
var_dump
для отладки кода. - Позволяет изменять значения переменных на лету при паузе в точках останова.
10. PHPStan
PHPStan — это инструмент статического анализа для PHP, предназначенный для поиска ошибок в коде еще до написания тестов.
Цель PHPStan — сократить количество тестов, которые должны написать разработчики. Этот инструмент выполняется первым в стеке тестирования, упреждающе отлавливая как можно больше ошибок. Только те ошибки, которые нельзя вывести из статического анализа (например, ошибки в логике), должны быть проверены с помощью модульных тестов.
PHPStan работает, сканируя всю кодовую базу и ища несоответствия. Например, значение ответа функции, возвращающей число с плавающей запятой, не может быть присвоено параметру функции целочисленного типа. Всякий раз, когда код содержит такое событие, это потенциальная ошибка, и PHPStan предупредит вас об этом на этапе разработки, прямо во время написания кода приложения.
Основные функции PHPStan:
- Автоматизация и интеграция в существующий процесс непрерывной интеграции
- Находит много хитрых ошибок, таких как несоответствие типов
- Сканирует всю кодовую базу, находя ошибки в редко исполняемых частях кода.
- Организованы по уровням возрастающей сложности, чтобы обеспечить постепенную интеграцию
- Включает расширения для самых популярных PHP-фреймворков и CMS, включая Symfony, Laravel, Doctrine, Nette и WordPress.
Резюме
Стоимость незамеченных ошибок в вашем приложении в рабочей среде может нанести ущерб вашей репутации и доходу, поэтому вы должны попытаться устранить их до того, как они затронут ваших пользователей.
В сложных приложениях практически невозможно быть на 100 % уверенным в отсутствии ошибок. Из-за этого вы должны настроить процесс, чтобы найти и удалить как можно больше ошибок в течение начального цикла разработки.
С хорошо разработанным набором инструментов для тестирования вы можете значительно минимизировать вероятность того, что ваше приложение поведет себя непредвиденным образом. Сообщество открытого исходного кода создало и сделало доступным множество инструментов для тестирования различных аспектов приложения, которые вы можете — и должны! — использовать для создания комплексного стека тестирования.
В этой статье мы рассмотрели 10 инструментов, которые помогут вам достичь ваших целей по тестированию PHP-кода в плагине WordPress.
Какой из этих инструментов вы использовали для своего последнего проекта? Дайте нам знать, что вы построили с его помощью, в разделе комментариев ниже!