10 инструментов тестирования PHP для плагинов WordPress

Опубликовано: 2022-08-05

Никакое программное обеспечение не свободно от ошибок. Это аксиома, применимая к каждому языку программирования и каждому приложению.

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

  • Легкая: пользователь не может щелкнуть неработающую ссылку.
  • Серьезно: кнопка «Отправить» в контактной форме не работает, что пользователь обнаруживает только после того, как составил свое сообщение.
  • Серьезный: неправильно настроенный платежный шлюз, из-за чего пользователи не могут покупать товары в вашем интернет-магазине и покидают сайт.

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

  • Доступность и удобство использования
  • Приемлемая производительность
  • Управление трафиком и нагрузкой


В этой статье мы рассмотрим 10 инструментов, созданных сообществом открытого исходного кода, которые могут помочь составить стек для тестирования PHP-кода в плагинах WordPress. Некоторые из этих инструментов были специально разработаны для тестирования PHP-кода; другие предназначены для тестирования кода WordPress; и несколько других инструментов были созданы для обработки некоторых общих функций, полезных для тестирования.

1. ДевКинста

Подробная информация о локальном сайте WordPress на DevKinsta.
Подробная информация о локальном сайте WordPress на DevKinsta.

DevKinsta — это локальный пакет разработки для сайтов WordPress. Просто предоставив некоторые основные сведения, локальный экземпляр сайта WordPress будет немедленно установлен, и он поставляется в комплекте с несколькими полезными инструментами разработки, такими как почтовый ящик, менеджер базы данных и ведение журнала для упрощения устранения неполадок.

DevKinsta обычно используется разработчиками и дизайнерами при создании тем и плагинов WordPress. Но его также можно использовать в качестве локального веб-сервера для выполнения интеграционных и функциональных тестов. Это достигается в сочетании с инструментом HTTP, который помогает вам проверить правильность содержимого вашего ответа и заголовков.

Основные функции DevKinsta:

  • Легко создать новую среду WordPress и удалить ее, если она больше не нужна.
  • Позволяет тестировать любую поддерживаемую версию PHP и WordPress и любую их комбинацию.
  • Легко интегрируется с MyKinsta, где пользователи могут создавать внешние резервные копии своих сайтов и данных.

2. PHPЮнит

Логотип PHPUnit.
Логотип PHPUnit.

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 на GitHub.
Brain Faker на GitHub.

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. Издевательство

Насмешка на GitHub.
Насмешка на GitHub.

Mockery — это простая, но гибкая платформа PHP-фиктивных объектов, предназначенная для использования вместе с PHPUnit, PHPSpec или любой другой средой модульного тестирования. Он предлагает тестовую двойную структуру, способную определять все возможные операции и взаимодействия с объектами с использованием удобочитаемого предметно-ориентированного языка (DSL).

Основные функции Mockery:

  • Обеспечивает гибкое создание фиктивных объектов и заглушек (которые предоставляют предопределенные готовые ответы на определенные вызовы, сделанные во время тестов).
  • Расширяет возможности изоляции тестов PHPUnit.
  • Гибкий API для выражения фиктивных ожиданий, максимально имитирующий описание на естественном языке (например $mock->shouldReceive('myMethod')->once()->andReturn('Hello world!'); )
  • Модульные тесты с использованием фиктивных объектов в памяти, чтобы избежать необходимости доступа к более медленным системам (таким как базы данных, файловые системы или внешние службы).
  • Может имитировать как детерминированное, так и недетерминированное поведение

6. Встроенный инструмент экспорта WordPress

Инструмент экспорта WordPress.
Инструмент экспорта 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.
Логотип WP-CLI.

WP-CLI — это интерфейс командной строки для WordPress. С его помощью вы можете обновлять плагины, настраивать многосайтовые установки и многое другое, не используя веб-браузер.

WP-CLI не является инструментом тестирования, но тестирование входит в число его многочисленных вариантов использования. Например, после запуска нового веб-сервера разработки вы можете выполнить сценарий bash, содержащий команды WP-CLI, для импорта данных тестирования на сайт WordPress, создания пользователей с соответствующими ролями и возможностями, установки необходимых сторонних плагинов и другие подобные задачи.

Поскольку скрипт с командами WP-CLI может храниться в вашем репозитории Git, процесс выполнения интеграционных тестов может быть затем автоматизирован и интегрирован в ваш процесс непрерывной интеграции:

  1. Используйте инструмент экспорта WordPress для создания реальных данных тестирования и сохранения их в репозитории Git.
  2. Используйте DevKinsta для запуска веб-сервера с новым экземпляром WordPress.
  3. Используйте WP-CLI для импорта данных тестирования на сайт WordPress (DevKinsta может работать через WP-CLI).
  4. Создайте модульный тест в PHPUnit, чтобы Guzzle выполнил HTTP-запрос к веб-серверу, чтобы проверить содержимое и заголовки вашего ответа.

Основные функции WP-CLI:

  • Позволяет удаленно выполнять команды для экземпляра WordPress через интерфейс командной строки.
  • Расширяемый с помощью других инструментов
  • Расширяет возможности стека тестирования
  • Позволяет полностью автоматизировать процесс

9. XОтладка

Логотип XDebug.
Логотип XDebug.

XDebug — это расширение для PHP, которое предоставляет ряд функций для улучшения процесса разработки PHP, включая отладку, улучшения отчетов об ошибках PHP, трассировку, профилирование и анализ покрытия кода.

XDebug не поможет вам протестировать код, но поможет найти ошибку. Комбинация XDebug с PHPUnit особенно эффективна: если тест не пройден и вы не можете найти источник проблемы, вы можете использовать XDebug для добавления точек останова в код модульного теста. При повторном запуске модульного теста PHP-скрипт будет приостановлен в каждой из этих точек останова, что позволит вам проверить текущее состояние выполнения (стек вызовов, значения свойств и объектов и т. д.) и попытаться обнаружить, что не так.

Основные функции XDebug:

  • Особенности интеграции для популярных редакторов PHP, включая VS Code, PHPStorm и Sublime.
  • Профили, сколько времени тратится на каждый вызов функции и сколько памяти он потребляет
  • Гораздо мощнее, чем простое использование var_dump для отладки кода.
  • Позволяет изменять значения переменных на лету при паузе в точках останова.

10. PHPStan

Логотип PHPStan.
Логотип PHPStan.

PHPStan — это инструмент статического анализа для PHP, предназначенный для поиска ошибок в коде еще до написания тестов.

Цель PHPStan — сократить количество тестов, которые должны написать разработчики. Этот инструмент выполняется первым в стеке тестирования, упреждающе отлавливая как можно больше ошибок. Только те ошибки, которые нельзя вывести из статического анализа (например, ошибки в логике), должны быть проверены с помощью модульных тестов.

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

Основные функции PHPStan:

  • Автоматизация и интеграция в существующий процесс непрерывной интеграции
  • Находит много хитрых ошибок, таких как несоответствие типов
  • Сканирует всю кодовую базу, находя ошибки в редко исполняемых частях кода.
  • Организованы по уровням возрастающей сложности, чтобы обеспечить постепенную интеграцию
  • Включает расширения для самых популярных PHP-фреймворков и CMS, включая Symfony, Laravel, Doctrine, Nette и WordPress.

Резюме

Стоимость незамеченных ошибок в вашем приложении в рабочей среде может нанести ущерб вашей репутации и доходу, поэтому вы должны попытаться устранить их до того, как они затронут ваших пользователей.
Ознакомьтесь с этими 10 полезными инструментами, которые помогут вам создать мощный стек для тестирования PHP-кода в плагинах WordPress Click to Tweet
В сложных приложениях практически невозможно быть на 100 % уверенным в отсутствии ошибок. Из-за этого вы должны настроить процесс, чтобы найти и удалить как можно больше ошибок в течение начального цикла разработки.

С хорошо разработанным набором инструментов для тестирования вы можете значительно минимизировать вероятность того, что ваше приложение поведет себя непредвиденным образом. Сообщество открытого исходного кода создало и сделало доступным множество инструментов для тестирования различных аспектов приложения, которые вы можете — и должны! — использовать для создания комплексного стека тестирования.

В этой статье мы рассмотрели 10 инструментов, которые помогут вам достичь ваших целей по тестированию PHP-кода в плагине WordPress.

Какой из этих инструментов вы использовали для своего последнего проекта? Дайте нам знать, что вы построили с его помощью, в разделе комментариев ниже!