SlideShare a Scribd company logo
Современное функциональное
       тестированиес
       Codeception
Я
•   Боднарчук Михаил
•   Веб разработчик (PHP с 2004, Ruby с 2008)
•   Автор Codeception
•   @davert
Тестирование
Ручное         Автоматизированное
Когда автоматизировать?

• Частые изменения в проекте
• Много изменений в проекте
• Много разработчиков, мало
  тестировщиков.
Пишем тесты?
•   Что-что?
•   А… Это… Лениво.
•   А… Не… Сложно.
•   Да, как-то пытался писать юнит-тесты.
•   Не, у нас для этого есть QA отдел.
•   Да!
С чего начать?


• Тестирования функционала.
• Типичные пользовательские сценарии.
• API
Противопоказано


• А давайте напишем юнит тест!
• Как же? Юнит тесты это круто!
• Нам надо 100% покрытия кода!
Казалось бы…




    при чем тут Codeception…
Существующие решения
•   PHPUnit
•   ?
•   ?
•   ?
•   ?
•   ?
•   Selenium
Чего не хватает?

• Простоты написания тестов
• Простоты чтения тестов
• Простоты отладки тестов
Codeception
•   Простой но мощный фреймворк
•   Основан на PHPUnit
•   Open Source
•   Хорошо документирован
•   Версия 1.1.3
•   PHP >= 5.3
М. Боднарчук Современное функциональное тестирование с Codeception
Чуваки
• Тестирование с «человеческим лицом»
• Действия от лица людей.
• Минимум технических терминов.
Чуваки
• WebGuy – тестирует работу сайта вцелом
• Приемочное тестирование.
• Олицетворяет менеджера
Чуваки
• TestGuy - проверяет работу зная
  внутренности системы.
• Обеспечивает функциональное
  тестирование.
• Проф. тестировщик.
Чуваки
• CodeGuy – тестирует код.
• Юнит-тестирование.
• Разработчик.
WebGuy
•   Selenium RC
•   WebDriver
•   ZombieJS
•   PhpBrowser
Типичный тест
•   $I = new WebGuy($scenario);
•   $I->click('Login');
•   $I->fillField('username','davert');
•   $I->fillField('password','gfhjkm');
•   $I->click('Submit');
•   $I->see('Hello, Davert!');
Запускаем…
Codeception PHP Testing Framework v1.1.3
Powered by PHPUnit 3.6.10 by Sebastian Bergmann.

Suite acceptance started
Trying to sign in as a customer (LoginCept.php)
Scenario:

* I click “Login"
=> Moved to page http://login
* I fill field “name",“davert"
* I fill field “password",“gfhjkm"
* I click “Submit"
=> Moved to page http://localhost/user/davert
* I see “Hello, Davert"
  OK

Time: 2 seconds, Memory: 10.25Mb

OK (1 test, 1 assertion)
Написание теста
Как находятся элементы?
• $I->click('Login'); - ?
• $I->fillField('username','davert'); - ?
Я же умный, красивый, в меру
упитанный фреймворк ну в полном
         расцвете сил!
