Save 37% off PRO during our Black Friday Sale! »

Особенности тестирования PHP проектов

Особенности тестирования PHP проектов

PHP User Group Dneropetrovsk.
Testing practices && testing tools

Aa0518da9d7119444cb02a8f27017d8a?s=128

Michael Bodnarchuk

September 24, 2015
Tweet

Transcript

  1. ОСОБЕННОСТИ ТЕСТИРОВАНИЯ PHP ПРОЕКТОВ

  2. ОБО МНЕ Живу в Киеве Веб-разработчик: PHP, Rails, EmberJS Разрабатываю

    Codeception и другие прикольные проекты
  3. ТЕСТИРОВАНИЕ Ручное vs Автоматизированое

  4. АВТОМАТИЗИРОВАНОЕ Проверяет типичные сценарии взаимодействия Оценивает работоспособность системы в текущий

    момент времени Система проверяется изнутри и снаружи
  5. None
  6. Criteria Black Box Testing White Box Testing Definition Black Box

    Testing is a software testing method in which the internal structure/ design/ implementation of the item being tested is NOT known to the tester White Box Testing is a software testing method in which the internal structure/ design/ implementation of the item being tested is known to the tester. Levels Applicable To Mainly applicable to higher levels of testing: Mainly applicable to lower levels of testing: Responsibility Generally, independent Software Testers Generally, Software Developers Programming Knowledge Not Required Required Implementation Knowledge Not Required Required Basis for Test Cases Requirement Specifications Detail Design Acceptance Testing System Testing Unit Testing Integration Testing
  7. None
  8. КРИТЕРИИ ТЕСТОВ Покрытие Скорость выполнения Поддержка Читабельность

  9. КТО ДОЛЖЕН ТЕСТИРОВАТЬ Тестировщики Автоматизаторы Разработчики Вся команда Всевышний

  10. ПРИ ЧЕМ ТУТ РАЗРАБОТЧИКИ? они знают что внутри коробки без

    них юнит/интеграционные тесты не напишутся они могут оптимизировать взаимодействие с системой описать свое виденье спецификации через тест разработчики умеют управлять реальностью!
  11. ПОДМЕНА РЕАЛЬНОСТИ: UNIT Fake, Dummy, Stub - формируют контекст Mock,

    Spy - проверяют поведение
  12. ПОДМЕНА РЕАЛЬНОСТИ: INTEGRATION Fixtures, Factories - вгрузка тестовых данных

  13. ПОДМЕНА РЕАЛЬНОСТИ: ACCEPTANCE Использование API для создание/очистки данных Перехват и

    тестирование отправки почты (Mailcatcher)
  14. СТРУКТУРА ТЕСТА условие действие проверка (assertion)

  15. BEST PRACTICES Отделить дополнительный код от теста Отделить конфигурацию от

    теста Делать тесты читабельными (и компактными) Выносить повторяющиеся данные/код в общие файлы Помнить о классах эквивалентности
  16. ЧТО ПЛОХО ТЕСТИРУЕТСЯ Асинхронные запросы Запросы к стронним сервисам Работа

    с реальными данными
  17. ЦЕНА ОШИБКИ И РЕГРЕССИОННЫЕ ТЕСТЫ

  18. BEHAVIOR DRIVEN DEVELOPMENT Тесно связана с тестированием Описывает менеджмент команды

    и комуникации с заказчиком Все должны говорить на одном языке
  19. S t o r y : A c c o

    u n t H o l d e r w i t h d r a w s c a s h A s a n A c c o u n t H o l d e r I w a n t t o w i t h d r a w c a s h f r o m a n A T M S o t h a t I c a n g e t m o n e y w h e n t h e b a n k i s c l o s e d S c e n a r i o 1 : A c c o u n t h a s s u f f i c i e n t f u n d s G i v e n t h e a c c o u n t b a l a n c e i s $ 1 0 0 A n d t h e c a r d i s v a l i d A n d t h e m a c h i n e c o n t a i n s e n o u g h m o n e y W h e n t h e A c c o u n t H o l d e r r e q u e s t s $ 2 0 T h e n t h e A T M s h o u l d d i s p e n s e $ 2 0 A n d t h e a c c o u n t b a l a n c e s h o u l d b e $ 8 0 A n d t h e c a r d s h o u l d b e r e t u r n e d
  20. BEHAVIOUR DRIVEN DEVELOPMENT IS ABOUT CONVERSATION NOT TOOLING https://skillsmatter.com/skillscasts/5008-10-years-of-doing- bdd-all-wrong

  21. TEST DRIVEN DEVELOPMENT

  22. TDD || BDD || NULL Тестирование != TDD || BDD

    Внедрение BDD зависит от менеджера и заказчика Внедрение TDD зависит от команды разработчиков
  23. ПОКРЫТИЕ КОДА Метрика указывающая наличие белых пятен Сама по себе

    цифра отчета покрытия не представляет ценности Нет смысла стремиться к 100% покрытию
  24. CONTINUOUS INTEGRATION Автоматизирует запуск тестов Максимально близкий к production среде

    Предоставляет отчет и динамику развития проекта
  25. ТЕСТОВЫЕ ФРЕЙМВОРКИ

  26. PHPUNIT Старичок-толстячок, он же стандарт де-факто Монолитность Два движка для

    мокинга (почему не 3?) Отчеты в формате JUnit, HTML, ... и покрытие кода И ещё 100500 (малоиспользуемых) фич
  27. PHPSPEC TDD фреймворк Генерация классов через тест Описание связей через

    моки Не заменяет PHPUnit Для разработки, а не для тестирования
  28. BEHAT BDD-фреймворк Ubiquitous language Mink (Selenium, Goutte, etc)

  29. CODECEPTION

  30. КОМПОНЕНТЫ PHPUnit Symfony Components (BrowserKit, DomCrawler) Guzzle WebDriver Mink

  31. МОДУЛИ PhpBrowser WebDriver Фреймворки (Symfony2, Laravel, Yii) API: REST, SOAP,

    XML-RPC Db, Mongo, Redis Очереди: AMQP, Beanstalk, ...
  32. ПРИМЕР РЕАЛЬНОГО ТЕСТА < ? p h p p u

    b l i c f u n c t i o n v i e w P l a n ( A c c e p t a n c e T e s t e r $ I , \ P a g e \ P l a n $ p l a n P a g e ) { / / с о з д а т ь н а ч а л ь н ы е д а н н ы е $ t h i s ­ > p l a n I d = $ p l a n P a g e ­ > c r e a t e P l a n ( [ ' n a m e ' = > ' p l a n ' . s q ( 1 ) ] ) ; $ I ­ > a m O n P a g e ( ' / p l a n s ' ) ; / / п е р е й т и н а с т р а н и ц у $ I ­ > e x p e c t ( ' o n l y o n e r e s u l t i s m a t c h e d ' ) ; / / к о м м е н т а р и й $ I ­ > s e e ( ' D i s p l a y i n g 1 ­ 1 o f 1 r e s u l t . ' , ' . s u m m a r y ' ) ; / / п р о в е р и т ь н а л и ч и е $ I ­ > c l i c k ( $ p l a n P a g e ­ > v i e w B u t t o n ) ; / / и с п о л ь з о в а т ь P a g e O b j e c t $ I ­ > s e e ( ' p l a n ' . s q ( 1 ) . ' D e t a i l s ' , ' h 1 ' ) ; }
  33. ТАК ПОЧЕМУ ЖЕ CODECEPTION? One tool to rule them all

    Единое API для модулей Модули, решающие 90% повседневных задач
  34. СПАСИБО ЗА ВНИМАНИЕ Меня зовут Михаил Боднарчук или @davert (в

    Твиттере) или @DavertMik (это на Гитхабе). Если захотите узнать больше про Codeception, то это очень даже несложно, просто посетите . А также я с радостью отвечу на ваши вопросы! http://codeception.com