Знакомство с Codeception. Acceptance test.

Написана 24 Января, 2012 в 23:05. Автор: borN_free   |   Теги: php, codeception, test Комментарии 4

codeceptionДавайте познакомимся со отличным тулом для тестирования - Codeception, который позволяет нам делать acceptance, functional, unit тесты. Базируется он на PHPUnit, mink.

После статьи на habrahabr я сразу заинтересовался идеей, и особенно Acceptance тестом. Его и рассмотрим.

Предисловие

Процесс установки описан в мануале, но всё же я остановлюсь на нем, возможно у кого-то возникнут похожие трудности. После того как вы скачали codecept.phar и положили в директорию с вашим проектом, необходимо выполнить команду:

сodecept install

Вот тут и возникла у меня ошибка:

Could not open input file: codecept

Поэтому если у вас появилось то же самое, далее все вызовы codecept меняем на "php codecept.phar". В итоге, что бы установить тесты для проекта мы выполним команду:

php codecept.phar install
php codecept.phar bootstrap
php codecept.phar build

Теперь непосредственно о Codeception.

Архитектура папок, созданных в корне вашего проекта, выглядит следующим образом:

Архитектура папок В папке data лежит дамп базы данных, который автоматически восстанавливается после проделаных тестов, если вы не хотите засорять базу либо что-то удалять из нее.

Папки acceptance, functional, unit соответственно содержат классы для работы с этими тестами. Нас интересует Acceptance. WebGuy - класс, объект которого мы будем всегда создавать для тестирования приложения. WebGuy символизирует человека, тестирующего приложение через браузер. _bootstrap.php - файл, где вы можете указать дополнительно используемые переменные для тестирования. Так же нас интересует файл acceptance.suite.yml, лежащий в директории tests. В нем хранятся все настройки для теста, и давайте сразу же изменим url на ваш локальный.

Протестируем, работает ли поиск на сайте. Создадим файл в папке acceptance: SearchCept.php (кстати, постфикс "Cept" - обязателен). Напишем следующий код:

$I = new WebGuy($scenario);
$I->wantTo('search some text');
$I->amOnPage('/');
$I->fillField('editbox_search','javascript');
$I->click('button_search');
$I->see('javascritp');

Что же мы написали. Необходимо заметить, что имя переменной для объекта выбрано не случайно, и в комплексе с названиями методов мы получаем вполне себе человеческие предложения.

  1. I want to search some text
  2. I am on page "/"
  3. I fill field "editbox_search" (значение - "javascript")
  4. I click "button_search" (отправляем форму)
  5. I see "javascript" (мы пишем, что хотим после поиска видеть на странице слово javascript - тем самым поиск удался и запись в блоге найдена)

Отлично! Первый тест готов. Запускаем командную строку, переходим в папку вашего проекта и выполняем:

codecept run acceptance

Видим результат:

Suite acceptance started
Trying to earch some text (SearchCept) - Ok
Time: 1 second, Memory: 4.00Mb
OK (1 test, 1 assertions)

Тест прошел успешно. Давайте попробуем ввести заведомо ложный текст. У меня на сайте в этом случае выводится надпись "Нет результатов.". Проверим это:

$I = new WebGuy($scenario);
$I->wantTo('search some text');
$I->amOnPage('/');
$I->fillField('editbox_search','блаблабла-три-два-один');
$I->click('button_search');
$I->see('Нет результатов.');

Запускаем тест - все работает.

Для начала хватит практики и теории. Более подробно познакомимся с API Codeception в следующей статье.

4 comments

+4 ответить
February 20, 2012 at 03:19 pm

Поэтому если у вас появилось то же самое, далее все вызовы codecept меняем на "php codecept.phar". В итоге, что бы установить тесты для проекта мы выполним команду:

Забыли написать, что надо перед этим скачать и положить в текущий каталог codecept.phar, который находится по адресу https://github.com/Codeception/Codeception/raw/master/package/codecept.phar

ответить
borN_free:
February 20, 2012 at 04:54 pm

Спасибо, добавил в статью.

+1 ответить
April 17, 2012 at 10:54 am

Здравствуйте. У меня по какой то причине под виндой после вызова php codecept.phar run acceptance выводит только #!/usr/bin/php и все, хотя файлы с тестами есть, что бы это могло быть?

-5 ответить
April 17, 2012 at 01:09 pm

<

Оставьте свой комментарий:

Поля с * обязательны.