Slide 1

Slide 1 text

BEYOND TESTING Michael Bodnarchuk 2014 BEYOND TESTING

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

BEST PRACTICES SOME KIND OF

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

УПРОЩАЙТЕ

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

LAYERED TESTS VS UNIT TESTS

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

FACTORY_MUFFIN IN REAL LIFE

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

TEST-DRIVEN-DEVELOPMENT + DESIGN

Slide 20

Slide 20 text

IS TDD DEAD

Slide 21

Slide 21 text

ЦИТАТЫ  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.

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

ГДЕ ПОЧИТАТЬ О 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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

CI ДЛЯ ЛЕНИВЫХ

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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