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
110
DESIGN DECISIONS FOR PERFECT JS E2E TESTING FRAMEWORK
davert
0
710
Bugira
davert
0
72
CodeceptJS Workshop
davert
1
130
Designing Tests Architecture That Does Not Suck
davert
1
260
Beyond Testing
davert
1
440
Beyond Testing for DutchPHP
davert
0
290
Особенности тестирования PHP проектов
davert
0
84
Beyond Testing
davert
0
59
Other Decks in Programming
See All in Programming
GraalVM Native Image トラブルシューティング機能の最新状況(2025年版)
ntt_dsol_java
0
150
What's New in Web AI?
christianliebel
PRO
0
130
無秩序からの脱却 / Emergence from chaos
nrslib
1
1.7k
Phronetic Team with AI - Agile Japan 2025 closing
hiranabe
2
620
AI 時代だからこそ抑えたい「価値のある」PHP ユニットテストを書く技術 #phpconfuk / phpcon-fukuoka-2025
shogogg
1
540
FlutterKaigi 2025 システム裏側
yumnumm
0
1.1k
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
10
4.5k
Vueで学ぶデータ構造入門 リンクリストとキューでリアクティビティを捉える / Vue Data Structures: Linked Lists and Queues for Reactivity
konkarin
1
310
Feature Flags Suck! - KubeCon Atlanta 2025
phodgson
0
140
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
1.5k
Dive into Triton Internals
appleparan
0
500
自動テストを活かすためのテスト分析・テスト設計の進め方/JaSST25 Shikoku
goyoki
3
700
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Agile that works and the tools we love
rasmusluckow
331
21k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
980
[RailsConf 2023] Rails as a piece of cake
palkan
57
6.1k
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