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

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

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

PHP User Group Dneropetrovsk.
Testing practices && testing tools

Michael Bodnarchuk

September 24, 2015
Tweet

More Decks by Michael Bodnarchuk

Other Decks in Programming

Transcript

  1. 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
  2. ПРИ ЧЕМ ТУТ РАЗРАБОТЧИКИ? они знают что внутри коробки без

    них юнит/интеграционные тесты не напишутся они могут оптимизировать взаимодействие с системой описать свое виденье спецификации через тест разработчики умеют управлять реальностью!
  3. BEST PRACTICES Отделить дополнительный код от теста Отделить конфигурацию от

    теста Делать тесты читабельными (и компактными) Выносить повторяющиеся данные/код в общие файлы Помнить о классах эквивалентности
  4. BEHAVIOR DRIVEN DEVELOPMENT Тесно связана с тестированием Описывает менеджмент команды

    и комуникации с заказчиком Все должны говорить на одном языке
  5. 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
  6. TDD || BDD || NULL Тестирование != TDD || BDD

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

    цифра отчета покрытия не представляет ценности Нет смысла стремиться к 100% покрытию
  8. PHPUNIT Старичок-толстячок, он же стандарт де-факто Монолитность Два движка для

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

    моки Не заменяет PHPUnit Для разработки, а не для тестирования
  10. МОДУЛИ PhpBrowser WebDriver Фреймворки (Symfony2, Laravel, Yii) API: REST, SOAP,

    XML-RPC Db, Mongo, Redis Очереди: AMQP, Beanstalk, ...
  11. ПРИМЕР РЕАЛЬНОГО ТЕСТА < ? 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 ' ) ; }
  12. ТАК ПОЧЕМУ ЖЕ CODECEPTION? One tool to rule them all

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

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