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

Dd3f18c87b851137000c7427d7bd5d32?s=47 fwdays
November 18, 2014

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

Dd3f18c87b851137000c7427d7bd5d32?s=128

fwdays

November 18, 2014
Tweet

Transcript

  1. BEYOND TESTING Michael Bodnarchuk 2014 BEYOND TESTING

  2. ОБО МНЕ  Михаил Боднарчук @davert  Веб-разработчик c пишу

    на PHP, Rails, EmberJS  Автор фреймворка для тестирования Codeception  А также AspectMock, Specify, Robo, RoboCI, PHPTestClub, etc
  3. О ЧЕМ ДОКЛАД  О том, что делать когда PHPUnit

    уже установлен и первые тесты написаны  Что нужно помнить при написании тестов  Вопрос жизни, вселенной и всего такого – TDD or not TDD  О создании среды для тестирования  ...и ни слова о Codeception
  4. BEST PRACTICES SOME KIND OF

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

    Проверка (Then)
  6. КАК ПИСАТЬ ТЕСТ  Отделить конфигурацию от самого теста 

    Избегать иерархии тесткейсов (использовать трейты)  Отделить test code / support code  Делать тест простым и выразительным
  7. СТАРАЙТЕСЬ ТАК НЕ ДЕЛАТЬ

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

  9. УПРОЩАЙТЕ

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

    (Integration)  Модульные (Unit)
  11. КРИТЕРИИ ТЕСТОВ  Стабильность выполнения ↓  Стабильность изменения ↑

     Скорость ↓  Покрытие ↑  Детализация ↓  Читабельность ↕ Модульные => Интеграционные => Функциональные => Приемочные
  12. UNIT TESTS Тестируйте модули в изоляции! (но насколько это целесообразно?)

  13. LAYERED TESTS VS UNIT TESTS

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

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

  16. FACTORY_MUFFIN IN REAL LIFE

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

    всю базу данных  Использовать транзакции – делать rollback в конце теста
  18. TDD || !TDD ВОПРОС ЖИЗНИ, ВСЕЛЕННОЙ И ВСЕГО ТАКОГО

  19. TEST-DRIVEN-DEVELOPMENT + DESIGN

  20. IS TDD DEAD

  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.
  22. НУЖНО БОЛЬШЕ ЦИТАТ ИЗВЕСТНЫХ ЛЮДЕЙ!  Возненавидеть TDD можно только

    вследствие апатии и лени. /Сенека/  TDD — это чередование всяких комбинаций, их нужно изучать, следить за ними, чтобы всюду оставаться в выгодном положении. /О. Бальзак/  Когда жалуются на TDD, то это почти всегда означает, что от него требовали невозможного . /Ж.Ренар/  TDD — слишком серьезная штука, чтобы говорить о ней всерьез. /О.Уайльд/
  23. ТАК ИСПОЛЬЗОВАТЬ ЛИ НАМ TDD? IT DEPENDS…

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

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

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

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

  28. TDD НЕ ДЛЯ ВСЕХ  Рационал склонен искать решение по

    системе.  Иррационал – интуитивно искать решение.  TDD предоставляет систему для решения задачи.  Использовать или не использовать TDD – личный выбор каждого.
  29. ИНСТРУМЕНТЫ ТЕСТИРОВАНИЯ О ЧЕМ СТОИТ ЗНАТЬ

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

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

    REST API для доступа к отправленным имейлам  API можно использовать в тестах
  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
  33. ТЕСТИРОВАНИЕ ВЕБ-ПРИЛОЖЕНИЙ Selenium PhantomJS

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

    Framebuffer  Firefox or Chromium
  35. КАК НАСТРОИТЬ ТЕСТОВУЮ СРЕДУ?

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

     Docker https://www.docker.com
  37. СОЗДАДИМ ТЕСТОВУЮ СРЕДУ  Выберем рецепты из Travis Cookbooks 

    Накатим! (в Vagrant или на хостинг)  Если надо - установим Jenkins  ?????  PROFIT!!!
  38. ЗАПАКУЕМ SELENIUM В КОНТЕЙНЕРЕ  Возьмем рецепты: java,xserver,firefox::tarball,chromium  С

    помощью Chef установим их внутрь контейнера  Запускаем Selenium внутри контейнера  Получаем https://github.com/Codeception/SeleniumEnv
  39. ЗАПАКУЕМ TRAVIS В КОНТЕЙНЕР!  Берем рецепты (почти все) 

    С помощью Chef и шаманского бубна установим их внутрь контейнера  Увидим, что ничего не работает, поменяем настройки  Повторим......  ?????  Заработало! https://github.com/Codegyre/RoboCI
  40. ROBOCI  Инструмент для виртуализации  Использует конфиги Travis CI

     Работает через Docker, использует связанные контейнеры  Бесплатен  Позволяет отлаживать тесты внутри виртуальной среды  Не имеет веб-интерфейса =(  Нет уведомлений
  41. CI ДЛЯ ЛЕНИВЫХ

  42. ТЕСТОВАЯ СРЕДА НА CI СЕРВЕРЕ  Отказаться от виртуализации, использовать

    CI сервер  Использовать Vargant, VirtualBox, OpenVZ, …. для виртуализации  Использовать связанные контейнеры Docker  Купить подписку на CI сервис
  43. СПАСИБО! Тестирование это не только PHPUnit, Behat, Codeception, а и

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