Тестирование PHP-приложений с помощью Codeception

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

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

Что такое Codeception?

Codeception это многофункциональный фреймворк для тестирования PHP-приложений. Он может выполнять комплексное тестирование, а также тестирование отдельных элементов веб-приложений.

Рассматриваемый инструмент создан на основе уже известного фреймворка для тестирования - PHPUnit.

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

Установка и настройка

Начнем с создания папки для хранения приложения, которое будет тестироваться с помощью Codeception:

cd Sites
mkdir codeception

Я уже создал небольшой пример в HTML- и PHP-файлах, которые мы можем использовать для тестирования.

Вы можете просто скопировать и вставить код, представленный ниже. Начнем с файла toupper.html:

# codeception/toupper.html
 
<!DOCTYPE html>
<html>
<head>
   <title> Конвертируй меня!</title>
</head>
<body>
 
   <h1>Конвертируй меня!</h1>
 
   <form action="toupper.php" method="post">
 
      <label for="string">Конвертируй меня в верхний регистр:</label>
      <input type="text" name="string" id="string">
 
      <input type="submit" value="Конвертировать">
 
   </form>
 
</body>
</html>

Эта HTML-страница отображает форму, позволяющую пользователю ввести строку текста и конвертировать ее в строчные буквы с помощью PHP.

Далее, создадим PHP-файл, который будет обрабатывать данные формы:

# codeception/toupper.php
<?php
$message = "Ничего не введено";
 
if (!empty($_POST['string'])) {
   $message = "Строка сконвертирована: " . strtoupper($_POST['string']);
}
 
?>
<!DOCTYPE html>
<html>
<head>
   <title>В верхний регистр!</title>
</head>
<body>
 
   <h1> В верхний регистр!</h1>
 
   <p><?php echo $message; ?></p>
 
   <p><a href="toupper.html">Назад к форме</a>.</p>
 
</body>
</html>

Эта страница создает переменную $message для хранения стандартного сообщения. Затем, мы можем проверить, отправлена ли форма. Если да, то заменяем стандартное сообщение строкой, сконвертированной в заглавные буквы.

Далее, мы выводим сообщение, а также ссылку для возврата к форме, внизу страницы.

Это очень простое PHP-приложение, но оно позволит нам ознакомиться с возможностями Codeception.

Теперь, давайте скачаем и установим Codeception. К счастью, это очень просто. Для этого, можно пойти разными путями: использовать Composer, Git или Phar.

Я предпочитаю Composer, так что давайте создадим файл composer.json в корне папки с примером нашего веб-приложения:

cd codeception
touch composer.json

Далее, откроем файл composer.json в текстовом редакторе и добавим следующие строки:

{
    "require": {
        "codeception/codeception": "*"
    }
}

Затем, запустим composer в терминале:

composer update

После этого, выполните команду:

./vendor/bin/codecept bootstrap

В результате её выполнения в директории нашего тестового приложения создадутся папки tests и vendor.

Далее, нужно сделать наши URL-адреса локальными в файле tests/acceptance.suite.yml:

class_name: WebGuy
modules:
    enabled:
        - PhpBrowser
        - WebHelper
    config:
        PhpBrowser:
            url: 'http://localhost/codeception/'

Наконец, все установлено и готово к тестированию.

Тестирование приложения

Обычное тестирование позволяет проверить поведение приложения через обычный просмотр страниц сайта. Нужно просто заполнить форму и отослать ее, а затем проанализировать полученный результат.

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

Генерация тестов

Итак, нам нужен файл, в который мы будем записывать тесты. Codeception дает возможность сделать это очень просто, используя генератор скриптов codecept.

Давайте создадим тест для нашего приложения Toupper:

./vendor/bin/codecept generate:cept acceptance Toupper

С помощью вышеприведенной команды, мы сгенерировали тест с именем Toupper (на самом деле, после генерации, файл будет называться ToupperCept.php).

Написание теста

При использовании Codeception вы, фактически, имеете в своем распоряжении энное количество виртуальных посетителей с различным поведением, которые называются «Guys»: CodeGuy, TestGuy и WebGuy.

Для тестирования мы будем использовать WebGuy. Давайте откроем файл ToupperCept.php и начнем создание нового WebGuy, который будет использовать наши тесты:

$I = new WebGuy($scenario);

Мы создали новый объект WebGuy, хранящийся в переменной $I. Теперь, мы можем использовать этот объект для тестирования различных частей нашей страницы, чтобы убедиться, что все работает корректно.

