gRPC для тестировщика

Интерактивное руководство по gRPC для QA инженеров с фокусом на работе в Postman.

Что такое gRPC?

gRPC (Google Remote Procedure Call) — это современный фреймворк для удаленного вызова процедур. Проще говоря, это способ для программ общаться друг с другом, как если бы они вызывали локальные функции.

Ключевые отличия от REST:

  • Контракт: Вместо документации Swagger используется строго типизированный файл .proto.
  • Формат данных: Вместо текстового JSON используется бинарный Protobuf, что гораздо быстрее и компактнее.
  • Транспорт: Работает поверх HTTP/2, который поддерживает мультиплексирование (несколько запросов в одном соединении) и стриминг.

REST vs gRPC: Наглядное сравнение

REST (JSON / HTTP/1.1)

Клиент
{ "name": ... } →
Сервер

Текстовые данные, новое соединение на каждый запрос.

gRPC (Protobuf / HTTP/2)

Клиент
01101011 →
Сервер

Бинарные данные, одно постоянное соединение.

Контракт: .proto файл

Файл с расширением .proto — это сердце gRPC. Он описывает все доступные сервисы, их методы, а также форматы сообщений (запросов и ответов). Это единственный источник правды об API.

syntax = "proto3";

package rickandmorty;

service CharacterService {
  rpc GetCharacter(CharacterRequest) returns (CharacterResponse);
}

message CharacterRequest {
  int32 id = 1;
}

message CharacterResponse {
  string name = 1;
  string status = 2;
  string species = 3;
}

Типы вызовов

gRPC поддерживает четыре типа взаимодействия клиента и сервера.

Unary (Унарный)

Клиент
Сервер

Классический запрос-ответ. Аналог обычного REST-вызова.

Server streaming

Клиент
Сервер

Клиент отправляет один запрос и получает поток ответов.

Client streaming

Клиент
Сервер

Клиент отправляет поток запросов и получает один ответ.

Bidirectional streaming

Клиент
Сервер

Клиент и сервер обмениваются потоками данных независимо друг от друга.

Работа в Postman

Postman позволяет удобно работать с gRPC. Главное — импортировать .proto файл, и Postman сам построит интерфейс.

localhost:50051

Message

{
  "id": 1
}

Metadata

// Authorization: Bearer ...

Стратегии тестирования

Тестирование gRPC фокусируется на контракте, данных и поведении стримов.

Позитивные сценарии

  • Проверка всех полей в ответе на корректные типы данных, согласно .proto.
  • Тестирование с разными валидными значениями в запросе.
  • Для стримов: проверка, что приходят все ожидаемые сообщения и поток закрывается корректно.

Негативные сценарии

  • Отправка сообщения с неверным типом данных (например, "id": "abc" вместо 123).
  • Отправка запроса без обязательных полей.
  • Проверка кодов ответа gRPC (например, INVALID_ARGUMENT, NOT_FOUND, PERMISSION_DENIED).
  • Тестирование дедлайнов: что будет, если сервер не ответит за указанное время.