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
300
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
90
DESIGN DECISIONS FOR PERFECT JS E2E TESTING FRAMEWORK
davert
0
680
Bugira
davert
0
59
CodeceptJS Workshop
davert
1
120
Designing Tests Architecture That Does Not Suck
davert
1
190
Beyond Testing
davert
1
360
Beyond Testing for DutchPHP
davert
0
230
Особенности тестирования PHP проектов
davert
0
66
Beyond Testing
davert
0
48
Other Decks in Programming
See All in Programming
Jakarta EE meets AI
ivargrimstad
0
530
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
100
イベント駆動で成長して委員会
happymana
1
320
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
2
1.1k
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
170
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.4k
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
580
CSC509 Lecture 12
javiergs
PRO
0
160
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
890
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
100
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Docker and Python
trallard
40
3.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
BBQ
matthewcrist
85
9.3k
Fireside Chat
paigeccino
34
3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Done Done
chrislema
181
16k
The Cult of Friendly URLs
andyhume
78
6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Rails Girls Zürich Keynote
gr2m
94
13k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
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(‘
[email protected]
'); $user->save(); $this->codeGuy->seeInDatabase('users',array( 'name' => 'Miles‘, ‘email' => ‘
[email protected]
‘, )); } // интеграционный тест
Сценарный тест 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 •
[email protected]
• Twitter: @davert • Мой мастер-класс на http://atdays.com