Codeception - Тестирование

Фреймворк для автоматического тестирования веб-приложений на PHP — Codeception живет и развивается. Но в этот раз вместо скупой порции новостей я бы хотел представить вам первый скринкаст в котором показаны азы работы с Codeception. Если вы только читали про Codeception, то вам обязательно стоит взглянуть на него в действии. Ну а если не читали, но у вас есть веб-сайт, который бы вы хотели протестировать — тоже взгляните.

Создание

$ ./vendor/bin/codecept bootstrap ./frontend
$ ./vendor/bin/codecept bootstrap ./vendor/mirocow/yii2-notification

Создает папку tests с конфигурационными файлами

$ ls -la ./vendor/mirocow/yii2-notification/tests
total 12
drwxr-xr-x 1 vagrant vagrant 374 Jul  7 22:34 .
drwxr-xr-x 1 vagrant vagrant 476 Jul  7 22:34 ..
drwxr-xr-x 1 vagrant vagrant  68 Jul  7 22:34 acceptance
-rw-r--r-- 1 vagrant vagrant 347 Jul  7 22:34 acceptance.suite.yml
drwxr-xr-x 1 vagrant vagrant 102 Jul  7 22:34 _data
drwxr-xr-x 1 vagrant vagrant  68 Jul  7 22:34 functional
-rw-r--r-- 1 vagrant vagrant 360 Jul  7 22:34 functional.suite.yml
drwxr-xr-x 1 vagrant vagrant 102 Jul  7 22:34 _output
drwxr-xr-x 1 vagrant vagrant 238 Jul  7 22:34 _support
drwxr-xr-x 1 vagrant vagrant 102 Jul  7 22:43 unit
-rw-r--r-- 1 vagrant vagrant 161 Jul  7 22:34 unit.suite.yml

В которой будут создыны 3 кипа конфигураций: unit, functional, acceptance

Описание

  • acceptance.suite.yml - Настройки для приемочного тестирования
  • functional.suite.yml - Настройки для функционального тестирования
  • unit.suite.yml - Настройки для юнит/модульного тестирования
  • _support - Методы доступные через интерфейс $I->
  • _output - В этой папке содержатся сгенерированные тестом файлы
  • _data - В этойпапке содержатся загружаемые тестом файлы (Пример: $I->attachFile('input[@type="file"]', 'prices.xls');)

Проверка и настройка тестовго окружения

Проверка конфигурации

$ ./vendor/bin/codecept -c ./vendor/mirocow/yii2-queue config:validate
$ cd /app
$ ls -la ./tests/codeception/common/
total 16
drwxr-xr-x 1 vagrant vagrant 340 Jul  7 21:39 .
drwxr-xr-x 1 vagrant vagrant 340 Jul  7 21:39 ..
-rwxr-xr-x 1 vagrant vagrant 548 Jul  5 13:53 _bootstrap.php
-rwxr-xr-x 1 vagrant vagrant 266 Jul  5 13:53 codeception.yml
drwxr-xr-x 1 vagrant vagrant 102 Jul  7 21:39 _data
-rwxr-xr-x 1 vagrant vagrant 141 Jul  5 13:53 .gitignore
drwxr-xr-x 1 vagrant vagrant 102 Jul  5 13:53 _output
drwxr-xr-x 1 vagrant vagrant 136 Jul  7 22:09 _support
drwxr-xr-x 1 vagrant vagrant 136 Jul  7 22:11 unit
-rwxr-xr-x 1 vagrant vagrant 152 Jul  5 13:53 unit.suite.yml
  • Где /app - папка проекта на vagrant виртуальной машине
  • codeception.yml - Базовый конфигурационный файл
  • unit.suite.yml - Настройки запускаемой конфигурации
Обязательно после run уазать конфигурацию/Sute запускаемого теста Базовые конфигурации: unit, functional, acceptance Конфигурация/Sute берется из корня папки с запускаемыми скриптами и носит название *.suite.yml. В этой же папке должен находится базовый конфигурационный файл
Если указан полный путь до тесового файла, то не надо указывать suite
$ codecept run ./tests/acceptance/MyCept.php

