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