Upload
-
View
172
Download
1
Embed Size (px)
Citation preview
Боль №4: Testing
Минусы|ысюлП
Отсутствие автоматизированных тестов
Тестирование релиза отнимает много времени
• В ручном тестировании доминирует человеческий фактор: устал, забыл, забил, не подумал
• Тестируется не только релизный функционал, но и старый (регрессионное тестирование)
• Тест-кейсы очень редко фиксируются документально - тестирование не прозрачно и зависит от опыта тестировщика
Отсутствие модульных тестов
Сложно оценить адекватность алгоритмов и, следовательно, гарантировать их корректную работу
Юнит-тесты позволяют оценить область применимости и дают возможность экспериментировать с input/output
Отсутствие интеграционных тестов
SOA - это хорошо, но• Чем больше сервисов, тем сложнее отследить влияние каждого отдельного релиза на всю систему в целом
• Все компоненты системы чувствительны к изменениям API «соседей» и проблемы выявляются далеко не сразу
• Пример из жизни: новое оформление заказов на сайте сломало возврат онлайн-платежей в 1С, узнали об этом спустя месяц эксплуатации
Как будем тестировать?• Модульное тестирование - покроем юнит-тестами наиболее критичный функционал (все что связано с платежами, валидацией входных данных [адекватность бизнес-моделей])
• Интеграционное тестирование - покроем API фукнциональными тестами в полном соответствии с документацией
• PS: подробно о тестировании программного обеспечения
Какие инструменты нам потребуются?
• PHPUnit
• Codeception
• flow/jsonpath
• Jenkins
Подготовим Composer
Подготовим PHPUnit
• src/Enter/Core/Tests
• autoload.php.dist
• phpunit.xml.dist
Подготовим Codeception
• $ bin/codecept bootstrap
• codeception.yml
• tests/_bootstrap.php -> autoload.php.dist
• tests/functional.suite.yml [PhpBrowser, REST, Asserts]
• $ bin/codecept generate:cept functional Favorite
Простой пример: покрываем методы API по добавлению товаров в избранное
Jenkins и наш упрощенный gitflow• все, что попало в master готово к релизу
• <target name="build" depends="prepare,lint,phpcs,phpunit" description="Сборка проекта."/>
• fab tester deploy - если все ок, то отправляем эти изменения на preproduction
• bin/codecept build && bin/codecept run functional --steps - запускаем функциональные тесты на preproduction
[35;1mПротестировать интеграцию "Серверной корзины" и "Списка желаемых покупок".[39;22m (CartAndWishlistCept)
Scenario:
* I send post "/cart/flush", {...}
* I see response code is 200
* I send post "/wishlist/reset", {...}
…
Почему баги попадают в продуктив?!
тестируй за собой
Спасибо за внимание!
Есть вопросы?
Камиль Самигуллин какой-то разработчик
[email protected] @ikamilsk github.com/kamilsk