Введение в автоматизированное тестирование WordPress-плагинов с помощью PHPUnit

Основной причиной, почему 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-pluginbin/install-wp-tests.sh wordpress_test root '' localhost latest

Предположим, что имя посетителя MySQLhomestead, а пароль – secret. Тогда сценарий установки будет выглядеть следующим образом:

bin/install-wp-tests.sh wordpress_test homestead 'secret' localhost latestВыполните команду phpunit для запуска теста по умолчанию в tests/test-sample.php.
Введение в автоматизированное тестирование WordPress-плагинов при помощи PHPUnit

Результат теста 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 , и вы увидите результат, схожий со скриншотом, приведенным ниже.

Введение в автоматизированное тестирование WordPress-плагинов при помощи 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 зайдите в репозиторий и активируйте плагин.

Введение в автоматизированное тестирование WordPress-плагинов при помощи PHPUnit

Параметр репозитория Travis CI

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

Введение в автоматизированное тестирование WordPress-плагинов при помощи PHPUnit

Результат сборки Travis CI

Предоставляю успешный результат сборки на рассмотрение.

Краткое заключение

Надеюсь, сейчас вы осознаете важность тестирования и знаете, как создать тест для собственного WordPress-плагина .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *