Я уже писал на Хабре о Codeception — фреймворке для тестирования приложений на PHP. Если вы никогда раньше не писали тестов для вашего приложения, вам обязательно стоит взглянуть на Codeception. Он очень прост в использовании и сделан специально, чтобы уберечь разработчиков от рутины.
Сегодня я хотел бы рассказать, какие фичи появились в проекте в последнее время, а также отвечу на пару популярных вопросов.
Инсталляция через Composer
Теперь для установки вам больше не нужен PEAR. С ним часто возникает много разных проблем, требующих бубна и шаманских песен. Если вы современный человек и забыли все ритуальные песни древних предков, попробуйте Composer. С его помощью вы легко можете установить сам Codeception, а также все необходимые библиотеки, в том числе Mink и PHPUnit.
Инструкции тут.
Поддержка фреймворков
Сейчас вы можете писать функциональные тесты для следующих фреймворков: Symfony2, Zend Framework, symfony, Kohana, SocialEngine. Последние два модуля, кстати, сделаны сторонними разработчиками, за что им отдельное спасибо. Их пример показывает, что сделать модуль под свой любимый фреймворк не так и сложно.
Генерация документации
Многие говорят, что тесты — лучшая документация. Но не всегда тесты пишутся с расчетом на чтение. В Codeception всё иначе, в Cest-тестах вы описываете свои действия и желаемый результат.
$I->testMethod('ServiceGroup::create');
$I->wantTo('create a group');
$I->executeTestedMethodWith('DemoGroup', 1)
->seeInRepository('ModelGroup', array('name' => 'DemoGroup', 'user_id' => $user_id, 'type' => 'group'))
->seeResultIs('int');
Если вы используете систему генерации документации PhpDocumentator2 (бывший DocBlox), то с помощью встроенного в Codeception плагина этот тест будет добавлен к описанию метода. Он будет преобразован в текст и примет такой вид:
With this method I can create group
If I execute ServiceGroup::create(«DemoGroup»,1)
I will see in repository «ModelGroup»,{«name»:«DemoGroup»,«user_id»: 1, «type»: «group» }
I will see result is «int»
Теперь в документации будет информация о том как ведет себя тот или иной метод в зависимости от параметров. Как подключать плагин — читайте здесь.
Базовая поддержка CI систем
Теперь Codeception можно подключить к Continious Integration серверам, таким как Jenkins и Bamboo. К сожалению, протестировать интеграцию удалось пока только с Bamboo. Но результат пишется в XML и по идее должен легко подхватываться другими CI системами. Если с ними будут проблемы — сообщайте, всё оперативно подправим.
Всё это, а также много других вкусностей доступно в последней версии Codeception 1.0.8.
Устанавливайте, используйте.
А теперь ответы на популярные вопросы:
Зачем Codeception, если есть PHPUnit?
Открою секрет: Сodeception это не велосипед, а надстройка над PHPUnit. Она позволяет выполнять сценарные тесты на движке PHPUnit. При этом все ваши существующие тесты для PHPUnit Codeception сможет подхватит без каких-либо проблем. К ним вы сможете легко добавить функциональные и приемочные тесты. Очень многие задачи, требующие костылей (например, интеграция с Selenium, с БД) в Codeception уже решены.
Зачем Codeception, если есть Selenium?
Codeception умеет выполнять тесты для Selenium. Но тесты в Codeception легче поддерживать, они более гибкие. Например, вы можете часть тестов выполнять не в браузере, а через его эмулятор Goutte. Или вообще не использовать веб-сервер для тестирования, а обращаться к приложению напрямую. Это значительно уменьшит время выполнения ваших тестов. Кроме того, Codeception берет на себя все проблемы связанные с очисткой данных между тестами.
Зачем Codeception, если есть Behat?
Вопрос в стиле: зачем Linux, если есть Windows. Наличие альтернатив это всегда хорошо. Как минимум, система позволяющая писать приемочные тесты на PHP будет в экосистеме не лишней.
Планы на будущее
В ближайшем будущем добавиться покрытие кода и увеличиться количество поддерживаемых фреймворков. Но предлагайте и свои идеи. Что бы вы хотели видеть в Codeception?
Автор: Davert