Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Codeception для разработчиков

Codeception для разработчиков

Тестирование PHP проектов с Codeception. Введение в тестирование плюс примеры тестов с Codeception.

Michael Bodnarchuk

September 14, 2012
Tweet

More Decks by Michael Bodnarchuk

Other Decks in Programming

Transcript

  1. Когда автоматизировать? • Частые изменения в проекте • Много изменений

    в проекте • Много разработчиков, мало тестировщиков.
  2. Пишем тесты? • Что-что? • А… Это… Лениво. • А…

    Не… Сложно. • Да, как-то пытался писать юнит-тесты. • Не, у нас для этого есть QA отдел. • Да!
  3. Противопоказано • А давайте напишем юнит тест! • Как же?

    Юнит тесты это круто! • Нам надо 100% покрытия кода!
  4. Codeception • Простой но мощный фреймворк • Основан на PHPUnit

    • Open Source • Хорошо документирован • Версия 1.1.3 • PHP >= 5.3
  5. Чуваки • WebGuy – тестирует работу сайта вцелом • Приемочное

    тестирование. • Олицетворяет менеджера
  6. Чуваки • TestGuy - проверяет работу зная внутренности системы. •

    Обеспечивает функциональное тестирование. • Проф. тестировщик.
  7. Типичный тест • $I = new WebGuy($scenario); • $I->click('Login'); •

    $I->fillField('username','davert'); • $I->fillField('password','gfhjkm'); • $I->click('Submit'); • $I->see('Hello, Davert!');
  8. Поиск элемента на странице • По имени (name, value, alt,

    …) • По лейблу • По CSS селектору • По Xpath (с версии 1.1)
  9. Команды: 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’);
  10. TestGuy • Symfony2 • Zend Framework • Kohana • Social

    Engine • MySQL, PostgreSQL • ORM • Ожидается Drupal 8
  11. Интеграция с фреймворками • Не обращаемся к веб-серверу. • Работает

    гораздо быстрее. • Stack trace и отладочная информация.
  12. CodeGuy • Простые тесты с PHPUnit • Комплексные тесты в

    виде сценариев • Доступны все модули
  13. Типичный тест function testSavingUser() { $user = new User(); $user->setName('Miles');

    $user->setEmail(‘[email protected]'); $user->save(); $this->codeGuy->seeInDatabase('users',array( 'name' => 'Miles‘, ‘email' => ‘[email protected]‘, )); } // интеграционный тест
  14. Сценарный тест 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'); } // юнит тест
  15. Отладка • Все промежуточные данные выводятся на экран • При

    сбое делается скриншот последней страницы • Модуль WebDebug
  16. Очистка • Тесты должны работать в изоляции • Тесты не

    должны гадить друг другу • Очистка кеша, данных, сессий…
  17. Модули • Веб (Selenium, ZombieJS, PhpBrowser) • API (REST, SOAP)

    • MVC Frameworks (Symfony, Zend, …) • Database (MySQL, PostgreSQL, …) • …. всего 19
  18. Когда модулей мало • Пишем свои! • Helper-код • public

    function seeReceivedSms() { • $messages = $this->_getOutgoingMessages(); • $this->assertGreaterThen(0, $messages->count()); • } • Тест • $I->click("Confirm by Sms"); • $I->seeReceivedSms();
  19. Интеграция с CI • Экспорт HTML, XML, JSON, TAP •

    Jenkins, Bamboo, etc… • Красивые HTML репорты
  20. Подходит для 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’);
  21. Документация • http://codeception.com • Guides – всё о фреймворке (9

    глав) • Модули – все функции • Reference –команды, опции.