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

43
Современное функциональное тестированиес Codeception

Transcript of Михаил Боднарчук Современное функциональное...

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

Современное функциональное тестированиес

Codeception

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

Я

• Боднарчук Михаил• Веб разработчик (PHP с 2004, Ruby с 2008)

• Автор Codeception• @davert

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

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

Ручное Автоматизированное

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

Когда автоматизировать?

• Частые изменения в проекте• Много изменений в проекте• Много разработчиков, мало

тестировщиков.

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

Пишем тесты?

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

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

С чего начать?

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

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

Противопоказано

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

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

Казалось бы…

при чем тут Codeception…

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

Существующие решения

• PHPUnit• ?• ?• ?• ?• ?• Selenium

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

Чего не хватает?

• Простоты написания тестов• Простоты чтения тестов• Простоты отладки тестов

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

Codeception

• Простой но мощный фреймворк• Основан на PHPUnit• Open Source• Хорошо документирован• Версия 1.1.3• PHP >= 5.3

Page 12: Михаил Боднарчук Современное функциональное тестирование с Codeception
Page 13: Михаил Боднарчук Современное функциональное тестирование с Codeception

Чуваки

• Тестирование с «человеческим лицом»• Действия от лица людей.• Минимум технических терминов.

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

Чуваки

• WebGuy – тестирует работу сайта вцелом• Приемочное тестирование.• Олицетворяет менеджера

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

Чуваки

• TestGuy - проверяет работу зная внутренности системы.

• Обеспечивает функциональное тестирование.

• Проф. тестировщик.

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

Чуваки

• CodeGuy – тестирует код.• Юнит-тестирование.• Разработчик.

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

WebGuy

• Selenium RC• WebDriver• ZombieJS• PhpBrowser

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

Типичный тест

• $I = new WebGuy($scenario);• $I->click('Login');• $I->fillField('username','davert');• $I->fillField('password','gfhjkm');• $I->click('Submit');• $I->see('Hello, Davert!');

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

Запускаем…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" OK

Time: 2 seconds, Memory: 10.25Mb

OK (1 test, 1 assertion)

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

Написание теста

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

Как находятся элементы?

• $I->click('Login'); - ?• $I->fillField('username','davert'); - ?

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

Я же умный, красивый, в меру упитанный фреймворк ну в полном

расцвете сил!

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

Поиск элемента на странице

• По имени (name, value, alt, …)• По лейблу• По CSS селектору• По Xpath (с версии 1.1)

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

Результаты теста

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

Команды: 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’);

Page 26: Михаил Боднарчук Современное функциональное тестирование с Codeception
Page 27: Михаил Боднарчук Современное функциональное тестирование с Codeception

TestGuy

• Symfony2• Zend Framework• Kohana• Social Engine• MySQL, PostgreSQL• ORM• Ожидается Drupal 8

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

Интеграция с фреймворками

• Не обращаемся к веб-серверу.• Работает гораздо быстрее.• Stack trace и отладочная информация.

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

CodeGuy

• Простые тесты с PHPUnit• Комплексные тесты в виде сценариев• Доступны все модули

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

Типичный тест

function testSavingUser(){ $user = new User(); $user->setName('Miles'); $user->setEmail(‘[email protected]'); $user->save(); $this->codeGuy->seeInDatabase('users',array( 'name' => 'Miles‘, ‘email' => ‘[email protected]‘, )); } // интеграционный тест

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

Сценарный тест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');} // юнит тест

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

Отладка

• Все промежуточные данные выводятся на экран

• При сбое делается скриншот последней страницы

• Модуль WebDebug

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

Очистка

• Тесты должны работать в изоляции• Тесты не должны гадить друг другу• Очистка кеша, данных, сессий…

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

Очистка БД

• перезаливать sql-дамп БД.• использовать SQLite.• через rollback в транзакции.

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

Модули

• Веб (Selenium, ZombieJS, PhpBrowser)• API (REST, SOAP)• MVC Frameworks (Symfony, Zend, …)• Database (MySQL, PostgreSQL, …)• …. всего 19

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

Когда модулей мало

• Пишем свои! • Helper-код• public function seeReceivedSms() {• $messages = $this->_getOutgoingMessages();• $this->assertGreaterThen(0, $messages->count());• }

• Тест• $I->click("Confirm by Sms");• $I->seeReceivedSms();

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

Continuous Integration

• Автоматический запуск тестов• «Письма счастья» при поломках• Раннее выявление ошибок

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

Интеграция с CI

• Экспорт HTML, XML, JSON, TAP• Jenkins, Bamboo, etc…• Красивые HTML репорты

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

Репорт

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

Подходит для 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’);

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

Hardcore BDD

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

Документация

• http://codeception.com

• Guides – всё о фреймворке (9 глав)• Модули – все функции• Reference – команды, опции.

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

Вопросы?

• http://Codeception.com• https://github.com/codeception/codeception• Skype: Davert.ua• [email protected]• Twitter: @davert