25

Enter: testing

  • Upload
    -

  • View
    172

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Enter: testing
Page 2: Enter: testing

Боль №4: Testing

Page 3: Enter: testing
Page 4: Enter: testing

Минусы|ысюлП

Page 5: Enter: testing

Отсутствие автоматизированных тестов

Page 6: Enter: testing

Тестирование релиза отнимает много времени

• В ручном тестировании доминирует человеческий фактор: устал, забыл, забил, не подумал

• Тестируется не только релизный функционал, но и старый (регрессионное тестирование)

• Тест-кейсы очень редко фиксируются документально - тестирование не прозрачно и зависит от опыта тестировщика

Page 7: Enter: testing

Отсутствие модульных тестов

Page 8: Enter: testing

Сложно оценить адекватность алгоритмов и, следовательно, гарантировать их корректную работу

Page 9: Enter: testing

Юнит-тесты позволяют оценить область применимости и дают возможность экспериментировать с input/output

Page 10: Enter: testing

Отсутствие интеграционных тестов

Page 11: Enter: testing

SOA - это хорошо, но• Чем больше сервисов, тем сложнее отследить влияние каждого отдельного релиза на всю систему в целом

• Все компоненты системы чувствительны к изменениям API «соседей» и проблемы выявляются далеко не сразу

• Пример из жизни: новое оформление заказов на сайте сломало возврат онлайн-платежей в 1С, узнали об этом спустя месяц эксплуатации

Page 12: Enter: testing

Как будем тестировать?• Модульное тестирование - покроем юнит-тестами наиболее критичный функционал (все что связано с платежами, валидацией входных данных [адекватность бизнес-моделей])

• Интеграционное тестирование - покроем API фукнциональными тестами в полном соответствии с документацией

• PS: подробно о тестировании программного обеспечения

Page 13: Enter: testing

Какие инструменты нам потребуются?

• PHPUnit

• Codeception

• flow/jsonpath

• Jenkins

Page 14: Enter: testing

Подготовим Composer

Page 15: Enter: testing

Подготовим PHPUnit

• src/Enter/Core/Tests

• autoload.php.dist

• phpunit.xml.dist

Page 16: Enter: testing

Подготовим 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

Page 17: Enter: testing

Простой пример: покрываем методы API по добавлению товаров в избранное

Page 18: Enter: testing
Page 19: Enter: testing
Page 20: Enter: testing
Page 21: Enter: testing

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", {...}

Page 22: Enter: testing

Почему баги попадают в продуктив?!

Page 23: Enter: testing
Page 24: Enter: testing

тестируй за собой

Page 25: Enter: testing

Спасибо за внимание!

Есть вопросы?

Камиль Самигуллин какой-то разработчик

[email protected] @ikamilsk github.com/kamilsk