SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Современное функциональное
       тестированиес
       Codeception
Я
•   Боднарчук Михаил
•   Веб разработчик (PHP с 2004, Ruby с 2008)
•   Автор Codeception
•   @davert
Тестирование
Ручное         Автоматизированное
Когда автоматизировать?

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


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


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




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

• Простоты написания тестов
• Простоты чтения тестов
• Простоты отладки тестов
Codeception
•   Простой но мощный фреймворк
•   Основан на PHPUnit
•   Open Source
•   Хорошо документирован
•   Версия 1.1.3
•   PHP >= 5.3
Чуваки
• Тестирование с «человеческим лицом»
• Действия от лица людей.
• Минимум технических терминов.
Чуваки
• 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’);
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

Weitere ähnliche Inhalte

Was ist angesagt?

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

Was ist angesagt? (20)

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

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

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

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

2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
 
PowerShell
PowerShellPowerShell
PowerShell
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
современная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложенийсовременная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложений
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
 
Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниПлюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизни
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
 
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
Автоматизация тестирования
Автоматизация тестированияАвтоматизация тестирования
Автоматизация тестирования
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
So Your WAF Needs a Parser
So Your WAF Needs a ParserSo Your WAF Needs a Parser
So Your WAF Needs a Parser
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
 

Mehr von Albina Tiupa

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

Mehr von Albina Tiupa (14)

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

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

  • 1. Современное функциональное тестированиес Codeception
  • 2. Я • Боднарчук Михаил • Веб разработчик (PHP с 2004, Ruby с 2008) • Автор Codeception • @davert
  • 3. Тестирование Ручное Автоматизированное
  • 4. Когда автоматизировать? • Частые изменения в проекте • Много изменений в проекте • Много разработчиков, мало тестировщиков.
  • 5. Пишем тесты? • Что-что? • А… Это… Лениво. • А… Не… Сложно. • Да, как-то пытался писать юнит-тесты. • Не, у нас для этого есть QA отдел. • Да!
  • 6. С чего начать? • Тестирования функционала. • Типичные пользовательские сценарии. • API
  • 7. Противопоказано • А давайте напишем юнит тест! • Как же? Юнит тесты это круто! • Нам надо 100% покрытия кода!
  • 8. Казалось бы… при чем тут Codeception…
  • 9. Существующие решения • PHPUnit • ? • ? • ? • ? • ? • Selenium
  • 10. Чего не хватает? • Простоты написания тестов • Простоты чтения тестов • Простоты отладки тестов
  • 11. Codeception • Простой но мощный фреймворк • Основан на PHPUnit • Open Source • Хорошо документирован • Версия 1.1.3 • PHP >= 5.3
  • 12.
  • 13. Чуваки • Тестирование с «человеческим лицом» • Действия от лица людей. • Минимум технических терминов.
  • 14. Чуваки • WebGuy – тестирует работу сайта вцелом • Приемочное тестирование. • Олицетворяет менеджера
  • 15. Чуваки • TestGuy - проверяет работу зная внутренности системы. • Обеспечивает функциональное тестирование. • Проф. тестировщик.
  • 16. Чуваки • CodeGuy – тестирует код. • Юнит-тестирование. • Разработчик.
  • 17. WebGuy • Selenium RC • WebDriver • ZombieJS • PhpBrowser
  • 18. Типичный тест • $I = new WebGuy($scenario); • $I->click('Login'); • $I->fillField('username','davert'); • $I->fillField('password','gfhjkm'); • $I->click('Submit'); • $I->see('Hello, Davert!');
  • 19. Запускаем… 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)
  • 21. Как находятся элементы? • $I->click('Login'); - ? • $I->fillField('username','davert'); - ?
  • 22. Я же умный, красивый, в меру упитанный фреймворк ну в полном расцвете сил!
  • 23. Поиск элемента на странице • По имени (name, value, alt, …) • По лейблу • По CSS селектору • По Xpath (с версии 1.1)
  • 25. Команды: 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’);
  • 26.
  • 27. TestGuy • Symfony2 • Zend Framework • Kohana • Social Engine • MySQL, PostgreSQL • ORM • Ожидается Drupal 8
  • 28. Интеграция с фреймворками • Не обращаемся к веб-серверу. • Работает гораздо быстрее. • Stack trace и отладочная информация.
  • 29. CodeGuy • Простые тесты с PHPUnit • Комплексные тесты в виде сценариев • Доступны все модули
  • 30. Типичный тест 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‘, )); } // интеграционный тест
  • 31. Сценарный тест 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'); } // юнит тест
  • 32. Отладка • Все промежуточные данные выводятся на экран • При сбое делается скриншот последней страницы • Модуль WebDebug
  • 33. Очистка • Тесты должны работать в изоляции • Тесты не должны гадить друг другу • Очистка кеша, данных, сессий…
  • 34. Очистка БД • перезаливать sql-дамп БД. • использовать SQLite. • через rollback в транзакции.
  • 35. Модули • Веб (Selenium, ZombieJS, PhpBrowser) • API (REST, SOAP) • MVC Frameworks (Symfony, Zend, …) • Database (MySQL, PostgreSQL, …) • …. всего 19
  • 36. Когда модулей мало • Пишем свои! • Helper-код • public function seeReceivedSms() { • $messages = $this->_getOutgoingMessages(); • $this->assertGreaterThen(0, $messages->count()); • } • Тест • $I->click("Confirm by Sms"); • $I->seeReceivedSms();
  • 37. Continuous Integration • Автоматический запуск тестов • «Письма счастья» при поломках • Раннее выявление ошибок
  • 38. Интеграция с CI • Экспорт HTML, XML, JSON, TAP • Jenkins, Bamboo, etc… • Красивые HTML репорты
  • 40. Подходит для 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’);
  • 42. Документация • http://codeception.com • Guides – всё о фреймворке (9 глав) • Модули – все функции • Reference – команды, опции.
  • 43. Вопросы? • http://Codeception.com • https://github.com/codeception/codeception • Skype: Davert.ua • davert@ukr.net • Twitter: @davert