43
Современное функциональное тестированиес Codeception

М. Боднарчук Современное функциональное тестирование с Codeception

  • Upload
    -

  • View
    979

  • Download
    12

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: М. Боднарчук Современное функциональное тестирование с Codeception

Современное функциональное

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

Page 2: М. Боднарчук Современное функциональное тестирование с Codeception

Я

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

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

• Автор Codeception

• @davert

Page 3: М. Боднарчук Современное функциональное тестирование с Codeception

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

Ручное Автоматизированное

Page 4: М. Боднарчук Современное функциональное тестирование с Codeception

Когда автоматизировать?

• Частые изменения в проекте

• Много изменений в проекте

• Много разработчиков, мало тестировщиков.

Page 5: М. Боднарчук Современное функциональное тестирование с Codeception

Пишем тесты?

• Что-что?

• А… Это… Лениво.

• А… Не… Сложно.

• Да, как-то пытался писать юнит-тесты.

• Не, у нас для этого есть QA отдел.

• Да!

Page 6: М. Боднарчук Современное функциональное тестирование с Codeception

С чего начать?

• Тестирования функционала.

• Типичные пользовательские сценарии.

• API

Page 7: М. Боднарчук Современное функциональное тестирование с Codeception

Противопоказано

• А давайте напишем юнит тест!

• Как же? Юнит тесты это круто!

• Нам надо 100% покрытия кода!

Page 8: М. Боднарчук Современное функциональное тестирование с Codeception

Казалось бы…

при чем тут Codeception…

Page 9: М. Боднарчук Современное функциональное тестирование с Codeception

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

• PHPUnit

• ?

• ?

• ?

• ?

• ?

• Selenium

Page 10: М. Боднарчук Современное функциональное тестирование с Codeception

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

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

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

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

Page 11: М. Боднарчук Современное функциональное тестирование с Codeception

Codeception

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

• Основан на PHPUnit

• Open Source

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

• Версия 1.1.3

• PHP >= 5.3

Page 12: М. Боднарчук Современное функциональное тестирование с Codeception
Page 13: М. Боднарчук Современное функциональное тестирование с Codeception

Чуваки

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

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

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

Page 14: М. Боднарчук Современное функциональное тестирование с Codeception

Чуваки

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

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

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

Page 15: М. Боднарчук Современное функциональное тестирование с Codeception

Чуваки

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

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

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

Page 16: М. Боднарчук Современное функциональное тестирование с Codeception

Чуваки

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

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

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

Page 17: М. Боднарчук Современное функциональное тестирование с Codeception

WebGuy

• Selenium RC

• WebDriver

• ZombieJS

• PhpBrowser

Page 18: М. Боднарчук Современное функциональное тестирование с Codeception

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

• $I = new WebGuy($scenario);

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

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

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

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

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

Page 19: М. Боднарчук Современное функциональное тестирование с Codeception

Запускаем…

Codeception PHP Testing Framework v1.1.3 Powered by PHPUnit 3.6.10 by Sebastian Bergmann. Suite acceptance started Trying to sign in as a customer (LoginCept.php) Scenario: * I click “Login" => Moved to page http://login * I fill field “name",“davert" * I fill field “password",“gfhjkm" * I click “Submit" => Moved to page http://localhost/user/davert * I see “Hello, Davert" OK Time: 2 seconds, Memory: 10.25Mb OK (1 test, 1 assertion)

Page 20: М. Боднарчук Современное функциональное тестирование с Codeception

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

Page 21: М. Боднарчук Современное функциональное тестирование с Codeception

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

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

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

Page 22: М. Боднарчук Современное функциональное тестирование с Codeception

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

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

Page 23: М. Боднарчук Современное функциональное тестирование с Codeception

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

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

• По лейблу

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

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

Page 24: М. Боднарчук Современное функциональное тестирование с Codeception

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

Page 25: М. Боднарчук Современное функциональное тестирование с Codeception

Команды: 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 26: М. Боднарчук Современное функциональное тестирование с Codeception
Page 27: М. Боднарчук Современное функциональное тестирование с Codeception

TestGuy

• Symfony2

• Zend Framework

• Kohana

• Social Engine

• MySQL, PostgreSQL

• ORM

• Ожидается Drupal 8

Page 28: М. Боднарчук Современное функциональное тестирование с Codeception

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

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

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

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

Page 29: М. Боднарчук Современное функциональное тестирование с Codeception

CodeGuy

• Простые тесты с PHPUnit

• Комплексные тесты в виде сценариев

• Доступны все модули

Page 30: М. Боднарчук Современное функциональное тестирование с Codeception

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

function testSavingUser()

{

$user = new User();

$user->setName('Miles');

$user->setEmail(‘[email protected]');

$user->save();

$this->codeGuy->seeInDatabase('users',array(

'name' => 'Miles‘,

‘email' => ‘[email protected]‘,

));

} // интеграционный тест

Page 31: М. Боднарчук Современное функциональное тестирование с Codeception

Сценарный тест

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'); } // юнит тест

Page 32: М. Боднарчук Современное функциональное тестирование с Codeception

Отладка

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

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

• Модуль WebDebug

Page 33: М. Боднарчук Современное функциональное тестирование с Codeception

Очистка

• Тесты должны работать в изоляции

• Тесты не должны гадить друг другу

• Очистка кеша, данных, сессий…

Page 34: М. Боднарчук Современное функциональное тестирование с Codeception

Очистка БД

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

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

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

Page 35: М. Боднарчук Современное функциональное тестирование с Codeception

Модули

• Веб (Selenium, ZombieJS, PhpBrowser)

• API (REST, SOAP)

• MVC Frameworks (Symfony, Zend, …)

• Database (MySQL, PostgreSQL, …)

• …. всего 19

Page 36: М. Боднарчук Современное функциональное тестирование с Codeception

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

• Пишем свои!

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

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

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

• }

• Тест

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

• $I->seeReceivedSms();

Page 37: М. Боднарчук Современное функциональное тестирование с Codeception

Continuous Integration

• Автоматический запуск тестов

• «Письма счастья» при поломках

• Раннее выявление ошибок

Page 38: М. Боднарчук Современное функциональное тестирование с Codeception

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

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

• Jenkins, Bamboo, etc…

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

Page 39: М. Боднарчук Современное функциональное тестирование с Codeception

Репорт

Page 40: М. Боднарчук Современное функциональное тестирование с Codeception

Подходит для 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 41: М. Боднарчук Современное функциональное тестирование с Codeception

Hardcore BDD

Page 42: М. Боднарчук Современное функциональное тестирование с Codeception

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

• http://codeception.com

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

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

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

Page 43: М. Боднарчук Современное функциональное тестирование с Codeception

Вопросы?

• http://Codeception.com

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

• Skype: Davert.ua

[email protected]

• Twitter: @davert