Как сделать автотестирование лицензий WordPress плагинов

Автоматическое тестирование лицензий в WordPress плагинах позволяет быстро и надежно проверять корректность активации, деактивации и обработки ошибок лицензирования. Это особенно важно для разработчиков, которые хотят обеспечить стабильность работы своих продуктов и минимизировать проблемы с поддержкой. В этой статье я подробно расскажу, как настроить автотестирование лицензий WordPress плагинов, приведу примеры кода и инструменты, которые помогут автоматизировать эти процессы.

Почему важно внедрять автотестирование лицензий WordPress плагинов

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

  • Быстро выявлять баги в логике проверки лицензий;
  • Проверять интеграцию с сервером лицензий при изменениях кода;
  • Обеспечивать стабильность работы плагина после обновлений;
  • Экономить время на тестирование при выпуске новых версий.

Основные задачи автотестирования лицензий WordPress плагинов

Перед тем как писать тесты, нужно определить ключевые сценарии, которые должны покрываться. Обычно это:

  • Проверка активации лицензии с корректным ключом;
  • Обработка ошибок при неверном или просроченном ключе;
  • Проверка лимитов активаций (например, по количеству сайтов);
  • Деактивация лицензии и проверка корректного обновления состояния;
  • Обработка сетевых ошибок при обращении к серверу лицензий;
  • Проверка обновления ключа и реакция плагина на статус лицензии.

Все эти сценарии должны быть отражены в автоматических тестах, чтобы гарантировать, что изменения в коде не вызовут регрессий.

Выбор инструментов для автотестирования лицензий в WordPress

Для тестирования WordPress плагинов часто используют PHP Unit — стандартный инструмент для юнит-тестирования в PHP. Кроме того, полезно применять WP_Mock — библиотеку, которая позволяет создавать заглушки и имитировать поведение функций WordPress, что облегчает тестирование изолированных компонентов плагина.

Для интеграционных тестов, которые включают обращение к серверу лицензий, можно использовать инструменты мокирования HTTP-запросов, например Guzzle с плагином Guzzle Mock Handler, или библиотеку Mockery для создания заглушек.

Настройка PHP Unit и WP_Mock

Чтобы начать работу, установите зависимости через Composer:

composer require --dev phpunit/phpunit 10.x wp-mock/wp-mock

Далее создайте базовый класс теста с инициализацией WP_Mock:

class Wplicense_TestCase extends \WP_Mock\TestCase {
    public function setUp(): void {
        \WP_Mock\setUp();
    }

    public function tearDown(): void {
        \WP_Mock\tearDown();
    }
}

Этот класс будет базовым для всех тестов, в которых вам нужно эмулировать функции WordPress.

Пример автотеста активации лицензии

Предположим, у вас есть функция wplicense_activate_license($key), которая обращается к серверу лицензий и возвращает статус активации. Напишем автотест с мокированием HTTP-запроса:

class ActivateLicenseTest extends Wplicense_TestCase {
    public function testActivateLicenseSuccess() {
        // Мокаем функцию wp_remote_post для успешного ответа
        \WP_Mock::userFunction('wp_remote_post', [
            'times' => 1,
            'return' => [
                'response' => ['code' => 200],
                'body' => json_encode(['success' => true, 'license' => 'valid'])
            ]
        ]);

        $result = wplicense_activate_license('VALID-KEY-1234');
        $this->assertTrue($result['success']);
        $this->assertEquals('valid', $result['license']);
    }

    public function testActivateLicenseFailure() {
        \WP_Mock::userFunction('wp_remote_post', [
            'times' => 1,
            'return' => [
                'response' => ['code' => 200],
                'body' => json_encode(['success' => false, 'error' => 'invalid_key'])
            ]
        ]);

        $result = wplicense_activate_license('INVALID-KEY');
        $this->assertFalse($result['success']);
        $this->assertEquals('invalid_key', $result['error']);
    }
}

Такой подход позволяет изолировать логику активации и проверять поведение функции при разных ответах сервера.

Тестирование ограничения количества активаций по лицензии

Если ваш плагин реализует ограничение по количеству активаций лицензии (например, 3 сайта), нужно проверить, что при превышении лимита возвращается корректная ошибка. Рассмотрим пример функции wplicense_check_activation_limit($key) и тест для нее:

public function testActivationLimitExceeded() {
    \WP_Mock::userFunction('wp_remote_post', [
        'times' => 1,
        'return' => [
            'response' => ['code' => 200],
            'body' => json_encode(['success' => false, 'error' => 'activation_limit_reached'])
        ]
    ]);

    $result = wplicense_check_activation_limit('KEY-OVERLIMIT');
    $this->assertFalse($result['success']);
    $this->assertEquals('activation_limit_reached', $result['error']);
}

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

Использование плагина Clearfy Pro для упрощения тестирования

Если вы используете Clearfy Pro, то его инструменты оптимизации и отладки помогут упростить процесс тестирования и мониторинга состояния лицензий. Clearfy Pro позволяет отключать ненужные функции WordPress и ускорять работу сайта, что полезно при нагрузочном тестировании плагинов с лицензиями.

Также в Clearfy Pro есть возможности для ведения логов и отслеживания ошибок, которые можно использовать для выявления проблем с лицензиями в реальном времени. Подробнее о Clearfy Pro и его возможностях можно узнать на официальной странице.

Рекомендации по организации автотестирования лицензий

  • Разделяйте логику обращения к серверу лицензий и обработку результатов, чтобы упростить мокирование в тестах.
  • Пишите тесты для всех нестандартных ситуаций — ошибки сети, неверные данные, блокировки.
  • Используйте CI/CD системы для запуска тестов при каждом коммите, чтобы быстро выявлять проблемы.
  • Документируйте тесты и логику лицензирования, чтобы другие разработчики могли легко поддерживать систему.

Пример функции активации лицензии с разделением логики

function wplicense_activate_license($license_key) {
    $response = wplicense_send_license_request('activate_license', $license_key);
    if (is_wp_error($response)) {
        return ['success' => false, 'error' => $response->get_error_message()];
    }

    $body = json_decode(wp_remote_retrieve_body($response), true);
    if (!empty($body['success'])) {
        return ['success' => true, 'license' => $body['license']];
    }

    return ['success' => false, 'error' => $body['error'] ?? 'unknown_error'];
}

function wplicense_send_license_request($action, $license_key) {
    $api_url = 'https://license-server.example.com/api';
    $args = [
        'body' => [
            'action' => $action,
            'license_key' => $license_key,
            'product_id' => 'your-plugin-id',
        ],
        'timeout' => 15,
    ];

    return wp_remote_post($api_url, $args);
}

Такой подход облегчает мокирование wplicense_send_license_request при тестах и упрощает поддержку кода.

Как защитить лицензии WordPress плагинов от пиратского использования
26.01.2026
Как создать собственный лицензионный сервер для WordPress плагинов
25.02.2026
Решение проблем с кешированием при активации лицензий WordPress плагинов
24.07.2026
Решение проблем с лицензиями WooCommerce при использовании комплексных подписок
18.05.2026
Как создать двухфакторную авторизацию в WordPress для защиты плагинов
21.01.2026