Введение в автоматизированное тестирование WordPress-плагинов с помощью PHPUnit
Основной причиной, почему WordPress имеет множество плагинов, является то, что разработчикам легко их создавать. При этом большинство программистов не имеют достаточного опыта для тестирования своих плагинов.
В этой статье мы расскажем, что такое автоматическое тестирование, познакомимся с PHPUnit и WP-CLI, научимся создавать тесты и настроим непрерывное автоматическое тестирование с помощью Travis CI.
- Что такое автоматизированное тестирование?
- Преимущества автоматизированного тестирования
- Создание WordPress-плагина
- Модульное тестирование WordPress плагина
- Устанавливаем PHPUnit
- Устанавливаем WP-CLI
- Настройка модульного теста для плагина
- Создаем собственные тесты для плагина
- Непрерывное автоматизированное тестирование с помощью Travis CI
- Краткое заключение
Что такое автоматизированное тестирование?
Согласно Википедии, автоматическое тестирование – это использование специального программного обеспечения для контролирования выполнения тестов и сравнения полученных результатов с прогнозируемыми. Оно позволяет автоматизировать некоторые повторяющиеся задачи. А также выполнить дополнительное тестирование, которое трудно осуществить вручную.
Существует несколько типов тестирования. Самое популярное из них – модульное. Модульные тесты позволяют проверить, что блок кода, функция или метод класса делает то, что и задумывалось. В этом руководстве мы проведем именно модульное тестирование.
Автоматическое тестирование помогает выявлять ошибки, чтобы они не проявились в готовом продукте. Написание и тестирование займет больше времени, чем просто создание плагина. Но в результате плагин будет содержать меньше ошибок.
Рассмотрим простой пример того, насколько бесценны модульные тесты, и для чего их можно использовать.
Мой плагин для привлечения клиентов включает в себя класс OptinThemesRepository, в котором есть метод add() для добавления новых шаблонов форм регистрации и метод get() для извлечения шаблона формы.
Чтобы функции add() и get() работали корректно, я создал тест, исходный код которого приведен ниже.
public function testAddGetMethods()
{
$kick_optin_form = array(
'name' => 'Kick',
'optin_class' => 'kick',
'optin_type' => 'kick',
'screenshot' => MAILOPTIN_ASSETS_URL . 'img/kick.png'
);
// добавляем тему kick optin
OptinThemesRepository::add($kick_optin_form);
$result = OptinThemesRepository::get('kick');
$this->assertEquals($kick_optin_form, $result);
}
Если в будущем этот тест перестанет работать, я узнаю, что есть проблема, и где она возникла: в каком методе класса, функции и строке кода.
Преимущества автоматизированного тестирования
Теперь, когда мы знаем, что такое автоматизированное тестирование, рассмотрим его преимущества более подробно.
Раннее обнаружение ошибок
С помощью автоматических средств тестирования можно легко найти допущенные ошибки. Это сэкономит время и усилия, необходимые для отслеживания ошибок.
Более высокое качество программного обеспечения
Автоматическое тестирование не только предоставляет точные результаты, но и экономит время.
Простая и надежная отчетность
Автоматизированные средства тестирования позволяют отслеживать каждый тестовый скрипт. В файлах журнала отчетности отображается количество выполненных тестовых сценариев и их статус (например, успешно пройден, не пройден или пропущен), сведения о выявленных ошибках и подсказки о том, как их исправить.
Создание WordPress-плагина
Мы собираемся создать плагин для проверки метатегов Google и Bing в административной панели WordPress. Исходный код плагина размещен в моей учетной записи GitHub.
Код этого плагина, приведенный ниже, находится в файле wp-meta-verify.php.
<?php
class WP_Meta_Verify
{
public function __construct()
{
add_action('wp_head', [$this, 'header_code']);
}
public function header_code()
{
$google_code = get_option('wpmv_google_code');
$bing_code = get_option('wpmv_google_code');
echo $this->google_site_verification($google_code);
echo $this->bing_site_verification($bing_code);
}
public function google_site_verification($code)
{
return "<meta name="google-site-verification" content="$code">";
}
public function bing_site_verification($code)
{
return "<meta name="msvalidate.01" content="$code">";
}
}
new WP_Meta_Verify();
Обратите внимание, что мы не включили в плагин страницу настроек, на которой обычно сохраняется код подтверждения Google и Bing. Я сделал это специально, чтобы сделать пример простым. Но использование get_option ('wpmv_google_code') и get_option ('wpmv_bing_code') предполагают, что есть страница настроек, и они извлекают с нее коды проверки.
Модульное тестирование WordPress плагина
PHPUnit – стандартный инструмент для тестирования PHP.WP-CLI является интерфейсом командной строки для WordPress.
До WP-CLI установка PHPUnit-тестирования для плагинов WordPress приносила много боли. WP-CLI имеет отличное руководство по настройке. Но мы все равно рассмотрим эти шаги в рамках данной статьи.
Устанавливаем PHPUnit
Для установки PHPUnit выполните следующие команды.
composer global require phpunit/phpunit:5.*
Запустите команду phpunit –version, чтобы подтвердить установку.
Устанавливаем WP-CLI
Для установки WP-CLI, выполните следующие команды.
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
Запустите команду wp –info для подтверждения установки.
После установки PHPUnit и WP-CLI мы будем использовать последний инструмент, чтобы настроить модульный тест для плагина.
Настройка модульного теста для плагина
Измените каталог терминала на корневую папку WordPress и выполните приведенную ниже команду для создания тестовых файлов.
wp scaffold plugin-tests wp-meta-verify
Ниже приведен пример структуры плагина после того, как приведенная выше команда создаст файлы теста.
|-bin/
|----install-wp-tests.sh
|-tests/
|----bootstrap.php
|----test-sample.php
|-.travis.yml
|-phpcs.xml.dist
|-phpunit.xml.dist
|-wp-meta-verify.php
Примечание: по умолчанию команда для проведения тестов wp scaffold генерирует файл конфигурации Travis CI. Вы можете указать флаг --ci для создания файла конфигурации для сервиса CI, который вы используете. Например: wp scaffold-plugin-tests --c gitlab.
Измените каталог своего терминала на директорию вашего плагина и запустите скрипт установки:
cd path-to-wordpress-plugin
bin/install-wp-tests.sh wordpress_test root '' localhost latest
Предположим, что имя пользователя MySQL – homestead, а пароль – secret. Тогда ваш сценарий установки будет выглядеть следующим образом:
bin/install-wp-tests.sh wordpress_test homestead 'secret' localhost latest
Выполните команду phpunit для запуска теста по умолчанию в tests/test-sample.php.

