Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Игорь Балагуров — Инфраструктура тестирования д...

Ozon Tech
January 18, 2023

Игорь Балагуров — Инфраструктура тестирования для API-тестов на Python

Ozon Tech

January 18, 2023
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. И почему меня нужно слушать? Кто я? 2 • Руковожу

    тестированием в Ozon Fintech • Работал в небольших стартапах и разного размера продуктовых компаниях
  2. И почему меня нужно слушать? Кто я? 3 • Руковожу

    тестированием в Ozon Fintech • Работал в небольших стартапах и разного размера продуктовых компаниях • ПК Heisenbug
  3. И почему меня нужно слушать? Кто я? 4 • Руковожу

    тестированием в Ozon Fintech • Работал в небольших стартапах и разного размера продуктовых компаниях • ПК Heisenbug • Уже рассказывал про Python • Heisenbug 2018 - Don’t repeat yourself: UI-тесты для веб, iOS и Android одновременно • Podlodka QA Crew - Бэкенд автотесты с нуля • QAASP - Подходы и Python инструментарий для тестирования API с пристрастием
  4. И почему меня нужно слушать? Кто я? 5 • Руковожу

    тестированием в Ozon Fintech • Работал в небольших стартапах и разного размера продуктовых компаниях • ПК Heisenbug • Уже рассказывал про Python • Heisenbug 2018 - Don’t repeat yourself: UI-тесты для веб, iOS и Android одновременно • Podlodka QA Crew - Бэкенд автотесты с нуля • QAASP - Подходы и Python инструментарий для тестирования API с пристрастием • И не только: • Прошлогодний Ozon Tech QA Meetup • Инженерный vs Процессный подходы к тестированию
  5. Банк Ozon На основе какого опыта 6 • Май 2021

    - старт разработки • Июль 2021 - первый QA инженер • Ноябрь 2021 - выход в прод с Ozon Счёт * https://corp.ozon.com/tpost/zmv8ylh991-ozon-launches-banking-service-for-entrep
  6. Банк Ozon На основе какого опыта 7 • Май 2021

    - старт разработки • Июль 2021 - первый QA инженер • Ноябрь 2021 - выход в прод с Ozon Счёт • Январь 2022 - 1M+ пользователей * https://corp.ozon.com/tpost/zmv8ylh991-ozon-launches-banking-service-for-entrep
  7. Банк Ozon На основе какого опыта 8 • Май 2021

    - старт разработки • Июль 2021 - первый QA инженер • Ноябрь 2021 - выход в прод с Ozon Счёт • Январь 2022 - 1M+ пользователей • Март 2022 - новая банковская лицензия • Июль 2022 - запуск Ozon Карты * https://corp.ozon.com/tpost/zmv8ylh991-ozon-launches-banking-service-for-entrep
  8. Банк Ozon На основе какого опыта 9 • Май 2021

    - старт разработки • Июль 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
  9. Кому это будет интересно? Что сегодня будет? 11 • Это

    обзор • Как устроен процесс тестирование
  10. Кому это будет интересно? Что сегодня будет? 12 • Это

    обзор • Как устроен процесс тестирование • Какое место занимает автоматизация
  11. Кому это будет интересно? Что сегодня будет? 13 • Это

    обзор • Как устроен процесс тестирование • Какое место занимает автоматизация • Какую роль в этом занимает Python и почему
  12. Кому это будет интересно? Что сегодня будет? 14 • Это

    обзор • Как устроен процесс тестирование • Какое место занимает автоматизация • Какую роль в этом занимает Python и почему • Разберем проблемы, которые возникали по мере запусков продуктов Ozon Банка и их решения
  13. Я бы рад, но… Дисклеймер • Ozon большой • Какие-то

    вещи могут быть сделаны по-другому 15
  14. Я бы рад, но… Дисклеймер • Ozon большой • Какие-то

    вещи могут быть сделаны по-другому • Завтра станет обязательно ещё больше и лучше • Платформа? 16
  15. Я бы рад, но… Дисклеймер • Ozon большой • Какие-то

    вещи могут быть сделаны по-другому • Завтра станет обязательно ещё больше и лучше • Платформа? • Банк Ozon живёт как стартап 17
  16. Я бы рад, но… Дисклеймер • Ozon большой • Какие-то

    вещи могут быть сделаны по-другому • Завтра станет обязательно ещё больше и лучше • Платформа? • Банк Ozon живёт как стартап • А Ozon - это любящий родитель 18
  17. банк ozon начало Контекст 19 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля
  18. банк ozon начало Контекст 20 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод?
  19. банк ozon начало Контекст 21 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре
  20. банк ozon начало Контекст 22 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом?
  21. банк ozon начало Контекст 23 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами…
  22. банк ozon начало Контекст 24 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами… Прям всё?
  23. банк ozon начало Контекст 25 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами… Прям всё? По максимуму и быстро-о-о-о
  24. банк ozon начало Контекст 26 Игорь, у нас в апреле

    появился банк, первые разработчики в мае, там нет ничего, мы хотим всё написать с нуля Когда хотите в прод? В ноябре Каким образом? Быстро нанимаем, пишем, покрываем автотестами… Прям всё? По максимуму и быстро-о-о-о Вы того?.. Я с вами!
  25. А потому красив План прост • Продуктивность разработки и тестирования

    • Частые релизы • Не ломать функциональность, которой уже пользуются 29
  26. Что это значит для тестирования Частые релизы • Не быть

    бутылочным горлышком • Quality Assistance 31
  27. Что это значит для тестирования Частые релизы • Не быть

    бутылочным горлышком • Quality Assistance • Кейсы • Пирамида • Инструменты 32
  28. Что это значит для тестирования Частые релизы • Не быть

    бутылочным горлышком • Quality Assistance • Кейсы • Пирамида • Инструменты • Инфраструктура должна помогать 33
  29. Что это значит для тестирования Частые релизы • Не быть

    бутылочным горлышком • Quality Assistance • Кейсы • Пирамида • Инструменты • Инфраструктура должна помогать • Устранять конкретные ограничения 34
  30. Что это значит для тестирования Частые релизы • Не быть

    бутылочным горлышком • Quality Assistance • Кейсы • Пирамида • Инструменты • Инфраструктура должна помогать • Устранять конкретные ограничения • Кейс-решение 35
  31. При частых релизах Не ломать функциональность, которой уже пользуются •

    Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? 37
  32. При частых релизах Не ломать функциональность, которой уже пользуются •

    Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? • Ручное тестирование силами остальной команды? 38
  33. При частых релизах Не ломать функциональность, которой уже пользуются •

    Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? • Ручное тестирование силами остальной команды? • Обновлять тест кейсы? 39
  34. При частых релизах Не ломать функциональность, которой уже пользуются •

    Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? • Ручное тестирование силами остальной команды? • Обновлять тест кейсы? • Что будет через 5 минут? 40
  35. При частых релизах Не ломать функциональность, которой уже пользуются •

    Микросервисы релизятся независимо • Ручное тестирование силами QA инженеров? • Ручное тестирование силами остальной команды? • Обновлять тест кейсы? • Что будет через 5 минут? • Роль автоматизации тестирования 41
  36. Строительство пирамиды • Поймать баг в месте, где могут сломать

    • Быстрый фидбэк 43 https://martinfowler.com/articles/microservice-testing/
  37. Строительство пирамиды • Поймать баг в месте, где могут сломать

    • Быстрый фидбэк • Так дешевле 44 https://martinfowler.com/articles/microservice-testing/
  38. Строительство пирамиды • Поймать баг в месте, где могут сломать

    • Быстрый фидбэк • Так дешевле • Может не в моменте 45 https://martinfowler.com/articles/microservice-testing/
  39. Строительство пирамиды • Поймать баг в месте, где могут сломать

    • Быстрый фидбэк • Так дешевле • Может не в моменте • Предотвращать баги 46 https://martinfowler.com/articles/microservice-testing/
  40. Строительство пирамиды • Поймать баг в месте, где могут сломать

    • Быстрый фидбэк • Так дешевле • Может не в моменте • Предотвращать баги • Просто не пропускать в пайплайнах 47 https://martinfowler.com/articles/microservice-testing/
  41. Нативный cтэк для тестирования 53 Это как? • Единые с

    разработкой • Язык • Репозиторий
  42. Нативный cтэк для тестирования 54 Это как? • Единые с

    разработкой • Язык • Репозиторий • Пайплайн
  43. Что делаем на Go • Естественно юнит тесты • Компонентные

    тесты на бэкенд • Handler + DB • Внешние вызовы на моках 58
  44. Что делаем на Go • Естественно юнит тесты • Компонентные

    тесты на бэкенд • Handler + DB • Внешние вызовы на моках • Stdlib 59
  45. А ещё? Что делаем на Go • Пишем сервисы для

    тестирования • QA API (генерация тестовых данных) 61
  46. А ещё? Что делаем на Go • Пишем сервисы для

    тестирования • QA API (генерация тестовых данных) • Сервисы-моки 62
  47. А ещё? Что делаем на Go • Пишем сервисы для

    тестирования • QA API (генерация тестовых данных) • Сервисы-моки • Покрытие юнитами и компонентными 63
  48. А ещё? Что делаем на Go • Пишем сервисы для

    тестирования • QA API (генерация тестовых данных) • Сервисы-моки • Покрытие юнитами и компонентными • Нагрузка • Pandora 64
  49. Резюмируем Что делаем на Go • Следим за пирамидой •

    Юнит тесты • Компонентные тесты • Смотрим на покрытие 65
  50. Резюмируем Что делаем на Go • Следим за пирамидой •

    Юнит тесты • Компонентные тесты • Смотрим на покрытие • Помогаем эффективно тестировать • Генерация тестовых данных • Сервисы-моки • Прочие сервисы для тестирования 66
  51. Резюмируем Что делаем на Go • Следим за пирамидой •

    Юнит тесты • Компонентные тесты • Смотрим на покрытие • Помогаем эффективно тестировать • Генерация тестовых данных • Сервисы-моки • Прочие сервисы для тестирования • Нагрузка 67
  52. Что делаем на TypeScript • Пишем тесты на фронт •

    На моках бэкенда • Playwright • 3 основных браузерных движка • Chromium • Gecko • Webkit 71
  53. Что делаем на TypeScript • Пишем тесты на фронт •

    На моках бэкенда • Playwright • 3 основных браузерных движка • Chromium • Gecko • Webkit • Mobile web 72
  54. Что делаем на TypeScript • Пишем тесты на фронт •

    На моках бэкенда • Playwright • 3 основных браузерных движка • Chromium • Gecko • Webkit • Mobile web • Web view 73
  55. Отдельные приложения Android + iOS • Kaspresso, XCTest • Нативные

    фичи • Идём в сторону моков • Много web view 76
  56. Отдельные приложения Android + iOS • Kaspresso, XCTest • Нативные

    фичи • Идём в сторону моков • Много web view • Python + Appium 77
  57. Нативный cтэк 81 Что получилось? • Тесты быстрые • До

    5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой
  58. Нативный cтэк 82 Что получилось? • Тесты быстрые • До

    5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой • Стабильные
  59. Нативный cтэк 83 Что получилось? • Тесты быстрые • До

    5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой • Стабильные • Бэк и веб блокируют пайплайн
  60. Нативный cтэк 84 Что получилось? • Тесты быстрые • До

    5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой • Стабильные • Бэк и веб блокируют пайплайн • Да, и веб
  61. Нативный cтэк 85 Что получилось? • Тесты быстрые • До

    5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой • Стабильные • Бэк и веб блокируют пайплайн • Да, и веб • Разработка пишет пишет\поддерживает основную 90% тестов
  62. Нативный cтэк 86 Что получилось? • Тесты быстрые • До

    5 минут, веб • Бэк ещё быстрее • С мобилками сложнее-дольше • Но и релизный цикл другой • Стабильные • Бэк и веб блокируют пайплайн • Да, и веб • Разработка пишет пишет\поддерживает основную 90% тестов • В MR’ах
  63. Что забыли? Чего не хватает? 91 • Микросервисы протестировали все

    отдельно • А бэкенд в сборе? • Веб протестировали отдельно
  64. Что забыли? Чего не хватает? 92 • Микросервисы протестировали все

    отдельно • А бэкенд в сборе? • Веб протестировали отдельно • А вместе с бэкендом? • А моки обновить?
  65. Что забыли? Чего не хватает? 93 • Микросервисы протестировали все

    отдельно • А бэкенд в сборе? • Веб протестировали отдельно • А вместе с бэкендом? • А моки обновить? • А мобилку не сломать?
  66. Бэкенд в сборе Что делаем на Python • E2E API

    тесты • Пользовательские сценарии, но на уровне API 96
  67. Бэкенд в сборе Что делаем на Python • E2E API

    тесты • Пользовательские сценарии, но на уровне API • Используем REST API, который использует web UI 97
  68. Бэкенд в сборе Что делаем на Python • E2E API

    тесты • Пользовательские сценарии, но на уровне API • Используем REST API, который использует web UI • Проверяем по максимуму через REST, если не хотим протягивать - то идём в gRPC 98
  69. Бэкенд в сборе Что делаем на Python • E2E API

    тесты • Пользовательские сценарии, но на уровне API • Используем REST API, который использует web UI • Проверяем по максимуму через REST, если не хотим протягивать - то идём в gRPC • Принципиально не ходим в базу 99
  70. Вместе с вебом? Что делаем на Python • E2E API

    тесты • Схемы ответов • Cerberus 102
  71. Вместе с вебом? Что делаем на Python • E2E API

    тесты • Схемы ответов • Cerberus • Обратно несовместимое изменение: 103
  72. Вместе с вебом? Что делаем на Python • E2E API

    тесты • Схемы ответов • Cerberus • Обратно несовместимое изменение: • Упали тесты 104
  73. Вместе с вебом? Что делаем на Python • E2E API

    тесты • Схемы ответов • Cerberus • Обратно несовместимое изменение: • Упали тесты • Договорились бэк и фронт 105
  74. Вместе с вебом? Что делаем на Python • E2E API

    тесты • Схемы ответов • Cerberus • Обратно несовместимое изменение: • Упали тесты • Договорились бэк и фронт • Обновили тесты 106
  75. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты 108
  76. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты • Но пока не пришлось =) 109
  77. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? 110
  78. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? • Много бэкенда? 111
  79. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? • Много бэкенда? • На что смотрим 112
  80. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? • Много бэкенда? • На что смотрим • Контрактные тесты 113
  81. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? • Много бэкенда? • На что смотрим • Контрактные тесты • Е2Е Web UI вместе с бэкендом? 114
  82. Так просто? E2E API тесты на Python • Мы планировали

    начать писать ещё какие-то тесты • Но пока не пришлось =) • Может нам повезло? • Много бэкенда? • На что смотрим • Контрактные тесты • Е2Е Web UI вместе с бэкендом? • Пока выглядит, что обновлять схемы менее накладно 115
  83. Не так просто E2E API тесты на Python • Отдельный

    репозиторий • Любой сценарий затрагивает N сервисов 118
  84. Не так просто E2E API тесты на Python • Отдельный

    репозиторий • Любой сценарий затрагивает N сервисов • Один большой продукт 119
  85. Не так просто E2E API тесты на Python • Отдельный

    репозиторий • Любой сценарий затрагивает N сервисов • Один большой продукт • Когда-то выделим core\platform 120
  86. Не так просто E2E API тесты на Python • Отдельный

    репозиторий • Любой сценарий затрагивает N сервисов • Один большой продукт • Когда-то выделим core\platform • Пока не болит 121
  87. Не так просто E2E API тесты на Python • Отдельный

    репозиторий • Любой сценарий затрагивает N сервисов • Один большой продукт • Когда-то выделим core\platform • Пока не болит • Можно поменять что-то из инфры вместе с тестами 122
  88. Не так просто E2E API тесты на Python • Отдельный

    репозиторий • Любой сценарий затрагивает N сервисов • Один большой продукт • Когда-то выделим core\platform • Пока не болит • Можно поменять что-то из инфры вместе с тестами • Нет недопонимания между core и product QA 123
  89. Не так просто E2E API тесты на Python • CI

    • GitLab • Multi-project pipeline 127
  90. Не так просто E2E API тесты на Python • CI

    • GitLab • Multi-project pipeline • Много триггеров 128
  91. Не так просто E2E API тесты на Python • CI

    • GitLab • Multi-project pipeline • Много триггеров • Resource group 129
  92. Не так просто E2E API тесты на Python • CI

    • GitLab • Multi-project pipeline • Много триггеров • Resource group • Нельзя поменять в одном MR и код и тесты 130
  93. Не так просто E2E API тесты на Python • CI

    • GitLab • Multi-project pipeline • Много триггеров • Resource group • Нельзя поменять в одном MR и код и тесты • Обратная совместимость 131
  94. Не так просто E2E API тесты на Python • CI

    • GitLab • Multi-project pipeline • Много триггеров • Resource group • Нельзя поменять в одном MR и код и тесты • Обратная совместимость • Долго 132
  95. Не так просто E2E API тесты на Python • CI

    • GitLab • Multi-project pipeline • Много триггеров • Resource group • Нельзя поменять в одном MR и код и тесты • Обратная совместимость • Долго • Тесты сценарные, меняем редко 133
  96. Но почему Python??? E2E API тесты на Python • Отдельный

    репозиторий • Найм • Обучение 137
  97. Но почему Python??? E2E API тесты на Python • Отдельный

    репозиторий • Найм • Обучение • Stdlib 138
  98. Но почему Python??? E2E API тесты на Python • Отдельный

    репозиторий • Найм • Обучение • Stdlib • Внешние библиотеки 139
  99. Но почему Python??? E2E API тесты на Python • Отдельный

    репозиторий • Найм • Обучение • Stdlib • Внешние библиотеки • Скорость написания тестов 140
  100. Но почему Python??? E2E API тесты на Python • Отдельный

    репозиторий • Найм • Обучение • Stdlib • Внешние библиотеки • Скорость написания тестов • Отсутствие типизации? 141
  101. Но почему Python??? E2E API тесты на Python • Отдельный

    репозиторий • Найм • Обучение • Stdlib • Внешние библиотеки • Скорость написания тестов • Отсутствие типизации? • Отсутствие компиляции 142
  102. Testability Процессы 146 • QA Kick-off для новой фичи •

    Опора на пользовательские сценарии
  103. Testability Процессы 147 • QA Kick-off для новой фичи •

    Опора на пользовательские сценарии • Генерация тестовых данных
  104. Testability Процессы 148 • QA Kick-off для новой фичи •

    Опора на пользовательские сценарии • Генерация тестовых данных • Моки
  105. Testability Процессы 149 • QA Kick-off для новой фичи •

    Опора на пользовательские сценарии • Генерация тестовых данных • Моки • E2E - только то, что не поймать уровнями ниже
  106. Testability Процессы 150 • QA Kick-off для новой фичи •

    Опора на пользовательские сценарии • Генерация тестовых данных • Моки • E2E - только то, что не поймать уровнями ниже • Для техдолга аналогично, просто чуть больнее
  107. Testability Процессы 151 • QA Kick-off для новой фичи •

    Опора на пользовательские сценарии • Генерация тестовых данных • Моки • E2E - только то, что не поймать уровнями ниже • Для техдолга аналогично, просто чуть больнее • Коммуникация со смежными QA командами
  108. Работа над стабильностью Процессы 154 • Падающий E2E тест •

    Потенциальная проблема нескольких микросервисов
  109. Работа над стабильностью Процессы 155 • Падающий E2E тест •

    Потенциальная проблема нескольких микросервисов • Дежурства
  110. Работа над стабильностью Процессы 156 • Падающий E2E тест •

    Потенциальная проблема нескольких микросервисов • Дежурства • Чиним
  111. Работа над стабильностью Процессы 157 • Падающий E2E тест •

    Потенциальная проблема нескольких микросервисов • Дежурства • Чиним • Помогаем понять, что пошло не так
  112. Работа над стабильностью Процессы 158 • Падающий E2E тест •

    Потенциальная проблема нескольких микросервисов • Дежурства • Чиним • Помогаем понять, что пошло не так • Если что-то пропустили на стейджинг
  113. Работа над стабильностью Процессы 159 • Падающий E2E тест •

    Потенциальная проблема нескольких микросервисов • Дежурства • Чиним • Помогаем понять, что пошло не так • Если что-то пропустили на стейджинг • Призываем дежурных из ответственной команды
  114. В нашей версии Кто такой QA инженер, использующий Python 160

    • Тестировщик • Автоматизатор • Немного менеджер
  115. Не буду сильно останавливаться Очевидные вещи 167 • Для стабильных\быстрых

    тестов: • Независимые данные • QA API • Sleep • Поллинг
  116. Не буду сильно останавливаться Очевидные вещи 168 • Для стабильных\быстрых

    тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности
  117. Не буду сильно останавливаться Очевидные вещи 169 • Для стабильных\быстрых

    тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности • Дежурные
  118. Не буду сильно останавливаться Очевидные вещи 170 • Для стабильных\быстрых

    тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности • Дежурные • Страдали как и все: чинили-договаривались
  119. Не буду сильно останавливаться Очевидные вещи 171 • Для стабильных\быстрых

    тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности • Дежурные • Страдали как и все: чинили-договаривались • Code Review, Linters, прочая автоматизация и обмен знаниями
  120. Не буду сильно останавливаться Очевидные вещи 172 • Для стабильных\быстрых

    тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности • Дежурные • Страдали как и все: чинили-договаривались • Code Review, Linters, прочая автоматизация и обмен знаниями • Чтобы все могли страдать-чинить
  121. Не буду сильно останавливаться Очевидные вещи 173 • Для стабильных\быстрых

    тестов: • Независимые данные • QA API • Sleep • Поллинг • Чинить нестабильности • Дежурные • Страдали как и все: чинили-договаривались • Code Review, Linters, прочая автоматизация и обмен знаниями • Чтобы все могли страдать-чинить • И делать приложение лучше
  122. Нужно больше процессов Быстрее 180 • pytest-xdist • Побольше процессов

    • Pro fi t! • Смотрели что-то ещё? • pytest-parallel • Async
  123. Нужно больше процессов Быстрее 181 • pytest-xdist • Побольше процессов

    • Pro fi t! • Смотрели что-то ещё? • pytest-parallel • Async • Проблемы с другими плагинами пайтеста
  124. Нужно больше процессов Быстрее 182 • pytest-xdist • Побольше процессов

    • Pro fi t! • Смотрели что-то ещё? • pytest-parallel • Async • Проблемы с другими плагинами пайтеста • На синтетике +20% к скорости
  125. Нужно больше процессов Быстрее 183 • pytest-xdist • Побольше процессов

    • Pro fi t! • Смотрели что-то ещё? • pytest-parallel • Async • Проблемы с другими плагинами пайтеста • На синтетике +20% к скорости • Держим в уме, вернёмся
  126. И почему? Что упало? 187 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка
  127. И почему? Что упало? 188 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps
  128. И почему? Что упало? 189 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов
  129. И почему? Что упало? 190 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов • Запрос-ответ
  130. И почему? Что упало? 191 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов • Запрос-ответ • curl \ gRPCurl
  131. И почему? Что упало? 192 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов • Запрос-ответ • curl \ gRPCurl • trace-id
  132. И почему? Что упало? 193 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов • Запрос-ответ • curl \ gRPCurl • trace-id • Ссылки на системы с логами
  133. И почему? Что упало? 194 • Allure • GitLab, нет

    плагина • Свой небольшой сервис-отчётохранилка • Allure TestOps • Пишем описания тестов • Запрос-ответ • curl \ gRPCurl • trace-id • Ссылки на системы с логами • Всё чтобы могли разобраться без QA инженеров
  134. Зачем? Внешняя конфигурация 199 • Стейдж перестал справляться • Отдельные

    ручки стали дольше отвечать • Работы на стейджинге
  135. Зачем? Внешняя конфигурация 200 • Стейдж перестал справляться • Отдельные

    ручки стали дольше отвечать • Работы на стейджинге • Надо поменять таймауты, параметры параллелизации
  136. Зачем? Внешняя конфигурация 201 • Стейдж перестал справляться • Отдельные

    ручки стали дольше отвечать • Работы на стейджинге • Надо поменять таймауты, параметры параллелизации • Отключить временно Allure
  137. Зачем? Внешняя конфигурация 202 • Стейдж перестал справляться • Отдельные

    ручки стали дольше отвечать • Работы на стейджинге • Надо поменять таймауты, параметры параллелизации • Отключить временно Allure • Особенности GitLab multi-project pipeline
  138. Зачем? Внешняя конфигурация 203 • Стейдж перестал справляться • Отдельные

    ручки стали дольше отвечать • Работы на стейджинге • Надо поменять таймауты, параметры параллелизации • Отключить временно Allure • Особенности GitLab multi-project pipeline • И т.д.
  139. Разметка тестов Запускать то, что надо 206 • Pytest mark

    • Переменная с именем репозитория
  140. Разметка тестов Запускать то, что надо 207 • Pytest mark

    • Переменная с именем репозитория • Словарь: репозиторий - марки
  141. Разметка тестов Запускать то, что надо 208 • Pytest mark

    • Переменная с именем репозитория • Словарь: репозиторий - марки • Pro fi t!
  142. Разметка тестов Запускать то, что надо 209 • Pytest mark

    • Переменная с именем репозитория • Словарь: репозиторий - марки • Pro fi t! • Супер очевидно
  143. Разметка тестов Запускать то, что надо 210 • Pytest mark

    • Переменная с именем репозитория • Словарь: репозиторий - марки • Pro fi t! • Супер очевидно • Ещё вернёмся
  144. Больше потоков уже добавляли Хочется побыстрее 214 • Смотрим Allure

    Timeline • Видим хвост • Иногда - это 50% и больше времени прогона
  145. Что сделали? Хочется побыстрее 216 • Сервис =) • С

    фоновой джобой, которая забирает из Allure длительность тестов
  146. Что сделали? Хочется побыстрее 217 • Сервис =) • С

    фоновой джобой, которая забирает из Allure длительность тестов • По запросу отдаёт медиану времени прогона теста
  147. Что сделали? Хочется побыстрее 218 • Сервис =) • С

    фоновой джобой, которая забирает из Allure длительность тестов • По запросу отдаёт медиану времени прогона теста • Взяли хук pytest pytest_collection_modifyitems
  148. Что сделали? Хочется побыстрее 219 • Сервис =) • С

    фоновой джобой, которая забирает из Allure длительность тестов • По запросу отдаёт медиану времени прогона теста • Взяли хук pytest pytest_collection_modifyitems • Отсортировали предварительно тесты
  149. Что сделали? Хочется побыстрее 220 • Сервис =) • С

    фоновой джобой, которая забирает из Allure длительность тестов • По запросу отдаёт медиану времени прогона теста • Взяли хук pytest pytest_collection_modifyitems • Отсортировали предварительно тесты
  150. Как это работает? Хочется побыстрее 224 • В начале берутся

    самые долгие тесты • Они раскладываются параллельно
  151. Как это работает? Хочется побыстрее 225 • В начале берутся

    самые долгие тесты • Они раскладываются параллельно • Приходят тесты побыстрее - они уже заполняют пустоты и распрделяются более равномерно
  152. Как это работает? Хочется побыстрее 226 • В начале берутся

    самые долгие тесты • Они раскладываются параллельно • Приходят тесты побыстрее - они уже заполняют пустоты и распрделяются более равномерно • Не получится, что в каждом процессе прогналось 80% распределённых тестов
  153. Как это работает? Хочется побыстрее 227 • В начале берутся

    самые долгие тесты • Они раскладываются параллельно • Приходят тесты побыстрее - они уже заполняют пустоты и распрделяются более равномерно • Не получится, что в каждом процессе прогналось 80% распределённых тестов • Но в одном остались тесты по 1 секунде
  154. Как это работает? Хочется побыстрее 228 • В начале берутся

    самые долгие тесты • Они раскладываются параллельно • Приходят тесты побыстрее - они уже заполняют пустоты и распрделяются более равномерно • Не получится, что в каждом процессе прогналось 80% распределённых тестов • Но в одном остались тесты по 1 секунде • А в другом по 20 секунд
  155. Что дало? Хочется побыстрее 231 • 30-40% ускорения в 80%

    пайплайнов • Более предсказуемое время выполнения тестов
  156. В чём проблема Только то, что надо, дубль 2 234

    • Ручная разметка марками тестов устаревает
  157. В чём проблема Только то, что надо, дубль 2 235

    • Ручная разметка марками тестов устаревает • Разметить 1000+ тестов по 100 сервисам и поддерживать дорого
  158. В чём проблема Только то, что надо, дубль 2 236

    • Ручная разметка марками тестов устаревает • Разметить 1000+ тестов по 100 сервисам и поддерживать дорого • Можно ли как-то это автоматизировать?
  159. Идея Только то, что надо, дубль 2 239 • У

    нас же есть трейсы * https://habr.com/ru/company/ozontech/blog/708274/
  160. Концепция Только то, что надо, дубль 2 241 • Добавляем

    джобу в гитлаб, которая достаёт trace-id после прогона тестов
  161. Концепция Только то, что надо, дубль 2 242 • Добавляем

    джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста
  162. Концепция Только то, что надо, дубль 2 243 • Добавляем

    джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API
  163. Концепция Только то, что надо, дубль 2 244 • Добавляем

    джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест
  164. Концепция Только то, что надо, дубль 2 245 • Добавляем

    джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест • Таким образом мы узнаём какой тест попадает в какой сервис не только напрямую но и через другие сервисы
  165. Концепция Только то, что надо, дубль 2 246 • Добавляем

    джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест • Таким образом мы узнаём какой тест попадает в какой сервис не только напрямую но и через другие сервисы • Перед запуском тестов идём с именем сервиса, для которого хотим запустить тесты
  166. Концепция Только то, что надо, дубль 2 247 • Добавляем

    джобу в гитлаб, которая достаёт trace-id после прогона тестов • Отправляем trace-id в сервис, вместе с указание имени теста • В сервисе воркер, он ходит в Jaeger API • Воркер парсит трейсы и строит связь сервис-тест • Таким образом мы узнаём какой тест попадает в какой сервис не только напрямую но и через другие сервисы • Перед запуском тестов идём с именем сервиса, для которого хотим запустить тесты • Запускаем только то, что действительно надо
  167. Edge cases Только то, что надо, дубль 2 249 •

    Появился новый тест, который не отдал сервис
  168. Edge cases Только то, что надо, дубль 2 250 •

    Появился новый тест, который не отдал сервис • В какой-то сервис нет тестов
  169. Edge cases Только то, что надо, дубль 2 251 •

    Появился новый тест, который не отдал сервис • В какой-то сервис нет тестов • Отключить на время
  170. Edge cases Только то, что надо, дубль 2 252 •

    Появился новый тест, который не отдал сервис • В какой-то сервис нет тестов • Отключить на время • Асинхронное взаимодействие
  171. Реализация Только то, что надо, дубль 2 255 • Получили

    список тестов • Pytest хук pytest_collection_modifyitems
  172. Реализация Только то, что надо, дубль 2 256 • Получили

    список тестов • Pytest хук pytest_collection_modifyitems • Проставляем специальную марку (to_be_launched)
  173. Реализация Только то, что надо, дубль 2 257 • Получили

    список тестов • Pytest хук pytest_collection_modifyitems • Проставляем специальную марку (to_be_launched) • Обернули в скрипт, запуск pytest программно
  174. Реализация Только то, что надо, дубль 2 258 • Получили

    список тестов • Pytest хук pytest_collection_modifyitems • Проставляем специальную марку (to_be_launched) • Обернули в скрипт, запуск pytest программно • Добавить дополнительные марки
  175. Реализация Только то, что надо, дубль 2 259 • Получили

    список тестов • Pytest хук pytest_collection_modifyitems • Проставляем специальную марку (to_be_launched) • Обернули в скрипт, запуск pytest программно • Добавить дополнительные марки • Например, форсированные ручные
  176. Реализация Только то, что надо, дубль 2 260 • Получили

    список тестов • Pytest хук pytest_collection_modifyitems • Проставляем специальную марку (to_be_launched) • Обернули в скрипт, запуск pytest программно • Добавить дополнительные марки • Например, форсированные ручные • Запустить
  177. Что получили Только то, что надо, дубль 2 262 •

    В половине сервисов уменьшили количество тестов в 2 раза и более
  178. Что получили Только то, что надо, дубль 2 263 •

    В половине сервисов уменьшили количество тестов в 2 раза и более • Скорость • Стабильность
  179. Что получили Только то, что надо, дубль 2 264 •

    В половине сервисов уменьшили количество тестов в 2 раза и более • Скорость • Стабильность • Не тратим время на обновление марок
  180. Что получили Только то, что надо, дубль 2 265 •

    В половине сервисов уменьшили количество тестов в 2 раза и более • Скорость • Стабильность • Не тратим время на обновление марок
  181. Технические мелочи Подходы 269 • 10% упавших тестов - роняет

    джобу • Таймаут на джобу 20 минут • Есть возможность запустить только упавшие\незапустившиеся тесты из джобы
  182. Технические мелочи Подходы 270 • 10% упавших тестов - роняет

    джобу • Таймаут на джобу 20 минут • Есть возможность запустить только упавшие\незапустившиеся тесты из джобы • Быстрая обратная связь
  183. Что получилось? 273 • Ноябрь 2022 Банк Ozon • 100+

    микросервисов • 100+ разработчиков
  184. Что получилось? 274 • Ноябрь 2022 Банк Ozon • 100+

    микросервисов • 100+ разработчиков • Стали делать от 200 до 350 релизов в неделю
  185. Что получилось? 275 • Ноябрь 2022 Банк Ozon • 100+

    микросервисов • 100+ разработчиков • Стали делать от 200 до 350 релизов в неделю • E2E API тесты запускаются до 100 раз в день
  186. Процесс местами сложнее, чем техническая реализация Сложности 278 • Надо

    погрузить команду • Люди привыкают дольше железок
  187. Процесс местами сложнее, чем техническая реализация Сложности 279 • Надо

    погрузить команду • Люди привыкают дольше железок • Не типично
  188. Процесс местами сложнее, чем техническая реализация Сложности 280 • Надо

    погрузить команду • Люди привыкают дольше железок • Не типично • Дежурные QA инженеры
  189. Процесс местами сложнее, чем техническая реализация Сложности 281 • Надо

    погрузить команду • Люди привыкают дольше железок • Не типично • Дежурные QA инженеры • Любой дежурный - это узкое место
  190. Выводы 284 • Разработка - наши главные заказчики • Все

    инфраструктурные задачи мы делаем, чтобы:
  191. Выводы 285 • Разработка - наши главные заказчики • Все

    инфраструктурные задачи мы делаем, чтобы: • Упростить жизнь разработчиков
  192. Выводы 286 • Разработка - наши главные заказчики • Все

    инфраструктурные задачи мы делаем, чтобы: • Упростить жизнь разработчиков • Делать частые релизы
  193. Выводы 287 • Разработка - наши главные заказчики • Все

    инфраструктурные задачи мы делаем, чтобы: • Упростить жизнь разработчиков • Делать частые релизы • В пятницу вечером увидеть зелёные тесты и не бояться
  194. Выводы 288 • Разработка - наши главные заказчики • Все

    инфраструктурные задачи мы делаем, чтобы: • Упростить жизнь разработчиков • Делать частые релизы • В пятницу вечером увидеть зелёные тесты и не бояться • Хотя бы за регресс =)