Тестирование API : Установка и использование Codeception

Установка

Существует несколько методов установки 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, в ней описаны лучшие методы тестировании и подходы к разработке с применением тестирования.