тестированием в Ozon Fintech • Работал в небольших стартапах и разного размера продуктовых компаниях • ПК Heisenbug • Уже рассказывал про Python • Heisenbug 2018 - Don’t repeat yourself: UI-тесты для веб, iOS и Android одновременно • Podlodka QA Crew - Бэкенд автотесты с нуля • QAASP - Подходы и Python инструментарий для тестирования API с пристрастием
тестированием в Ozon Fintech • Работал в небольших стартапах и разного размера продуктовых компаниях • ПК Heisenbug • Уже рассказывал про Python • Heisenbug 2018 - Don’t repeat yourself: UI-тесты для веб, iOS и Android одновременно • Podlodka QA Crew - Бэкенд автотесты с нуля • QAASP - Подходы и Python инструментарий для тестирования API с пристрастием • И не только: • Прошлогодний Ozon Tech QA Meetup • Инженерный vs Процессный подходы к тестированию
- старт разработки • Июль 2021 - первый QA инженер • Ноябрь 2021 - выход в прод с Ozon Счёт * https://corp.ozon.com/tpost/zmv8ylh991-ozon-launches-banking-service-for-entrep
- старт разработки • Июль 2021 - первый QA инженер • Ноябрь 2021 - выход в прод с Ozon Счёт • Январь 2022 - 1M+ пользователей * https://corp.ozon.com/tpost/zmv8ylh991-ozon-launches-banking-service-for-entrep
- старт разработки • Июль 2021 - первый QA инженер • Ноябрь 2021 - выход в прод с Ozon Счёт • Январь 2022 - 1M+ пользователей • Март 2022 - новая банковская лицензия • Июль 2022 - запуск Ozon Карты * https://corp.ozon.com/tpost/zmv8ylh991-ozon-launches-banking-service-for-entrep
- старт разработки • Июль 2021 - первый QA инженер • Ноябрь 2021 - выход в прод с Ozon Счёт • Январь 2022 - 1M+ пользователей • Март 2022 - новая банковская лицензия • Июль 2022 - запуск Ozon Карты • Ноябрь 2022 • 10.7М+ пользователей Ozon Карты* • 100+ микросервисов • От 200 до 350 релизов в неделю * https://corp.ozon.com/tpost/zmv8ylh991-ozon-launches-banking-service-for-entrep
обзор • Как устроен процесс тестирование • Какое место занимает автоматизация • Какую роль в этом занимает Python и почему • Разберем проблемы, которые возникали по мере запусков продуктов Ozon Банка и их решения
вещи могут быть сделаны по-другому • Завтра станет обязательно ещё больше и лучше • Платформа? • Банк Ozon живёт как стартап • А Ozon - это любящий родитель 18
появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами…
появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами… Прям всё?
появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами… Прям всё? По максимуму и быстро-о-о-о
появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами… Прям всё? По максимуму и быстро-о-о-о Вы того?.. Я с вами!
Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? • Ручное тестирование силами остальной команды? • Обновлять тест кейсы? 39
Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? • Ручное тестирование силами остальной команды? • Обновлять тест кейсы? • Что будет через 5 минут? 40
Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? • Ручное тестирование силами остальной команды? • Обновлять тест кейсы? • Что будет через 5 минут? • Роль автоматизации тестирования 41
• Быстрый фидбэк • Так дешевле • Может не в моменте • Предотвращать баги • Просто не пропускать в пайплайнах 47 https://martinfowler.com/articles/microservice-testing/
5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой • Стабильные • Бэк и веб блокируют пайплайн • Да, и веб • Разработка пишет пишет\поддерживает основную 90% тестов
5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой • Стабильные • Бэк и веб блокируют пайплайн • Да, и веб • Разработка пишет пишет\поддерживает основную 90% тестов • В MR’ах
тесты • Пользовательские сценарии, но на уровне API • Используем REST API, который использует web UI • Проверяем по максимуму через REST, если не хотим протягивать - то идём в gRPC 98
тесты • Пользовательские сценарии, но на уровне API • Используем REST API, который использует web UI • Проверяем по максимуму через REST, если не хотим протягивать - то идём в gRPC • Принципиально не ходим в базу 99
начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? • Много бэкенда? • На что смотрим • Контрактные тесты • Е2Е Web UI вместе с бэкендом? 114
начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? • Много бэкенда? • На что смотрим • Контрактные тесты • Е2Е Web UI вместе с бэкендом? • Пока выглядит, что обновлять схемы менее накладно 115
репозиторий • Любой сценарий затрагивает N сервисов • Один большой продукт • Когда-то выделим core\platform • Пока не болит • Можно поменять что-то из инфры вместе с тестами 122
репозиторий • Любой сценарий затрагивает N сервисов • Один большой продукт • Когда-то выделим core\platform • Пока не болит • Можно поменять что-то из инфры вместе с тестами • Нет недопонимания между core и product QA 123
• GitLab • Multi-project pipeline • Много триггеров • Resource group • Нельзя поменять в одном MR и код и тесты • Обратная совместимость • Долго • Тесты сценарные, меняем редко 133
Опора на пользовательские сценарии • Генерация тестовых данных • Моки • E2E - только то, что не поймать уровнями ниже • Для техдолга аналогично, просто чуть больнее
Опора на пользовательские сценарии • Генерация тестовых данных • Моки • E2E - только то, что не поймать уровнями ниже • Для техдолга аналогично, просто чуть больнее • Коммуникация со смежными QA командами
Потенциальная проблема нескольких микросервисов • Дежурства • Чиним • Помогаем понять, что пошло не так • Если что-то пропустили на стейджинг • Призываем дежурных из ответственной команды
тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности • Дежурные • Страдали как и все: чинили-договаривались • Code Review, Linters, прочая автоматизация и обмен знаниями • Чтобы все могли страдать-чинить
тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности • Дежурные • Страдали как и все: чинили-договаривались • Code Review, Linters, прочая автоматизация и обмен знаниями • Чтобы все могли страдать-чинить • И делать приложение лучше
• Pro fi t! • Смотрели что-то ещё? • pytest-parallel • Async • Проблемы с другими плагинами пайтеста • На синтетике +20% к скорости • Держим в уме, вернёмся
плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов • Запрос-ответ • curl \ gRPCurl • trace-id • Ссылки на системы с логами
плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов • Запрос-ответ • curl \ gRPCurl • trace-id • Ссылки на системы с логами • Всё чтобы могли разобраться без QA инженеров
ручки стали дольше отвечать • Работы на стейджинге • Надо поменять таймауты, параметры параллелизации • Отключить временно Allure • Особенности GitLab multi-project pipeline
ручки стали дольше отвечать • Работы на стейджинге • Надо поменять таймауты, параметры параллелизации • Отключить временно Allure • Особенности GitLab multi-project pipeline • И т.д.
фоновой джобой, которая забирает из Allure длительность тестов • По запросу отдаёт медиану времени прогона теста • Взяли хук pytest pytest_collection_modifyitems
фоновой джобой, которая забирает из Allure длительность тестов • По запросу отдаёт медиану времени прогона теста • Взяли хук pytest pytest_collection_modifyitems • Отсортировали предварительно тесты
фоновой джобой, которая забирает из Allure длительность тестов • По запросу отдаёт медиану времени прогона теста • Взяли хук pytest pytest_collection_modifyitems • Отсортировали предварительно тесты
самые долгие тесты • Они раскладываются параллельно • Приходят тесты побыстрее - они уже заполняют пустоты и распрделяются более равномерно • Не получится, что в каждом процессе прогналось 80% распределённых тестов
самые долгие тесты • Они раскладываются параллельно • Приходят тесты побыстрее - они уже заполняют пустоты и распрделяются более равномерно • Не получится, что в каждом процессе прогналось 80% распределённых тестов • Но в одном остались тесты по 1 секунде
самые долгие тесты • Они раскладываются параллельно • Приходят тесты побыстрее - они уже заполняют пустоты и распрделяются более равномерно • Не получится, что в каждом процессе прогналось 80% распределённых тестов • Но в одном остались тесты по 1 секунде • А в другом по 20 секунд
джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API
джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест
джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест • Таким образом мы узнаём какой тест попадает в какой сервис не только напрямую но и через другие сервисы
джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест • Таким образом мы узнаём какой тест попадает в какой сервис не только напрямую но и через другие сервисы • Перед запуском тестов идём с именем сервиса, для которого хотим запустить тесты
джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест • Таким образом мы узнаём какой тест попадает в какой сервис не только напрямую но и через другие сервисы • Перед запуском тестов идём с именем сервиса, для которого хотим запустить тесты • Запускаем только то, что действительно надо
инфраструктурные задачи мы делаем, чтобы: • Упростить жизнь разработчиков • Делать частые релизы • В пятницу вечером увидеть зелёные тесты и не бояться
инфраструктурные задачи мы делаем, чтобы: • Упростить жизнь разработчиков • Делать частые релизы • В пятницу вечером увидеть зелёные тесты и не бояться • Хотя бы за регресс =)