Codeception это современный фреймворк для приемочного, функционального и юнит-тестирования в PHP. Он сделан, чтобы быть максимально простым и удобным в написании и выполнении тестов. С ним тесты для ваших веб-приложений могут выглядеть так:
<?php
$I->wantTo('create new blog post');
$I->amOnPage('/blog/posts');
$I->click('Create new post');
$I->fillField('Title','Codeception, a new way of testing!');
$I->fillField('Text','Codeception is new PHP full-stack testing framework.');
$I->click('Send');
$I->see('Congratulations, your post is successfully created!');
?>
Согласитесь, такой тест понятен без дополнительных комментариев. А теперь самое интересное: этот код без всяких изменений может быть выполнен как функциональный тест в фреймворках Symfony2, Yii, Laravel, Zend Framework, а также в браузерном эмуляторе и конечно де через Selenium.
Таким образом, вам предлагается единый интерфейс для написания функциональных тестов практически для любого сайта. В Codeception3 в максимально простой форме вы описываете весь тест в виде сценария. Вы повторяете действия пользователя, который использует ваше веб-приложение: кликает по ссылкам, заполняет формы и ожидает увидеть некоторый результат. Логично было бы написать тест, который бы в точности отражал его действия. При этом сам процесс написания теста крайне прост, если в своей IDE вы используете автодополнение:
Установка
Для запуска Codeception необходим PHP версии 5.3 и выше с включенным curl расширением.
Установить Codeception можно с через пакетный менеджер Composer или скачав запускаемый phar архив
Если вы скачали phar архив, то в каталоге с тестируемым приложением нужно выполнить команду
php codecept.phar bootstrap
которая создаст конфигурационный файл и папку tests для трех категорий тестов:
- unit
- functional
- acceptance.
Тут важно отметить, что мы различаем функциональные и приемочные тесты. Последние требуют наличие веб-сервера, на котором и будет проходить тестирование посредством Selenium или эмулятора браузера. Функциональные запускают приложение внутри самого теста, как это, например, происходит при тестирвоании в Symfony или Zend Framework. Проще всего начать с написания приемочного теста.
В каталоге tests/acceptance
создадим новый файл StartPageCept.php
:
<?php
$I = new AcceptanceTester($scenario);
$I->wantToTest('front page of my site');
$I->amOnPage('/');
$I->see('A sample text on my site');
?>
Он проверяет, что на главной странице вашего сайта есть текст: A sample text on my site. Впишите в see
текст, который там действительно есть, и ваш тест готов к прогонке. Но прежде чем запустить его, вспомним, что приемочные тесты требуют, чтобы сайт выполнялся внутри веб-сервера. А значит необходимо сообщить url
через который можно получить доступ к нашему сайту. Откроем файл: tests/acceptance.suite.yml
config:
PhpBrowser:
url: 'тут мы впишем url к главке'
Теперь выполните.
php codecept.phar run acceptance
И увидите что-то типа такого:
Suite acceptance started
Trying to see front page of my site (StartPageCept) - Ok
Time: 1 second, Memory: 21.00Mb
OK (1 test, 1 assertions)
Теперь можно приступить к написанию более сложных тестов для своего приложения. Например, вот так может выглядеть тест для авторизации на сайте:
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('log in as regular user');
$I->amOnPage('/login');
$I->fillField('Username','davert');
$I->fillField('Password','qwerty');
$I->click('Login');
$I->see('Hello, davert');
?>
Модули
В модулях определены действия, которые доступны при написании тестов. В классе описания сценариев AcceptanceTester
доступны методы взятые с нескольких модулей. Модули также реализуют интеграцию с разными библиотеками. Codeception не только выполняет тесты, но так же старается с нуля создать необходимую среду для тестирования.
Важной частью тестирования является приготовление базы данных и её очистка. Реализуется она посредством модуля Db
. Создайте тестовую базу данных и заполните её данными, необходимыми для тестирования. Можно делать это вручную или используя фикстуры. Создайте дамп базы и поместите его в папку tests/_data
. Затем откройте конфигурационный файл codeception.yml
в корне вашего проекта и впишите для модуля Db
параметры доступа к базе данных и путь к дампу. Теперь, если вы добавите модуль Db
к списку модулей в файле tests/acceptance.suite.yml
, база данных будет очищаться и восстанавливаться автоматически после каждого теста.
Популярные вопросы
Зачем Codeception, если есть PHPUnit?
Сodeception это не велосипед, а надстройка над PHPUnit. Она позволяет выполнять сценарные тесты на движке PHPUnit. При этом все ваши существующие тесты для PHPUnit Codeception сможет подхватит без каких-либо проблем. К ним вы сможете легко добавить функциональные и приемочные тесты. Очень многие задачи, требующие костылей (например, интеграция с Selenium, с БД) в Codeception уже решены.
Зачем Codeception, если есть SeleniumIDE?
Codeception умеет выполнять тесты для Selenium. Но тесты в Codeception легче поддерживать, они более гибкие. Например, вы можете часть тестов выполнять не в браузере, а через его эмулятор Goutte. Или вообще не использовать веб-сервер для тестирования, а обращаться к приложению напрямую. Это значительно уменьшит время выполнения ваших тестов. Кроме того, Codeception берет на себя все проблемы связанные с очисткой данных между тестами. Более полную документацию вы найдете на официальном сайте. Там доступны как обзорные материалы, так и описания конкретных модулей.
Больше информации про Codeception, в том числе многочисленные обучающие материалы вы найдете на официальном сайте проекта