Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

813 views

Published on

  • Be the first to comment

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

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

×