Поиск элемента на странице
•   По имени (name, value, alt, …)
•   По лейблу
•   По CSS селектору
•   По Xpath (с версии 1.1)
Результаты теста
Команды: see..
$I->see (‘text on a page’)
$I->see(‘heading on page’,’h1’);
$I->dontSee(‘Error’);
$I->seeInCurrentUrl(‘/user/davert’);
$I->seeCheckboxIsChecked(‘#terms’);
$I->see(‘XPath’, ‘//h:a/h:span’);
М. Боднарчук Современное функциональное тестирование с Codeception
TestGuy
•   Symfony2
•   Zend Framework
•   Kohana
•   Social Engine
•   MySQL, PostgreSQL
•   ORM
•   Ожидается Drupal 8
Интеграция с фреймворками
• Не обращаемся к веб-серверу.
• Работает гораздо быстрее.
• Stack trace и отладочная информация.
CodeGuy
• Простые тесты с PHPUnit
• Комплексные тесты в виде сценариев
• Доступны все модули
Типичный тест
function testSavingUser()
{
   $user = new User();
   $user->setName('Miles');
   $user->setEmail(‘miles@davis.com');
   $user->save();
   $this->codeGuy->seeInDatabase('users',array(
        'name' => 'Miles‘,
        ‘email' => ‘miles@davis.com‘,
    ));
} // интеграционный тест
Сценарный тест
function create(CodeGuy $I)
{
  $I->wantTo('create new user by name');
  $I->haveStub($user =
      Stub::makeEmptyExcept('User', 'create')
   );
  $user->setName('davert');
  $I->executeMethod($user, ‘create’);

   $I->expect('user is validated and saved')
   $I->seeMethodInvoked($user, 'validate')
   $I->seeMethodInvoked($user, 'save');
} // юнит тест
Отладка
• Все промежуточные данные выводятся на
  экран
• При сбое делается скриншот последней
  страницы
• Модуль WebDebug
Очистка
• Тесты должны работать в изоляции
• Тесты не должны гадить друг другу
• Очистка кеша, данных, сессий…
Очистка БД
• перезаливать sql-дамп БД.
• использовать SQLite.
• через rollback в транзакции.
Модули
•   Веб (Selenium, ZombieJS, PhpBrowser)
•   API (REST, SOAP)
•   MVC Frameworks (Symfony, Zend, …)
•   Database (MySQL, PostgreSQL, …)
•   …. всего 19
Когда модулей мало
• Пишем свои!
• Helper-код
•   public function seeReceivedSms() {
•         $messages = $this->_getOutgoingMessages();
•         $this->assertGreaterThen(0, $messages->count());
•   }



• Тест
•   $I->click("Confirm by Sms");
•   $I->seeReceivedSms();
Continuous Integration
• Автоматический запуск тестов
• «Письма счастья» при поломках
• Раннее выявление ошибок
Интеграция с CI
• Экспорт HTML, XML, JSON, TAP
• Jenkins, Bamboo, etc…
• Красивые HTML репорты
Репорт
Подходит для BDD

// As a new customer
$I->am(‘new customer’);
// I want to buy a notebook
$I->wantTo(‘buy a notebook’);
// In order to spend money faster
$I->lookForwardTo(‘spend money faster’);
Hardcore BDD
Документация
• http://codeception.com

• Guides – всё о фреймворке (9 глав)
• Модули – все функции
• Reference – команды, опции.
Вопросы?
•   http://Codeception.com
•   https://github.com/codeception/codeception
•   Skype: Davert.ua
•   davert@ukr.net
•   Twitter: @davert
Ad

Recommended

Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
Codeception UATestingDays
Codeception UATestingDays
davertmik
 
Codeception Introduction
Codeception Introduction
automated-testing.info
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Andrey Rebrov
 
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Yandex
 
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Yandex
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
CodeFest
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
SQALab
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать код
MoscowDjango
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
tyomo4ka
 
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Yandex
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
Uladzimir Kryvenka
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"
Fwdays
 
Грязная автоматизация
Грязная автоматизация
SQALab
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
SQALab
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
SQALab
 
TestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщика
davertmik
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin1980
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 

More Related Content

What's hot (20)

Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Yandex
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
CodeFest
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
SQALab
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать код
MoscowDjango
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
tyomo4ka
 
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Yandex
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
Uladzimir Kryvenka
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"
Fwdays
 
Грязная автоматизация
Грязная автоматизация
SQALab
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
SQALab
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
SQALab
 
TestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщика
davertmik
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin1980
 
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Yandex
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
CodeFest
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
SQALab
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать код
MoscowDjango
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
tyomo4ka
 
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Yandex
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
Uladzimir Kryvenka
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"
Fwdays
 
Грязная автоматизация
Грязная автоматизация
SQALab
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
SQALab
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
SQALab
 
TestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщика
davertmik
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin1980
 

Similar to М. Боднарчук Современное функциональное тестирование с Codeception (20)

2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Ontico
 
PowerShell
PowerShell
GetDev.NET
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
современная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложений
Sergey Belov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
solit
 
Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизни
z-tech
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
m2rus
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
Alexander Titov
 
UI+unit testing in iOS
UI+unit testing in iOS
Кирилл Ушков
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Andrey Rebrov
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
Автоматизация тестирования
Автоматизация тестирования
Колёса Крыша Маркет
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
So Your WAF Needs a Parser
So Your WAF Needs a Parser
yalegko
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
DevDay
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
Business incubator HSE
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Ontico
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
современная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложений
Sergey Belov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
solit
 
Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизни
z-tech
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
m2rus
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
Alexander Titov
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Andrey Rebrov
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
So Your WAF Needs a Parser
So Your WAF Needs a Parser
yalegko
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
DevDay
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
Business incubator HSE
 
Ad

More from Albina Tiupa (14)

Happy ever afters with ci workflow
Happy ever afters with ci workflow
Albina Tiupa
 
Иван Фесюк Работа с медиа
Иван Фесюк Работа с медиа
Albina Tiupa
 
Виктор Левандовский Управление проектами по разработке на Drupal
Виктор Левандовский Управление проектами по разработке на Drupal
Albina Tiupa
 
Артур Богданов Как быть успешными с клиентами решая их проблемы
Артур Богданов Как быть успешными с клиентами решая их проблемы
Albina Tiupa
 
Андрей Юн Удобная разработка Drupal проекта. Полезные модули
Андрей Юн Удобная разработка Drupal проекта. Полезные модули
Albina Tiupa
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Albina Tiupa
 
Андрей Подлубный Seo и вёрстка
Андрей Подлубный Seo и вёрстка
Albina Tiupa
 
Александр Бондаренко Хорошая типографика как залог успешности вашего сайта
Александр Бондаренко Хорошая типографика как залог успешности вашего сайта
Albina Tiupa
 
А. Рябцев Drupal vs Wordpress на реальных примерах
А. Рябцев Drupal vs Wordpress на реальных примерах
Albina Tiupa
 
В. Мельник Практические примеры использования модуль feeds
В. Мельник Практические примеры использования модуль feeds
Albina Tiupa
 
А. Горобец Расширяем media module. эффективный content management
А. Горобец Расширяем media module. эффективный content management
Albina Tiupa
 
С. Савва Основы Commerce и примеры
С. Савва Основы Commerce и примеры
Albina Tiupa
 
Е. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтов
Albina Tiupa
 
Владимир Мельник Практические примеры используя модуль feeds
Владимир Мельник Практические примеры используя модуль feeds
Albina Tiupa
 
Happy ever afters with ci workflow
Happy ever afters with ci workflow
Albina Tiupa
 
Иван Фесюк Работа с медиа
Иван Фесюк Работа с медиа
Albina Tiupa
 
Виктор Левандовский Управление проектами по разработке на Drupal
Виктор Левандовский Управление проектами по разработке на Drupal
Albina Tiupa
 
Артур Богданов Как быть успешными с клиентами решая их проблемы
Артур Богданов Как быть успешными с клиентами решая их проблемы
Albina Tiupa
 
Андрей Юн Удобная разработка Drupal проекта. Полезные модули
Андрей Юн Удобная разработка Drupal проекта. Полезные модули
Albina Tiupa
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Albina Tiupa
 
Андрей Подлубный Seo и вёрстка
Андрей Подлубный Seo и вёрстка
Albina Tiupa
 
Александр Бондаренко Хорошая типографика как залог успешности вашего сайта
Александр Бондаренко Хорошая типографика как залог успешности вашего сайта
Albina Tiupa
 
А. Рябцев Drupal vs Wordpress на реальных примерах
А. Рябцев Drupal vs Wordpress на реальных примерах
Albina Tiupa
 
В. Мельник Практические примеры использования модуль feeds
В. Мельник Практические примеры использования модуль feeds
Albina Tiupa
 
А. Горобец Расширяем media module. эффективный content management
А. Горобец Расширяем media module. эффективный content management
Albina Tiupa
 
С. Савва Основы Commerce и примеры
С. Савва Основы Commerce и примеры
Albina Tiupa
 
Е. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтов
Albina Tiupa
 
Владимир Мельник Практические примеры используя модуль feeds
Владимир Мельник Практические примеры используя модуль feeds
Albina Tiupa
 
Ad

М. Боднарчук Современное функциональное тестирование с Codeception