
Т.к. мир php уже давно захватил Composer, основной способ установки именно с его помощью.
Глобальная установка.
Если вы планируете использовать фреймворк Codeception для нескольких проектов, то лучше установить его глобально (не в каталог vendor текущего проекта, а в каталог vendor пользователя, откуда Composer так же подключает пакеты):composer global require codeception/codeception --devИсполняемый файл codecept.bat при этом автоматически запишется в папку vendor\bin пользователя (для Win), которая должна быть указана в системной переменной PATH (как и папка с интерпретатором php) и таким образом вы сможете обращаться к фреймворку только по названию исполняемого файла:
codeceptЕсли в PATH не указан путь к bin, обязательно укажите. Чтобы проверить наберите в консоли:
echo %PATH%Если планируете использовать кирилические символы (русский) в тестах, то чтобы они выводились корректно в консоли, можно добавить строку
@chcp 65001в файл codecept.bat находящийся в папке пользователя, например: C:\Users\имя_вашего_пользователя\AppData\Roaming\Composer\vendor\bin\codecept.bat
Установка в текущий проект.
Осуществляется командой:composer require codeception/codeception --devЗапускающий файл будет находиться в папке vendor\bin проекта. Чтобы не набирать для тестирования «vendor\bin\codecept»:
1) для Linux создаем алиас:
alias codecept="./vendor/bin/codecept"2) для Win
создать в корне проекта файл codecept.bat или любое удобное название с содержимым:
@echo off @setlocal @chcp 65001 set CODECEPT_PATH=vendor/bin/ "%CODECEPT_PATH%codecept.bat" %* @endlocalстрокой @chcp 65001 я указал кодировку чтобы кирилические символы отображались корректно.
Далее я буду описывать процесс исходя из того, что установлен Windows.
Теперь для запуска из корня проекта достаточно писать просто
codecept
Если вы не планируете проводить приемочное тестирование, то можете установить базовую версию Codeception без загрузки библиотек Webdriver и Guzzle:
composer require codeception/base --dev
Для ознакомления с консольными командами Codeception можно воспользоваться справкой:
- вывести описание доступных консольных команд
codecept
- вывести справку по нужной команде
codecept название команды –h
Инициализация.
После первой установки Codeception нужно выполнить команду инициализации которая создаст в корне проекта конфигурационный файл codeception.yml и папку tests с различными папками и файлами:codecept bootstrapВозможно указание дополнительных параметров запуска этой команды, которые можно посмотреть в файле \codeception\codeception\src\Codeception\Command\Bootstrap.php
Например указываем каталог для размещения тестов – testsCodeception, если не хотим чтобы они разместились в корне:
codecept bootstrap testsCodeception
Структура каталогов codeception
В каталоге tests, который был создан в результате команды codecept bootstrap, вы увидите следующий набор директорий:- _data — может содержать файлы базы данных (php файлы возвращающие массив данных для использования в fixtures), дамп базы.
- _output — содержит вывод тестов и их результат.
- _support — содержит сгенерированные модули, которые нужны для запуска тестов. Они создаются с помощью команды (codecept build). Так же содержит помощники к тестам.
- acceptance — содержит приёмные тесты.
- functional — содержит функциональные тесты.
- unit — содержит модульные тесты
Так же в корне проекта (по-умолчанию) появится файл codeception.yml. Файлы с расширением .yml существуют для настройки тестирования (подключение модулей, их настройки. В каталогах отдельных типов тестов так же будут конфигурационные файлы для настройки конкретно соответствующего типа тестирования).
Настройка.
При инициализации Codeception в корне приложения появится главный конфигурационный файл codeception.yml. В нем указаны общие настройки для тестирования и можно дополнительно указать глобальные модули и их параметры, которые нужны для разных типов тестов, например:modules: config: Db: dsn: '' user: '' password: ''
Для каждого типа тестов (приемочные, функциональные, модульные) существует дополнительный, специализированный конфигурационный файл. Например для проведения приемочного тестирования нужно настроить общий конфигурационный файл - tests\acceptance.suite.yml указать домен сайта для PhpBrowser:
actor: AcceptanceTester modules: enabled: - PhpBrowser: url: http://test.loc - \Helper\Acceptance - Db: dump: 'tests/_data/test.sql' populate: true cleanup: true reconnect: true
Так же, в примере данного конфигурационного файла видим подключение модуля Db с дополнительными настройками, основные настройки которого указаны выше в главном конфигурационном файле.
Можно вывести в консоль массив текущей конфигурации (какие указаны настройки, какие можно указать)
codecept config:validate
После внесения правок в конфигурационные файлы нужно выполнить команду:
codecept buildэто сгенерирует трейты с методами для тестирования из модулей Codeception которые появится в папке tests\_support\_generated.
При этом в информации, которая будет выведена в консоль после выполнения команды, можно увидеть кол-во добавленных методов и подключенных модулей для каждого типа теста:

