$30 off During Our Annual Pro Sale. View Details »

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

fwdays
November 18, 2014

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

fwdays

November 18, 2014
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. BEYOND TESTING
    Michael Bodnarchuk
    2014
    BEYOND TESTING

    View Slide

  2. ОБО МНЕ
     Михаил Боднарчук @davert
     Веб-разработчик c пишу на PHP,
    Rails, EmberJS
     Автор фреймворка для
    тестирования Codeception
     А также AspectMock, Specify,
    Robo, RoboCI, PHPTestClub, etc

    View Slide

  3. О ЧЕМ ДОКЛАД
     О том, что делать когда PHPUnit уже установлен и первые тесты написаны
     Что нужно помнить при написании тестов
     Вопрос жизни, вселенной и всего такого – TDD or not TDD
     О создании среды для тестирования
     ...и ни слова о Codeception

    View Slide

  4. BEST PRACTICES
    SOME KIND OF

    View Slide

  5. СТРУКТУРА ИДЕАЛЬНОГО ТЕСТА
     Условие (Given)
     Действие (When)
     Проверка (Then)

    View Slide

  6. КАК ПИСАТЬ ТЕСТ
     Отделить конфигурацию от самого теста
     Избегать иерархии тесткейсов (использовать трейты)
     Отделить test code / support code
     Делать тест простым и выразительным

    View Slide

  7. СТАРАЙТЕСЬ ТАК НЕ ДЕЛАТЬ

    View Slide

  8. ПИШИТЕ СВОИ ASSERT* МЕТОДЫ

    View Slide

  9. УПРОЩАЙТЕ

    View Slide

  10. ВИДЫ ТЕСТОВ
     Приемочные (Acceptance)
     Функциональные (Functional)
     Интеграционные (Integration)
     Модульные (Unit)

    View Slide

  11. КРИТЕРИИ ТЕСТОВ
     Стабильность выполнения ↓
     Стабильность изменения ↑
     Скорость ↓
     Покрытие ↑
     Детализация ↓
     Читабельность ↕
    Модульные => Интеграционные => Функциональные => Приемочные

    View Slide

  12. UNIT TESTS
    Тестируйте модули в изоляции!
    (но насколько это целесообразно?)

    View Slide

  13. LAYERED TESTS VS UNIT TESTS

    View Slide

  14. РАБОТА С ДАННЫМИ
    КАК ТЕСТИРОВАТЬ ВЗАИМОДЕЙСТВИЕ С БД

    View Slide

  15. УПРАВЛЕНИЕ ДАННЫМИ
     Fixtures (nelmio/alice)
     Dumps
     Factories (FactoryMuffin)

    View Slide

  16. FACTORY_MUFFIN IN REAL LIFE

    View Slide

  17. ОЧИСТКА ДАННЫХ
     Вручную добавлять/убирать данные между тестами
     Записывать/очищать всю базу данных
     Использовать транзакции – делать rollback в конце теста

    View Slide

  18. TDD || !TDD
    ВОПРОС ЖИЗНИ, ВСЕЛЕННОЙ И ВСЕГО ТАКОГО

    View Slide

  19. TEST-DRIVEN-DEVELOPMENT + DESIGN

    View Slide

  20. IS TDD DEAD

    View Slide

  21. ЦИТАТЫ
     TDD is more an act of
    design than verification Bob
    Martin
     Don't try to use tests to
    design objects that have
    already been designed.
    Use it where you will
    actually benefit from the
    practice of test driven
    design Matthew J.
    Morrison.

    View Slide

  22. НУЖНО БОЛЬШЕ ЦИТАТ ИЗВЕСТНЫХ ЛЮДЕЙ!
     Возненавидеть TDD можно только вследствие апатии и лени. /Сенека/
     TDD — это чередование всяких комбинаций, их нужно изучать, следить
    за ними, чтобы всюду оставаться в выгодном положении. /О. Бальзак/
     Когда жалуются на TDD, то это почти всегда означает, что от него
    требовали невозможного . /Ж.Ренар/
     TDD — слишком серьезная штука, чтобы говорить о ней всерьез.
    /О.Уайльд/

    View Slide

  23. ТАК ИСПОЛЬЗОВАТЬ ЛИ НАМ TDD?
    IT DEPENDS…

    View Slide

  24. ПОЧЕМУ ТАК ПРОИСХОДИТ?

    View Slide

  25. ВСЕ ЛЮДИ РАЗНЫЕ
    Рационалы
    Иррационалы

    View Slide

  26. КАК ДВИЖЕТСЯ К ЦЕЛИ РАЦИОНАЛ
    A
    B

    View Slide

  27. КАК ДВИЖЕТСЯ К ЦЕЛИ ИРРАЦИОНАЛ
    A
    B

    View Slide

  28. TDD НЕ ДЛЯ ВСЕХ
     Рационал склонен искать решение по системе.
     Иррационал – интуитивно искать решение.
     TDD предоставляет систему для решения задачи.
     Использовать или не использовать TDD – личный выбор каждого.

    View Slide

  29. ИНСТРУМЕНТЫ ТЕСТИРОВАНИЯ
    О ЧЕМ СТОИТ ЗНАТЬ

    View Slide

  30. ТЕСТИРОВАНИЕ EMAIL: MAILCATCHER

    View Slide

  31. MAILCATCHER
     Ruby приложение с веб-интервейсом
     SMTP-заглушка
     Предоставляет REST API для доступа к отправленным имейлам
     API можно использовать в тестах

    View Slide

  32. ГДЕ ПОЧИТАТЬ О MAILCATCHER
     Официальный сайт
    http://mailcatcher.me
     Email Debugging with MailCatcher
    http://www.sitepoint.com/email-debugging-mailcatcher/
     MailCatcher for PHP
    https://github.com/alexandresalome/mailcatcher
     Testing Emails in PHP
    http://codeception.com/12-15-2013/testing-emails-in-php.html

    View Slide

  33. ТЕСТИРОВАНИЕ ВЕБ-ПРИЛОЖЕНИЙ
    Selenium
    PhantomJS

    View Slide

  34. SELENIUM НА CI-СЕРВЕРЕ?
     Selenium Server
     Xvfb – Virtual Framebuffer
     Firefox or Chromium

    View Slide

  35. КАК НАСТРОИТЬ ТЕСТОВУЮ СРЕДУ?

    View Slide

  36. ССЫЛКИ В СТУДИЮ!
     Travis Cookbooks
    https://github.com/travis-ci/travis-cookbooks
     Vagrant
    https://www.vagrantup.com
     Docker
    https://www.docker.com

    View Slide

  37. СОЗДАДИМ ТЕСТОВУЮ СРЕДУ
     Выберем рецепты из Travis Cookbooks
     Накатим! (в Vagrant или на хостинг)
     Если надо - установим Jenkins
     ?????
     PROFIT!!!

    View Slide

  38. ЗАПАКУЕМ SELENIUM В КОНТЕЙНЕРЕ
     Возьмем рецепты: java,xserver,firefox::tarball,chromium
     С помощью Chef установим их внутрь контейнера
     Запускаем Selenium внутри контейнера
     Получаем
    https://github.com/Codeception/SeleniumEnv

    View Slide

  39. ЗАПАКУЕМ TRAVIS В КОНТЕЙНЕР!
     Берем рецепты (почти все)
     С помощью Chef и шаманского бубна установим их внутрь контейнера
     Увидим, что ничего не работает, поменяем настройки
     Повторим......
     ?????
     Заработало!
    https://github.com/Codegyre/RoboCI

    View Slide

  40. ROBOCI
     Инструмент для виртуализации
     Использует конфиги Travis CI
     Работает через Docker, использует связанные контейнеры
     Бесплатен
     Позволяет отлаживать тесты внутри виртуальной среды
     Не имеет веб-интерфейса =(
     Нет уведомлений

    View Slide

  41. CI ДЛЯ ЛЕНИВЫХ

    View Slide

  42. ТЕСТОВАЯ СРЕДА НА CI СЕРВЕРЕ
     Отказаться от виртуализации, использовать CI сервер
     Использовать Vargant, VirtualBox, OpenVZ, …. для виртуализации
     Использовать связанные контейнеры Docker
     Купить подписку на CI сервис

    View Slide

  43. СПАСИБО!
    Тестирование это не только PHPUnit, Behat, Codeception, а и
    инфраструктура, инструменты и психология. Помните это!
     Меня зовут Михаил Боднарчук
     Мой Twitter: @davert
     Мой Github: DavertMik
     И сайт: http://codeception.com

    View Slide