codeception uatestingdays

32
Codeception Тестирование в PHP

Upload: davertmik

Post on 01-Jul-2015

578 views

Category:

Technology


5 download

DESCRIPTION

Lightning Talk. Обзор системы автоматического тестирования PHP проектов - Codeception (codeception.com)

TRANSCRIPT

Page 1: Codeception UATestingDays

CodeceptionТестирование в PHP

Page 2: Codeception UATestingDays

Я

• Боднарчук Михаил

• Веб разработчик (PHP, Ruby)

• Автор Codeception

• @davert

Page 3: Codeception UATestingDays

Существующие решения

• PHPUnit

• ?

• ?

• ?

• ?

• ?

• Selenium

Page 4: Codeception UATestingDays

Результат

• PHP программисты – гавнокодеры

• Никто не тестирует код*

• И я в том числе.

• * за редким исключением. Скорее ради забавы, или, например, когда это огромный проект ентерпрайз уровня.

Page 5: Codeception UATestingDays

Чего не хватает?

• Простоты написания тестов

• Простоты чтения тестов

• Простоты отладки тестов

Page 6: Codeception UATestingDays

Codeception

• Простой но мощный фреймворк

• Основан на PHPUnit

• Open Source

• Хорошо документирован

• Версия 1.0.14

• PHP >= 5.3

Page 7: Codeception UATestingDays
Page 8: Codeception UATestingDays

Чуваки

• Тестирование с «человеческим лицом»

• Действия от лица людей.

• Минимум технических терминов.

Page 9: Codeception UATestingDays

Чуваки

• WebGuy – тестирует работу сайта вцелом

• Приемочное тестирование.

• Олицетворяет менеджера

Page 10: Codeception UATestingDays

Чуваки

• TestGuy - проверяет работу зная внутренности системы.

• Обеспечивает функциональное тестирование.

• Проф. тестировщик.

Page 11: Codeception UATestingDays

Чуваки

• CodeGuy – тестирует код.

• Юнит-тестирование.

• Разработчик.

Page 12: Codeception UATestingDays

WebGuy

• Selenium RC

• WebDriver

• ZombieJS

• PhpBrowser

Page 13: Codeception UATestingDays

Типичный тест

• $I = new WebGuy($scenario);

• $I->click('Login');

• $I->fillField('username','davert');

• $I->fillField('password','gfhjkm');

• $I->click('Submit');

• $I->see('Hello, Davert!');

Page 14: Codeception UATestingDays

Написание теста

Page 15: Codeception UATestingDays

Как находятся элементы?

• $I->click('Login'); - ?

• $I->fillField('username','davert'); - ?

Page 16: Codeception UATestingDays

Я же умный, красивый, в меру упитанный фреймворк ну в полном

расцвете сил!

Page 17: Codeception UATestingDays

Поиск элемента на странице

• По имени (name, value, alt, …)

• По лейблу

• По CSS селектору

• По Xpath (с версии 1.1)

Page 18: Codeception UATestingDays

Результаты теста

Page 19: Codeception UATestingDays

Команды: 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’);

Page 20: Codeception UATestingDays

Это очевидно, Ватсон!

Page 21: Codeception UATestingDays

TestGuy

• Symfony2

• Zend Framework

• Kohana

• Social Engine

• MySQL, PostgreSQL

• ORM

Page 22: Codeception UATestingDays

Интеграция с фреймворками

• Не обращаемся к веб-серверу.

• Работает гораздо быстрее.

• Stack trace и отладочная информация.

Page 23: Codeception UATestingDays

Отладка

• Все промежуточные данные выводятся на экран

• При сбое делается скриншот последней страницы

• Модуль WebDebug

Page 24: Codeception UATestingDays

Очистка БД

• перезаливать sql-дамп БД.

• использовать SQLite.

• через rollback в транзакции.

Page 25: Codeception UATestingDays

Модули

• Веб (Selenium, ZombieJS, PhpBrowser)

• API (REST, SOAP)

• MVC Frameworks (Symfony, Zend, …)

• Database (MySQL, PostgreSQL, …)

• …. всего 19

Page 26: Codeception UATestingDays

Когда модулей мало

• Пишем свои!

• Helper-код• public function seeReceivedSms() {

• $messages = $this->_getOutgoingMessages();

• $this->assertGreaterThen(0, $messages->count());

• }

• Тест

• $I->click("Confirm by Sms");

• $I->seeReceivedSms();

Page 27: Codeception UATestingDays

Интеграция с CI

• Экспорт HTML, XML, JSON, TAP

• Jenkins, Bamboo, etc…

• Красивые HTML репорты

Page 28: Codeception UATestingDays

Репорт

Page 29: Codeception UATestingDays

Подходит для 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’);

Page 30: Codeception UATestingDays

Hardcore BDD

Page 31: Codeception UATestingDays

Документация

• http://codeception.com

• Guides – всё о фреймворке (9 глав)

• Модули – все функции

• Reference –команды, опции.

Page 32: Codeception UATestingDays

Вопросы?

• http://Codeception.com

• https://github.com/codeception/codeception

• Skype: Davert.ua

[email protected]

• Twitter: @davert