Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Codeception - обзорная статья


(Mykhailo Poliarush) #1

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, в том числе многочисленные обучающие материалы вы найдете на официальном сайте проекта


(Mykhailo Poliarush) #2

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