Далее, нам нужно убедиться, что наша страница Toupper загружается первой, а затем запускается сам тест:

$I = new WebGuy($scenario);
$I->wantTo('Хочу убедиться, что форма скрипта Toupper работает корректно');
$I->amOnPage('toupper.html');
$I->see('Конвертируй меня!');

В примере выше, мы используем объект $I, чтобы вызвать несколько методов для запуска теста. Мы начинаем с алгоритма. В нашем случае, мы хотим проверить работоспособность формы скрипта Toupper, используя метод wantTo.

Затем, мы используем метод amOnPage, чтобы удостовериться, что находимся на нужной странице - toupper.html. Наконец, мы вызываем метод see, чтобы убедиться, что текст: «Конвертируй меня!» отображен на странице.

Запуск теста

Теперь, имея рабочий тест, выполним следующую команду:

./vendor/bin/codecept run

Эта команда запустит все тесты. В консоли вы увидите вывод, показывающий, что тест пройден успешно:

рабочий тест

Если вы хотите запустить только тест типа acceptance, то следует использовать команду:

./vendor/bin/codecept run acceptance

В дополнение, вы можете просмотреть полный список выполняемых действий, используя флаг --steps:

./vendor/bin/codecept run acceptance --steps

Вот так будет выглядеть ваша консоль после выполнения данной команды:

консоль

Тестирование форм

Давайте посмотрим, как мы можем использовать Codeception для тестирования функциональности нашей формы.

Добавим следующие строки к нашему файлу ToupperCept.php:

$I = new WebGuy($scenario);
$I->wantTo('Хочу убедиться, что форма скрипта Toupper работает корректно');
$I->amOnPage('toupper.html');
$I->see('Конвертируй меня!');
$I->fillField('string', "Конвертируй меня в верхний регистр");
$I->click('Конвертировать');
$I->amOnPage('toupper.php');
$I->see('В верхний регистр!');

В данном коде, мы просто продолжаем с места, где остановились. После того, как мы удостоверились, что находимся на нужной странице, заполняем форму, используя метод fillField, передавая ему значения name и value этой формы, и затем нажимаем кнопку «Конвертировать».

Затем, проверяем, находимся ли мы на странице toupper.php, для чего проверяем содержимое заголовка.

Теперь запустим наш тест снова:

./vendor/bin/codecept run

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

тест пройден

Тестирование ссылок

Наконец, давайте протестируем ссылку на странице toupper.php, чтобы убедиться, что она ведет нас назад на главную страницу:

$I = new WebGuy($scenario);
$I->wantTo('Хочу убедиться, что форма скрипта Toupper работает корректно');
$I->amOnPage('toupper.html');
$I->see('Конвертируй меня!');
$I->fillField('string', "Конвертируй меня в верхний регистр ");
$I->click('Конвертировать');
$I->amOnPage('toupper.php');
$I->see('В верхний регистр!');
$I->amOnPage('toupper.php');
$I->see('В верхний регистр!');
$I->click('Назад к форме');
$I->see('Конвертируй меня!');

Здесь мы вновь, вызываем метод click, чтобы кликнуть на ссылку и убедиться, что возврат происходит на нужную страницу:

метод click

Заключение

Теперь вы знакомы с основами работы с Codeception и можете работать с ним самостоятельно. Попробуйте модифицировать тест самостоятельно, чтобы он проверял, что форма отображает сообщение об ошибке: «Ничего не введено», когда отсылается пустая форма.

Вот финальная версия кода:

$I = new WebGuy($scenario);
$I->wantTo('Хочу убедиться, что форма скрипта Toupper работает корректно');
$I->amOnPage('toupper.html');
$I->see('Конвертируй меня!');
$I->fillField('string', "Конвертируй меня в верхний регистр ");
$I->click('Конвертировать');
$I->amOnPage('toupper.php');
$I->see('В верхний регистр!');
$I->amOnPage('toupper.php');
$I->see('В верхний регистр!');
$I->click('Назад к форме');
$I->see('Конвертируй меня!');
$I->fillField('string', '');
$I->click('Конвертировать');
$I->amOnPage('toupper.php');
$I->see('Ничего не введено');
финальная версия кода

В заключение, хотелось бы сказать, что Codeception это прекрасный фреймворк для тестирования, который позволяет вам легко писать собственные тесты.

Читайте документацию для получения детальных примеров и информации о других парадигмах тестирования.

Перевод статьи «Acceptance Testing With Codeception» был подготовлен дружной командой проекта Сайтостроение от А до Я.

29 января 2014 в 13:07
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок