Scriptify.ru

При изучении Yii2 я дошел до момента тестирования приложения. К сожалению, все статьи по этой теме, которые я видел, описаны неполно, устарели, либо просто не работали в моих условиях. Здесь я опишу свой рабочий вариант тестирования. Все примеры выполнялись на OpenServer в шаблоне приложения Advanced.

Установка Codeception

Первоначально нам необходимо установить Codeception. Есть два варианта установки приложения: глобальная и локальная. Глобальная отличается тем, что для работы с приложением надо просто ввести его имя и команду:

codecept -v

Это означает, что приложение доступно для работы из любого места.

Локальная установка означает, что для работы с приложением необходимо сначала указывать путь до него:

php F:\OpenServer\domains\yiia\vendor\codeception\vendor\codeception\codeception\codecept -v

Локальная установка Codeception

Сначала создаем папку, в которую будем устанавливать приложение, и переходим в нее:

cd F:\OpenServer\domains\yiia\vendor\codeception

Теперь устанавливаем Сodeception и дополнительные расширения к нему: specify и verify. Эти модули позволяют писать тесты в более читаемом BDD стиле.

composer require "codeception/codeception:*"
composer require "codeception/specify=*"
composer require "codeception/verify=*"

Глобальная установка

Если вы решили установить приложение глобально, то команда установки будет выглядеть так:

composer global require "codeception/codeception:*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"

После установки нужно указать путь к приложению в переменной PATH. Для Windows 7 это делается следующим образом: Компьютер - Свойства - Дополнительные параметры системы - Переменные среды. Указываем в PATH путь до папки, например C:\Users\User\AppData\Roaming\Composer\vendor\bin\. Чтобы запускать в командной строке PHP команды, необходимо в PATH еще указать путь до установки PHP, например F:\OpenServer\modules\php\PHP-5.6

path

Добавление пути к Path

Теперь надо убедиться в том, что приложение установлено корректно:

codecept -v

Долно появиться примерно следующее:

codeception success

Проверка установки Codeception

Настройка базы данных

Так как некоторые тесты требуют соединения с базой данных, настраиваем соединение в \tests\codeception\config.php (на примере MySQL):

'db' => [
    'dsn' => 'mysql:host=localhost;dbname=yii2_test',
],

Для того, чтобы создать копию основной базы данных, надо сделать миграцию. Для этого переходим в папку \tests\codeception\bin и выполняем команду:

yii migrate/up

Настройка параметров тестирования

В папке \tests\codeception содержатся папки backend и frontend для тестирования соответствующих частей приложения. Сначала нам нужно указать адрес входного скрипта. Для этого в codeception.yml указываем:

test_entry_url: http://yiia/backend/web/index-test.php

По аналогии необходимо указать путь и для фронтенда.

Настройка приемочных тестов

Для приемочных тестов необходим браузер. В Codeception для этого по умолчанию используется модуль PhpBrowser. Для работы браузера в файле acceptance.suite.yml в url просто указываем доменное имя:

modules:
    enabled:
        - PhpBrowser
        - tests\codeception\common\_support\FixtureHelper
...
    config:
        PhpBrowser:
            url: http://yiia/

Для тестирования также можно использовать другие браузеры, например Selenium.

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

Рассмотрим пример тестирования фронтенда. Для начала нужно перейти в папку с тестами:

cd F:\OpenServer\domains\yiia\tests\codeception\frontend

Из этой папки генерируем классы, необходимые для проведения тестирования:

codecept build

Теперь для примера запустим функциональный тест:

codecept run functional

Должно получится примерно следующее:

Tests\codeception\frontend.functional Tests (5) ------------
+ AboutCept: Ensure that about works (0.67s)
+ ContactCept: Ensure that contact works (0.85s)
+ HomeCept: Ensure that home page works (0.05s)
+ LoginCept: Ensure login page works (2.06s)
+ SignupCest: Ensure that signup works (1.71s)
------------------------------------------------------------

Time: 9.77 seconds, Memory: 26.50MB

OK (5 tests, 29 assertions)

На этом тест завершен! Было успешно пройдено пять тестов и выполнено 29 проверок.

По аналогии можно запустить модульные и приемочные тесты, или же запустить их сразу вместе:

codecept run unit

codecept run acceptance

codecept run

Содержание статьи