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
310
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
71
CodeceptJS Workshop
davert
1
130
Designing Tests Architecture That Does Not Suck
davert
1
230
Beyond Testing
davert
1
420
Beyond Testing for DutchPHP
davert
0
270
Особенности тестирования PHP проектов
davert
0
76
Beyond Testing
davert
0
54
Other Decks in Programming
See All in Programming
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
720
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
600
PHPでWebSocketサーバーを実装しよう2025
kubotak
0
250
XP, Testing and ninja testing
m_seki
3
220
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
610
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
340
#QiitaBash MCPのセキュリティ
ryosukedtomita
0
730
初学者でも今すぐできる、Claude Codeの生産性を10倍上げるTips
s4yuba
3
3.1k
Node-RED を(HTTP で)つなげる MCP サーバーを作ってみた
highu
0
120
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
0
320
Featured
See All Featured
Side Projects
sachag
455
42k
Why Our Code Smells
bkeepers
PRO
337
57k
Embracing the Ebb and Flow
colly
86
4.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
230
A designer walks into a library…
pauljervisheath
207
24k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Bash Introduction
62gerente
614
210k
4 Signs Your Business is Dying
shpigford
184
22k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Designing for humans not robots
tammielis
253
25k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
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