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
700
Bugira
davert
0
72
CodeceptJS Workshop
davert
1
130
Designing Tests Architecture That Does Not Suck
davert
1
250
Beyond Testing
davert
1
430
Beyond Testing for DutchPHP
davert
0
280
Особенности тестирования PHP проектов
davert
0
79
Beyond Testing
davert
0
56
Other Decks in Programming
See All in Programming
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
400
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
600
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
390
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
24
12k
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
470
Rancher と Terraform
fufuhu
2
550
パッケージ設計の黒魔術/Kyoto.go#63
lufia
3
440
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
1.9k
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
The Past, Present, and Future of Enterprise Java with ASF in the Middle
ivargrimstad
0
140
Swift Updates - Learn Languages 2025
koher
2
490
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Gamification - CAS2011
davidbonilla
81
5.4k
Side Projects
sachag
455
43k
Navigating Team Friction
lara
189
15k
Building an army of robots
kneath
306
46k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Facilitating Awesome Meetings
lara
55
6.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How STYLIGHT went responsive
nonsquared
100
5.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
KATA
mclloyd
32
14k
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