Результат теста PHPUnit test result
Создаем собственные тесты для плагина
Создайте файл test-wp-meta-verify.php в папке с тестами. Он будет содержать тесты плагина с классом setUp.
<?php
class WP_Meta_VerifyTest extends WP_UnitTestCase
{
public function setUp()
{
parent::setUp();
$this->class_instance = new WP_Meta_Verify();
}
public function test_google_site_verification()
{
}
public function test_bing_site_verification()
{
}
}
Чтобы метод считался модульным тестом, он должен иметь префикс test. Лучшей практикой является добавление окончания Test к каждому тестовому классу, хотя это не требуется.
Неясно, что делает setUp ()?PHPUnit запускает его один раз перед каждым тестовым методом и в новых экземплярах тестового класса.
Также существует метод tearDown(), но он запускается после каждого метода тестирования. Кроме этого есть setUpBeforeClass() и tearDownAfterClass(), которые выполняются до и после каждого тестового примера, соответственно. Тестовый пример – это класс, который содержит несколько методов тестирования. Дополнительную информацию смотрите в руководстве по WordPress и документации PHPUnit.
Из кода приведенного выше класса видно, что мы собираемся создавать тесты методов google_site_verification и bing_site_verification.
public function test_google_site_verification()
{
$meta_tag = $this->class_instance->google_site_verification('B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g');
$expected = '<meta name="google-site-verification" content="B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g">';
$this->assertEquals($expected, $meta_tag);
}
public function test_bing_site_verification()
{
$meta_tag = $this->class_instance->bing_site_verification('B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g');
$expected = '<meta name="msvalidate.01" content="B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g">';
$this->assertEquals($expected, $meta_tag);
}
Эти тесты гарантируют, что оба метода вернут правильный метатег, когда в качестве аргументов им будут переданы коды проверки Google и Bing.
Запустите команду phpunit, и вы увидите результат, схожий со скриншотом, приведенным ниже.

Результат работы PHPUnit
Непрерывное автоматизированное тестирование с помощью Travis CI
Travis CI – это сервис, используемый для создания и тестирования программных проектов, размещенных на GitHub. Поэтому, чтобы использовать Travis CI, нужно опубликовать плагин на GitHub. Делаем это сейчас. Смело можете обращаться к моему проекту. Благодаря WP-CLI мы добавили Travis CI в наш плагин с помощью файла .travis.yml.
Придерживаясь рекомендаций и стандартов PHP, для плагинов необходима как минимум версия PHP 5.4. Чтобы сборки работали корректно, мне пришлось заменить их матрицу следующим кодом, размешенным в файле .travis.yml.
matrix:
include:
- php: 7.1
env: WP_VERSION=latest
- php: 7.0
env: WP_VERSION=latest
- php: 5.6
env: WP_VERSION=latest
- php: 5.6
env: WP_VERSION=trunk
- php: 5.5
env: WP_VERSION=latest
- php: 5.4
env: WP_VERSION=latest
Перейдите в Travis CI и войдите в свой аккаунт на GitHub. Следуйте инструкциям, появляющимся на экране, чтобы добавить репозиторий GitHub. После синхронизации учетной записи с GitHub зайдите в репозиторий и активируйте свой плагин.

Настройка репозитория Travis CI
В следующий раз, когда измените код и передадите данные на GitHub, будет запущена сборка на Travis CI.

Результат сборки Travis CI
Предоставляю успешный результат сборки на ваше рассмотрение.
Краткое заключение
Надеюсь, теперь вы осознаете важность тестирования и знаете, как создать тест для собственного WordPress-плагина.