Михаил Боднарчук: Особенности тестирования php...

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

Upload: oleg-poludnenko

Post on 11-Apr-2017

424 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Михаил Боднарчук: Особенности тестирования PHP проектов

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

Page 2: Михаил Боднарчук: Особенности тестирования PHP проектов

ОБО МНЕ

Живу в КиевеВеб-разработчик: PHP, Rails, EmberJSРазрабатываю Codeception и другие прикольныепроекты

Page 3: Михаил Боднарчук: Особенности тестирования PHP проектов

ТЕСТИРОВАНИЕРучное vs Автоматизированое

Page 4: Михаил Боднарчук: Особенности тестирования PHP проектов

АВТОМАТИЗИРОВАНОЕ

Проверяет типичные сценарии взаимодействияОценивает работоспособность системы в текущиймомент времениСистема проверяется изнутри и снаружи

Page 5: Михаил Боднарчук: Особенности тестирования PHP проектов
Page 6: Михаил Боднарчук: Особенности тестирования PHP проектов

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 проектов
Page 8: Михаил Боднарчук: Особенности тестирования PHP проектов

КРИТЕРИИ ТЕСТОВ

ПокрытиеСкорость выполненияПоддержкаЧитабельность

Page 9: Михаил Боднарчук: Особенности тестирования PHP проектов

КТО ДОЛЖЕН ТЕСТИРОВАТЬ

ТестировщикиАвтоматизаторыРазработчикиВся командаВсевышний

Page 10: Михаил Боднарчук: Особенности тестирования PHP проектов

ПРИ ЧЕМ ТУТ РАЗРАБОТЧИКИ?

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

Page 11: Михаил Боднарчук: Особенности тестирования PHP проектов

ПОДМЕНА РЕАЛЬНОСТИ: UNIT

Fake, Dummy, Stub - формируют контекстMock, Spy - проверяют поведение

Page 12: Михаил Боднарчук: Особенности тестирования PHP проектов

ПОДМЕНА РЕАЛЬНОСТИ: INTEGRATION

Fixtures, Factories - вгрузка тестовых данных

Page 13: Михаил Боднарчук: Особенности тестирования PHP проектов

ПОДМЕНА РЕАЛЬНОСТИ: ACCEPTANCE

Использование API для создание/очистки данныхПерехват и тестирование отправки почты (Mailcatcher)

Page 14: Михаил Боднарчук: Особенности тестирования PHP проектов

СТРУКТУРА ТЕСТА

условиедействиепроверка (assertion)

Page 15: Михаил Боднарчук: Особенности тестирования PHP проектов

BEST PRACTICES

Отделить дополнительный код от тестаОтделить конфигурацию от тестаДелать тесты читабельными (и компактными)Выносить повторяющиеся данные/код в общие файлыПомнить о классах эквивалентности

Page 16: Михаил Боднарчук: Особенности тестирования PHP проектов

ЧТО ПЛОХО ТЕСТИРУЕТСЯ

Асинхронные запросыЗапросы к стронним сервисамРабота с реальными данными

Page 17: Михаил Боднарчук: Особенности тестирования PHP проектов

ЦЕНА ОШИБКИ И РЕГРЕССИОННЫЕ ТЕСТЫ

Page 18: Михаил Боднарчук: Особенности тестирования PHP проектов

BEHAVIOR DRIVEN DEVELOPMENT

Тесно связана с тестированиемОписывает менеджмент команды и комуникации сзаказчикомВсе должны говорить на одном языке

Page 19: Михаил Боднарчук: Особенности тестирования PHP проектов

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 проектов

BEHAVIOUR DRIVEN DEVELOPMENT IS ABOUTCONVERSATION NOT TOOLING

https://skillsmatter.com/skillscasts/5008-10-years-of-doing-bdd-all-wrong

Page 21: Михаил Боднарчук: Особенности тестирования PHP проектов

TEST DRIVEN DEVELOPMENT

Page 22: Михаил Боднарчук: Особенности тестирования PHP проектов

TDD || BDD || NULL

Тестирование != TDD || BDDВнедрение BDD зависит от менеджера и заказчикаВнедрение TDD зависит от команды разработчиков

Page 23: Михаил Боднарчук: Особенности тестирования PHP проектов

ПОКРЫТИЕ КОДА

Метрика указывающая наличие белых пятенСама по себе цифра отчета покрытия не представляетценностиНет смысла стремиться к 100% покрытию

Page 24: Михаил Боднарчук: Особенности тестирования PHP проектов

CONTINUOUS INTEGRATION

Автоматизирует запуск тестовМаксимально близкий к production средеПредоставляет отчет и динамику развития проекта

Page 25: Михаил Боднарчук: Особенности тестирования PHP проектов

ТЕСТОВЫЕФРЕЙМВОРКИ

Page 26: Михаил Боднарчук: Особенности тестирования PHP проектов

PHPUNIT

Старичок-толстячок, он же стандарт де-фактоМонолитностьДва движка для мокинга (почему не 3?)Отчеты в формате JUnit, HTML, ... и покрытие кодаИ ещё 100500 (малоиспользуемых) фич

Page 27: Михаил Боднарчук: Особенности тестирования PHP проектов

PHPSPEC

TDD фреймворкГенерация классов через тестОписание связей через мокиНе заменяет PHPUnitДля разработки, а не для тестирования

Page 28: Михаил Боднарчук: Особенности тестирования PHP проектов

BEHAT

BDD-фреймворкUbiquitous languageMink (Selenium, Goutte, etc)

Page 29: Михаил Боднарчук: Особенности тестирования PHP проектов

CODECEPTION

Page 30: Михаил Боднарчук: Особенности тестирования PHP проектов

КОМПОНЕНТЫ

PHPUnitSymfony Components (BrowserKit, DomCrawler)GuzzleWebDriverMink

Page 31: Михаил Боднарчук: Особенности тестирования PHP проектов

МОДУЛИ

PhpBrowserWebDriverФреймворки (Symfony2, Laravel, Yii)API: REST, SOAP, XML-RPCDb, Mongo, RedisОчереди: AMQP, Beanstalk, ...

Page 32: Михаил Боднарчук: Особенности тестирования PHP проектов

ПРИМЕР РЕАЛЬНОГО ТЕСТА<?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 1­1 of 1 result.','.summary'); // проверить наличие $I­>click($planPage­>viewButton); // использовать PageObject $I­>see('plan'.sq(1).' Details', 'h1');

Page 33: Михаил Боднарчук: Особенности тестирования PHP проектов

ТАК ПОЧЕМУ ЖЕ CODECEPTION?

One tool to rule them allЕдиное API для модулейМодули, решающие 90% повседневных задач

Page 34: Михаил Боднарчук: Особенности тестирования PHP проектов

СПАСИБО ЗА ВНИМАНИЕ

Меня зовут Михаил Боднарчук или @davert (вТвиттере) или @DavertMik (это на Гитхабе).

Если захотите узнать больше про Codeception, то этоочень даже несложно, просто посетите

.

А также я с радостью отвечу на ваши вопросы!

http://codeception.com