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

Владимир Ушаков – «Кодогенерация Python gRPC клиентов»

Ozon Tech
September 22, 2023

Владимир Ушаков – «Кодогенерация Python gRPC клиентов»

Ozon Tech

September 22, 2023
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. Ozon Tech 2023 Автоматическая генерация Python gRPC клиентов Владимир Ушаков,

    специалист по тестированию в группе «Производство и возвраты»
  2. 1. Небольшое введение в gRPC 2. Проблематика 3. Наше решение

    автоматической генерации клиентов 4. Итоги План выступления 2
  3. Определение Небольшое введение в gRPC 5 (Remote Procedure Calls) —

    это система удаленного вызова процедур (RPC) с открытым исходным кодом, первоначально разработанная в Google в 2015 году. В качестве транспорта используется HTTP/2, в качестве языка описания интерфейса — Protocol Buffers
  4. Файл с расширением .proto Пример контракта 7 1. Описывается имя

    пакета 2. Может быть описан сервис с методами 3. Описываются типизированные модели запросов и ответов 4. Protocol Buffer Compiler
  5. Как мы работаем? 9 • Пишем тесты на Python •

    Отдельный тестовый фреймворк • 30+ человек • Тестируем сотни микросервисов
  6. Проблема 10 • Тратим много времени на описание gRPC клиентов

    (рутинная работа) • Нет единого стиля, подхода работы с gRPC • Регулярные изменения контрактов
  7. Пакет grpcio-tools Как взаимодействовать из Python? 11 С помощью компилятора

    буфера протокола генерируем код из *.proto контракта под Python
  8. 14

  9. Как решать проблему? 16 • Посмотреть на решения, используемые в

    других командах • При условии, если что-то подойдет, внедрить к нам • Или написать свое, которое могла бы использовать любая команда Ozon
  10. Пакет с базовым клиентом 21 • Содержит в себе логику

    выполнения вызова • Логгирование • Авторизацию • Другие вспомогательные интерсепторы
  11. Какие данные нужны для генерации клиента? Данные 22 1. Сервисы,

    методы, сообщения (grpcio-tools файлы) 2. Знать путь до файла, для составления импортов
  12. • Принимает путь до контракта • Принимает версию (ветвь в

    git) • Скачивает контракт со всеми зависимостями • Все раскладывает в правильной структуре, в соответствии с импортами в контракте Платформа 23 Mimir Инструмент получения контрактов
  13. Запрос по рефлексии на gRPC сервер Получение контрактов 24 gRPC

    вызов на сервер по контракту reflection.proto, который позволяет понять, какие вообще сервисы, RPC-вызовы и сообщения есть у сервиса Рефлексия —
  14. grpcio-tools Генерация python-кода из контрактов 25 С помощью компилятора получаем

    python-код из полученных контрактов Получаем правильную структуру сгенерированных файлов
  15. 27 Jinja — это быстрый, выразительный и расширяемый шаблонизатор. Специальные

    заполнители в шаблоне позволяют писать код, аналогичный синтаксису Python. Затем шаблону передаются данные для визуализации окончательного документа Передача данных в шаблонизатор
  16. 32 Git Второй вариант получения контрактов 1. Клонируем репозиторий 3.

    Приватные репозитории 2. Рекурсивный поиск контрактов
  17. Версионирование 36 generate client job master branch_1 branch_1 next stable

    (1.0.0 —> 1.0.1) next release candidat (1.0.0 —> 1.0.0rc0) next release candidat (1.0.0 —> 1.0.0rc1)
  18. Итоги 39 • Имеем единый автоматизированный подход генерации gRPC клиентов

    • Тестировщик не выполняет рутинную работу по написанию/изменению клиента