Сам класс конфигурации находится в файле vendor\codeception\codeception\src\Codeception\Configuration.php
Пример.
Существует два способа написания тестов в Codeception, которым соответствуют два типа наименования файлов: Cept и Cest. Cept строится по сценарию (функциональное программирование), а Cest на базе объектов (ООП). Кроме того, Codeception может выполнять PHPUnit-тесты для модульного тестирования т.к. наследуется от данной библиотеки.В качестве примера создам простой приемочный тест по типу Cept для проверки главной страницы сайта.
Файл теста можно сгенерировать автоматически. Создадим файл HomeCept.php командой:
codecept generate:cept acceptance HomeФайл появится в папке tests/acceptance и сразу будет содержать строки:
<?php $I = new AcceptanceTester($scenario); $I->wantTo('perform actions and see result');При желании, создать файл теста можно и вручную, главное указать в названии файла окончание «Cept».
Дополним тест на проверку доступа к главной странице которая также должна вернуть указанный текст (фразу).
<?php $I = new AcceptanceTester($scenario); $I->wantTo('Проверить работу главной страницы.'); $I->amOnPage('/'); $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); $I->see('Главная страница'); // Фраза или ее часть с главной страницы
В обязательном методе wantTo() указывается действие которое осуществляет данный тестовый метод.
В методе amOnPage() указывается на какой странице начинается тестирование (далее возможен переход по ссылкам и тд.).
Метод seeResponseCodeIs() сравнивает код который возвращает сервер на запрос страницы, с указанным в качестве аргумента. В данном случае, я использовал константу "OK" из класса HttpCode, которая имеет значение 200, но можно указывать аргумент и непосредственно в цифровом варианте. Это тестовый метод и он возвращает true если код равен указанному.
Ну и часто употребляемый метод see() возвращает true если на странице присутствует указанная фраза.
Так же можно создавать тестовый файл сразу в определенной папке. Это удобно, т.к. путь к тесту должен повторять файловую структуру проекта. Например создадим модульный тест, файл SaveTest.php в папке articles (папка создастся автоматически):
codecept generate:test unit articles/SaveКроме того, тестам, которые созданы на базе классов (cest и test), автоматически будет присвоено пространство имен, в данном случае:
namespace articles;
Подробнее ознакомиться с существующими методами можно в справочных файлах из папки vendor\codeception\codeception\docs и в моих следующих статьях.
Запуск тестов.
Для простого запуска тестов нужно перейти в консоли в корень проекта или в каталог куда были установлены тесты (если установка была не в корень) и выполнить:codecept runбудут выполнены все тесты (модульные, функциональные и приемочные).
Для запуска тестирования из любого каталога (без перехода в корень проекта) – дополнительно нужно указать путь к проекту, например:
codecept run -c "E:\OpenServer 5.2.5\domains\test.loc"
Для запуска конкретного типа тестов используется так же команда с указанием типа теста, например для приемочных тестов:
codecept run acceptance
Можно запустить тестирование одного конкретного класса теста, например:
codecept run acceptance HomeCept
Опции команды run :
--config (-c) Путь к проекту с тестами тестам --report Show output in compact style --html Generate html with results --xml Generate JUnit XML Log --tap Generate Tap Log --json Generate Json Log --colors Use colors in output --no-colors Force no colors in output (useful to override config file) --silent Only outputs suite names and final results --steps Show steps in output --debug (-d) Show debug and scenario output --coverage Run with code coverage --no-exit Don't finish with exit code --group (-g) Groups of tests to be executed (multiple values allowed) --skip (-s) Skip selected suites (multiple values allowed) --skip-group Skip selected groups (multiple values allowed) --env Run tests in selected environments. (multiple values allowed) --verbose (-v|vv|vvv) Уровень отладки
Например:
codecept run --steps --htmlэта команда запустит все тесты из всех тестовых наборов, все шаги будут выводиться на консоль, результаты тестов буду сохранены в HTML файл (в папку tests/_output).
Согласно примера, главная страница сайта должна вернуть заголовок со статусом 200 и контент должен содержать фразу 'Главная страница'. При успешном прохождении теста, в консоли будет выведено:

Помощники.
В помощниках можно определять недостающие утверждения (assertion). Файлы помощников находятся в папке tests\_support\Helper.
Вы можете использовать методы PHPUnit:
<?php function seeCanCheckEverything($thing) { $this->assertTrue(isset($thing), "this thing is set"); $this->assertFalse(empty($any), "this thing is not empty"); } ?>
Так же можно получить доступ к методам и свойствам других модулей используя метод getModule(), например:
public function dbDriver(){ return $this->getModule('Db')->driver; }Ко всем публичным методом помощников можно обращаться в файлах тестов:
$I->dbDriver()Дополнительную информацию можно получить на официальном сайте Codeception http://codeception.com
Данная статья является одной из серии статей про фреймворк для тестирования Codeception. Читайте так же:
- Codeception - взаимодействие с базой данных. Модуль Db, фикстуры.
- Codeception - приемочные тесты. Использование Selenium.
- Codeception - модульное (unit) тестирование. Создание имитирующих объектов.