![Page 1: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/1.jpg)
ОСОБЕННОСТИТЕСТИРОВАНИЯPHP ПРОЕКТОВ
![Page 2: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/2.jpg)
ОБО МНЕ
Живу в КиевеВеб-разработчик: PHP, Rails, EmberJSРазрабатываю Codeception и другие прикольныепроекты
![Page 3: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/3.jpg)
ТЕСТИРОВАНИЕРучное vs Автоматизированое
![Page 4: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/4.jpg)
АВТОМАТИЗИРОВАНОЕ
Проверяет типичные сценарии взаимодействияОценивает работоспособность системы в текущиймомент времениСистема проверяется изнутри и снаружи
![Page 5: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/5.jpg)
![Page 6: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/6.jpg)
Criteria Black Box Testing White Box Testing
Definition Black Box Testing is a software testingmethod in which the internal structure/design/ implementation of the itembeing tested is NOT known to the tester
White Box Testing is a software testingmethod in which the internalstructure/ design/ implementation ofthe item being tested is known to thetester.
LevelsApplicable To
Mainly applicable to higher levels oftesting:
Mainly applicable to lower levels oftesting:
Responsibility Generally, independent SoftwareTesters
Generally, Software Developers
ProgrammingKnowledge
Not Required Required
ImplementationKnowledge
Not Required Required
Basis for TestCases
Requirement Specifications Detail Design
Acceptance Testing
System Testing
Unit Testing
Integration Testing
![Page 7: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/7.jpg)
![Page 8: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/8.jpg)
КРИТЕРИИ ТЕСТОВ
ПокрытиеСкорость выполненияПоддержкаЧитабельность
![Page 9: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/9.jpg)
КТО ДОЛЖЕН ТЕСТИРОВАТЬ
ТестировщикиАвтоматизаторыРазработчикиВся командаВсевышний
![Page 10: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/10.jpg)
ПРИ ЧЕМ ТУТ РАЗРАБОТЧИКИ?
они знают что внутри коробкибез них юнит/интеграционные тесты не напишутсяони могут оптимизировать взаимодействие с системойописать свое виденье спецификации через тестразработчики умеют управлять реальностью!
![Page 11: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/11.jpg)
ПОДМЕНА РЕАЛЬНОСТИ: UNIT
Fake, Dummy, Stub - формируют контекстMock, Spy - проверяют поведение
![Page 12: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/12.jpg)
ПОДМЕНА РЕАЛЬНОСТИ: INTEGRATION
Fixtures, Factories - вгрузка тестовых данных
![Page 13: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/13.jpg)
ПОДМЕНА РЕАЛЬНОСТИ: ACCEPTANCE
Использование API для создание/очистки данныхПерехват и тестирование отправки почты (Mailcatcher)
![Page 14: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/14.jpg)
СТРУКТУРА ТЕСТА
условиедействиепроверка (assertion)
![Page 15: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/15.jpg)
BEST PRACTICES
Отделить дополнительный код от тестаОтделить конфигурацию от тестаДелать тесты читабельными (и компактными)Выносить повторяющиеся данные/код в общие файлыПомнить о классах эквивалентности
![Page 16: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/16.jpg)
ЧТО ПЛОХО ТЕСТИРУЕТСЯ
Асинхронные запросыЗапросы к стронним сервисамРабота с реальными данными
![Page 17: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/17.jpg)
ЦЕНА ОШИБКИ И РЕГРЕССИОННЫЕ ТЕСТЫ
![Page 18: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/18.jpg)
BEHAVIOR DRIVEN DEVELOPMENT
Тесно связана с тестированиемОписывает менеджмент команды и комуникации сзаказчикомВсе должны говорить на одном языке
![Page 19: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/19.jpg)
Story: Account Holder withdraws cash
As an Account HolderI want to withdraw cash from an ATMSo that I can get money when the bank is closed
Scenario 1: Account has sufficient fundsGiven the account balance is $100 And the card is valid And the machine contains enough moneyWhen the Account Holder requests $20Then the ATM should dispense $20 And the account balance should be $80 And the card should be returned
![Page 20: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/20.jpg)
BEHAVIOUR DRIVEN DEVELOPMENT IS ABOUTCONVERSATION NOT TOOLING
https://skillsmatter.com/skillscasts/5008-10-years-of-doing-bdd-all-wrong
![Page 21: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/21.jpg)
TEST DRIVEN DEVELOPMENT
![Page 22: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/22.jpg)
TDD || BDD || NULL
Тестирование != TDD || BDDВнедрение BDD зависит от менеджера и заказчикаВнедрение TDD зависит от команды разработчиков
![Page 23: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/23.jpg)
ПОКРЫТИЕ КОДА
Метрика указывающая наличие белых пятенСама по себе цифра отчета покрытия не представляетценностиНет смысла стремиться к 100% покрытию
![Page 24: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/24.jpg)
CONTINUOUS INTEGRATION
Автоматизирует запуск тестовМаксимально близкий к production средеПредоставляет отчет и динамику развития проекта
![Page 25: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/25.jpg)
ТЕСТОВЫЕФРЕЙМВОРКИ
![Page 26: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/26.jpg)
PHPUNIT
Старичок-толстячок, он же стандарт де-фактоМонолитностьДва движка для мокинга (почему не 3?)Отчеты в формате JUnit, HTML, ... и покрытие кодаИ ещё 100500 (малоиспользуемых) фич
![Page 27: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/27.jpg)
PHPSPEC
TDD фреймворкГенерация классов через тестОписание связей через мокиНе заменяет PHPUnitДля разработки, а не для тестирования
![Page 28: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/28.jpg)
BEHAT
BDD-фреймворкUbiquitous languageMink (Selenium, Goutte, etc)
![Page 29: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/29.jpg)
CODECEPTION
![Page 30: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/30.jpg)
КОМПОНЕНТЫ
PHPUnitSymfony Components (BrowserKit, DomCrawler)GuzzleWebDriverMink
![Page 31: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/31.jpg)
МОДУЛИ
PhpBrowserWebDriverФреймворки (Symfony2, Laravel, Yii)API: REST, SOAP, XML-RPCDb, Mongo, RedisОчереди: AMQP, Beanstalk, ...
![Page 32: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/32.jpg)
ПРИМЕР РЕАЛЬНОГО ТЕСТА<?phppublic function viewPlan(AcceptanceTester $I, \Page\Plan $planPage) // создать начальные данные $this>planId = $planPage>createPlan(['name' => 'plan'.sq(1)]); $I>amOnPage('/plans'); // перейти на страницу $I>expect('only one result i s matched'); // комментарий $I>see('Displaying 11 of 1 result.','.summary'); // проверить наличие $I>click($planPage>viewButton); // использовать PageObject $I>see('plan'.sq(1).' Details', 'h1');
![Page 33: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/33.jpg)
ТАК ПОЧЕМУ ЖЕ CODECEPTION?
One tool to rule them allЕдиное API для модулейМодули, решающие 90% повседневных задач
![Page 34: Михаил Боднарчук: Особенности тестирования PHP проектов](https://reader030.vdocuments.mx/reader030/viewer/2022020119/58ec9ea41a28ab754e8b4651/html5/thumbnails/34.jpg)
СПАСИБО ЗА ВНИМАНИЕ
Меня зовут Михаил Боднарчук или @davert (вТвиттере) или @DavertMik (это на Гитхабе).
Если захотите узнать больше про Codeception, то этоочень даже несложно, просто посетите
.
А также я с радостью отвечу на ваши вопросы!
http://codeception.com