Подробнее...

Параметры

  • - Папка с тестами конфигационным файлом или файл конфигурации
  • -g slow - Запуск теста из укзанной группы
  • -o "settings: shuffle: true" - Переопределение конфигурационных настроек
  • -v -
  • -vv -
  • -vvv -
  • --steps -

Юнит тесты / unit

проверяет что отдельный модуль кода работает верно

  • frontend/tests/unit
  • backend/tests/unit
  • common/tests/unit

Предварительная сборка тестов

$ ./vendor/bin/codecept build

Создание

$ ./tests/codeception/common generate:test unit UserTest -vvv

Запуск

Запуск всех тестов из выбранной апликации

$ ./vendor/bin/codecept -c ./common run unit -vvv
$ ./vendor/bin/codecept -c ./frontend run unit -vvv
$ ./vendor/bin/codecept -c ./backend run unit -vvv
  • Где -с - папка с конфигурационным файлом codeception.yml (относительно текущей папки ./tests )
  • -v - Минимальный уровень логирования
  • -vv - Средний уровень логирования
  • -vvv - Маскимальный уовень логирования

Запуск указанных тестов

$ cd /app
$ ./vendor/bin/codecept -c ./common run unit models/LoginFormTest.php
  • Где /app - папка с нашим проектом
  • Где тест models/LoginFormTest.php лежит в common/tests/unit (Так-как используется Sute из common/tests/unit.suite.yml)

Аналогично запускаются тесты из frontend и backend

Функциональные тесты / functional

проверяет пользовательские сценарии через эмуляцию браузера

  • frontend/tests/functional
  • backend/tests/functional

Предварительная сборка тестов

$ ./vendor/bin/codecept build

Создание

$ ./vendor/bin/codecept -c ./frontend generate:cept functional UserFormCept
$ ./vendor/bin/codecept -c ./frontend generate:cest functional UserFormCept
Cept - Записывается в виде сценария
<?php    
$I = new AcceptanceTester($scenario);
$I->wantTo('log in as regular user');
$I->amOnPage('/login');
$I->fillField('Username','john');
$I->fillField('Password','secret');
$I->click('Login');
$I->see('Hello john');
Cest - Записывается в виде PHP класса
<?php
class UserCest
{
    public function loginAsRegularUser(\AcceptanceTester $I) 
    {
        $I->wantTo('log in as regular user');
        $I->amOnPage('/login');
        $I->fillField('Username','john');
        $I->fillField('Password','secret');
        $I->click('Login');
        $I->see('Hello john');            
    }
}

Запуск

Запуск всех тестов из выбранной апликации

$ ./vendor/bin/codecept -c ./frontend run functional -vvv
$ ./vendor/bin/codecept -c ./backend run functional -vvv

Запуск указанных тестов

$ cd /app
$ ./vendor/bin/codecept -c ./backend run functional LoginCest
  • Где /app - папка с нашим проектом
  • Где тест LoginCest.php лежит в ./backend/tests/functional (Так-как используется Sute из ./common/tests/functional.suite.yml)
  • Имя теста 2-я разными способами (LoginCest, LoginCest.php | LoginCept, LoginCept.php)

Приёмочное тестирование / acceptance

проверяет пользовательские сценарии в браузере

  • frontend/tests/acceptance

Предварительная сборка тестов

$ ./vendor/bin/codecept build

Запуск

$ 

Модули codeception распологаются в папке ./vendor/codeception/base/src/Codeception/Module

$ composer require "codeception/base": "^2.2.3",
$ composer require "codeception/codeception=2.1.*"
$ composer require "codeception/specify=*"
$ composer require "codeception/verify=*"
  • codeception/base - Codeception distribution with minimal set of dependencies
  • codeception/codeception - Full-stack testing PHP framework
  • codeception/specify - BDD style code blocks for PHPUnit / Codeception
  • codeception/verify - BDD Assertions for PHPUnit and Codeception

Travis

nano .travis.yml