Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Codeception для разработчиков
Search
Michael Bodnarchuk
September 14, 2012
Programming
2
320
Codeception для разработчиков
Тестирование PHP проектов с Codeception. Введение в тестирование плюс примеры тестов с Codeception.
Michael Bodnarchuk
September 14, 2012
Tweet
Share
More Decks by Michael Bodnarchuk
See All by Michael Bodnarchuk
Codeception 3.0: Long Bloody Story
davert
0
100
DESIGN DECISIONS FOR PERFECT JS E2E TESTING FRAMEWORK
davert
0
700
Bugira
davert
0
72
CodeceptJS Workshop
davert
1
130
Designing Tests Architecture That Does Not Suck
davert
1
240
Beyond Testing
davert
1
430
Beyond Testing for DutchPHP
davert
0
270
Особенности тестирования PHP проектов
davert
0
77
Beyond Testing
davert
0
55
Other Decks in Programming
See All in Programming
decksh - a little language for decks
ajstarks
4
21k
Prompt Engineeringの再定義「Context Engineering」とは
htsuruo
0
110
Go製CLIツールをnpmで配布するには
syumai
2
1k
新しいモバイルアプリ勉強会(仮)について
uetyo
1
240
テスターからテストエンジニアへ ~新米テストエンジニアが歩んだ9ヶ月振り返り~
non0113
2
250
型で語るカタ
irof
2
910
AIに安心して任せるためにTypeScriptで一意な型を作ろう
arfes0e2b3c
0
320
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
120
React 使いじゃなくても知っておきたい教養としての React
oukayuka
18
5k
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
330
대규모 트래픽을 처리하는 프론트 개발자의 전략
maryang
0
110
PHPカンファレンス関西2025 基調講演
sugimotokei
6
1k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Scaling GitHub
holman
461
140k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Designing Experiences People Love
moore
142
24k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
RailsConf 2023
tenderlove
30
1.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Cult of Friendly URLs
andyhume
79
6.5k
The Invisible Side of Design
smashingmag
301
51k
Transcript
Автоматизация тестирования с Codeception
Я • Боднарчук Михаил • Веб разработчик (PHP с 2004,
Ruby с 2008) • Автор Codeception • @davert
Тестирование Ручное Автоматизированное
Когда автоматизировать? • Частые изменения в проекте • Много изменений
в проекте • Много разработчиков, мало тестировщиков.
Пишем тесты? • Что-что? • А… Это… Лениво. • А…
Не… Сложно. • Да, как-то пытался писать юнит-тесты. • Не, у нас для этого есть QA отдел. • Да!
С чего начать? • Тестирования функционала. • Типичные пользовательские сценарии.
• API
Противопоказано • А давайте напишем юнит тест! • Как же?
Юнит тесты это круто! • Нам надо 100% покрытия кода!
Казалось бы… при чем тут Codeception…
Существующие решения • PHPUnit • ? • ? • ?
• ? • ? • Selenium
Чего не хватает? • Простоты написания тестов • Простоты чтения
тестов • Простоты отладки тестов
Codeception • Простой но мощный фреймворк • Основан на PHPUnit
• Open Source • Хорошо документирован • Версия 1.1.3 • PHP >= 5.3
None
Чуваки • Тестирование с «человеческим лицом» • Действия от лица
людей. • Минимум технических терминов.
Чуваки • 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!');
Написание теста
Как находятся элементы? • $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’);
None
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 • Мой мастер-класс на http://atdays.com