Разбор протокола gRPC, его отличий от REST и практическое руководство по внедрению в QA Automation. Включает обзор инструментов, чек-лист для автотестов и частые вопросы для собеседования.
gRPC (Google Remote Procedure Call) — это высокопроизводительный фреймворк для вызова удаленных процедур. Если REST — это про «ресурсы и документы», то gRPC — про «вызов функций на удаленной машине».
Три кита gRPC:
.proto файлах. Из этих файлов код (клиент и сервер) генерируется автоматически.На собеседовании тебя почти наверняка попросят их сравнить. Держи эту структуру в голове:
| Характеристика | REST | gRPC |
|---|---|---|
| Формат данных | JSON / XML (текст) | Protobuf (бинарный) |
| Протокол | HTTP/1.1 (чаще) | HTTP/2 |
| Контракт | Swagger / OpenAPI (опционально) | .proto файлы (строго обязательно) |
| Стиль | Ресурсы (GET, POST, PUT, DELETE) | Методы / Функции (RPC) |
| Стриминг | Сложно (SSE, WebSockets) | Встроено (Client, Server, Bidirectional) |
| Где используется | Внешние API (для фронтенда, 3-х сторон) | Внутренние API (между микросервисами) |
Как автотестировщику, тебе не нужно писать сервер на gRPC. Твоя задача — тестировать контракт, генерировать клиенты и проверять бизнес-логику.
Шаг 1. Работа с контрактом (.proto)
Разработчики скидывают тебе .proto файл. Ты смотришь в него, чтобы понять, какие методы есть, какие поля обязательны, а какие нет.
Лайфхак для QA: Проверяй, что .proto файл версионируется и лежит в репозитории вместе с кодом.
Шаг 2. Генерация клиента
Тебе не нужно парсить бинарный Protobuf вручную! Ты берешь .proto файл и с помощью компилятора (protoc) генерируешь клиентский код на своем языке (Java, Python, C#).
В автотестах ты просто импортируешь сгенерированные классы и вызываешь методы как обычные функции.
Шаг 3. Написание автотестов Ты создаешь gRPC-клиент в коде, передаешь туда сгенерированные объекты сообщений (Messages) и проверяешь ответ.
// Пример на Java (псевдокод)
UserServiceGrpc.UserServiceBlockingStub stub = UserServiceGrpc.newBlockingStub(channel);
GetUserRequest request = GetUserRequest.newBuilder().setUserId(123).build();
User response = stub.getUser(request);
assertEquals("Вика", response.getName());Шаг 4. Тестирование стриминга (Advanced) Если сервис отдает данные потоком (например, видео или логи), ты пишешь тест, который подписывается на стрим, читает данные по частям (chunks) и проверяет, что они приходят в правильном порядке и без обрывов.
Что добавить в резюме или использовать в работе:
.proto файл и отправлять запросы через UI.curl, но для gRPC. Незаменима для быстрого ручного тестирования и написания bash-скриптов..proto файл (например, от сервисов Google или любой open-source проект на GitHub) и отправить 3 тестовых gRPC запроса через Postman.grpcurl и сделать 2 запроса в консоль..proto файл, компилирует его и генерирует клиентский код.assert на ответ.grpcio-testing в Python или grpc-java test utils)..proto контракт, подниму mock-сервер (или использую инструменты вроде WireMock/gRPC mock), настрою его на отдачу захардкоженных ответов и напишу автотесты на своем сервисе-клиенте.