Установка
Существует несколько методов установки codeception. Мы воспользуемся composer для этой цели, вы, конечно, можете выбрать любой удобный для вам метод.
Для начала перейдем в каталог куда вы хотите установить codeception и где будут храниться ваши тесты. В моем случае — app1.
composer require "codeception/codeception:*"
или
php composer.phar require "codeception/codeception:*"
Через некоторое время codeception будет скачан. После установки вы сможете использовать его в командной строке. Выполним следующую команду, чтобы проверить, что все установилось корректно:
vendor/bin/codeception --version
Настройка codeception:
Следует выполнить предварительную настройку codeception. Выполните следующую команду из корневого каталога приложения (app1).
vendor/bin/codeception bootstrap
Будет создан каталог tests
. В нем вы будете хранить свои тесты. Так же в нем будут подкаталоги acceptance
, functional
, unit
. Как вы понимаете, в них будут разные типы тестов. Нам понадобится тип тестирования API, создадим его:
vendor/bin/codecept generate:suite api
Итак, мы видим каталог api
, в нем мы, соответственно, будем держать API тесты. Прежде чем продолжить, давайте избавимся от длинного пути vendor/bin/codeception
и заменим его просто на codeception
.
При работе на Линукс лучше установить codeception глобально, чтобы можно было использовать команду без полного пути к исполняемому файлу. Можно это следать следующим образом: …..какая-то сылка….
На windows просто добавьте путь к файлу в системную переменную PATH
. Итак, теперь вы можете просто вызывать codeception. Попробуйте выполнить следующую команду где угодно в вашей системе:
codecept --version
Теперь давайте взглянем на структуру каталогов codeception.
Структура каталогов codeception
В каталоге test
, который был создан в результате команды codecept bootstrap
, вы увидите следующий набор директорий:
_data
— может содержать файлы DB при необходимости._output
— содержит вывод тестов и их результат._support
— содержит файлы помощи к тестам.acceptance
— содержит приёмные тесты.api
— содержит API тесты. По-умолчанию отсутствует, для её создания воспользуйтесь командойgenerate:suite
.functional
— содержит функциональные тесты.unit
— содержит юнит тесты_bootstrap.php
— файл для автоматической подгрузки стороних библиотек.acceptance.suite.yml
— настройка приёмочных тестов.api.suite.yml
— настройка api тестов.functional.suite.yml
— настройка функциональных тестов.unit.suite.yml
— настройка юнит тестов.
Так же в каталоге api
вы найдете файл _bootstrap.php
. Он используется для загрузки библиотек в пределах api тестирования.
Настройка API тестов:
Добавьте параметр PhpBrowser
и Url
в файл api.suite.yml
:
class_name: ApiTester
modules:
enabled: [ApiHelper, PhpBrowser, REST]
config:
PhpBrowser:
url: http://localhost/app
В примере выше не допускается использование табуляции, только пробелы.
Laravel или PhpBrowser
При работе с Laravel добавляйте модуль Laravel
вместо PhpBrowser
. При возникновении ошибки, описание исключения (exception) будет более понятно, что нельзя сказать о PhpBrowser
, где вы увидите просто ошибку 500. Раньше я работал с Laravel, но из-за того, что PhpBrowser более быстр, я переключился на него. Если на вашей машине достаточно оперативной памяти, скорость их исполнения вас не сильно волнует, а всего их до 50ти штук, то тогда можно использовать Laravel. В целом, выбор за вами.
Написание теста:
Существует два способа написания тестов, основываясь на два типа файлов. Cept
и Cest
. Cept строится по сценарию, а Cest на базе классов. Выбор зависит от того, как вы привыкли писать код — структурный подход или классовый. Я предпочитаю и советую использовать классовый подход, так как он дает все преимущества ООП.
Создадим первый Cest
файл с помощью следующей команды:
codecept generate:cest api CreateUser
Откройте его и добавьте код:
<?php
use \ApiTester;
class CreateUserCest
{
public function _before(ApiTester $I)
{
}
public function _after(ApiTester $I)
{
}
// tests
public function createNewUser(ApiTester $I)
{
$I->wantTo('create a user via API');
$I->amHttpAuthenticated('service_user', '123456');
$I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded');
$I->sendPOST('users', ['name' => 'davert', 'email' => '[email protected]']);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContains('{"result":"ok"}');
}
}
Переменная $I
содержит ссылку на объект типа ApiTester
— представление пользователя, исполняющего сценарий теста.
Выполнение теста:
До первого выполнения API теста, файл api tester
отсутствует в каталоге api
. Его следует создать командой:
codecept build
Затем:
codecept run api
Вы увидите ошибку если по указанному URL нет обработчика. Для более подробного вывода информации используйте ключи -vv
или -vvv
при выполнении теста.
codecept run api -vv
Более подробную информацию о codeception вы найдете в официальной документации.
Если вас интересуют автоматическое тестирование, лучшие способы тестирования, как и зачем писать тесты я советую прочитать Тестирование в Laravel Jeffrey Way. Если вы работает с PHP, то я еще больше рекомендую прочитать эту книгу, вы, наверняка, найдете в ней много полезного.
Вы скорее всего знакомы с книгой Jeffrey Laracast, в ней описаны лучшие методы тестировании и подходы к разработке с применением тестирования.