Как тестировать gRPC-сервис
Вопрос
Тебе дали gRPC-сервис. Как ты будешь его тестировать?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Контракт из .proto: методы, сообщения, обязательность через optional и валидацию
Инструменты: grpcurl, Postman, server reflection; в автотестах сгенерированный клиент
Проверка gRPC-статусов (INVALID_ARGUMENT, NOT_FOUND, PERMISSION_DENIED), а не HTTP-кодов
Значения по умолчанию в proto3 и обратная совместимость при изменении .proto
Потоки, дедлайны, метаданные с авторизацией, обрывы соединения
Что могут спросить следом
- Почему нельзя менять номер поля в .proto?
- Как передать токен в gRPC-запросе?
- Как проверить совместимость старого клиента с новым сервером?
Разбор
Начинаю с .proto: это контракт, из него видно методы, сообщения и типы. Вручную вызываю методы через grpcurl или Postman, загрузив .proto или через server reflection, а в автотестах использую клиент, сгенерированный из того же .proto. Проверяю не HTTP-коды, а gRPC-статусы: на мусорный ввод INVALID_ARGUMENT, на чужой объект PERMISSION_DENIED или NOT_FOUND, без токена UNAUTHENTICATED. Токен передаётся в метаданных, аналоге заголовков. Отдельная тема proto3: ноль, пустая строка и false не передаются, и сервер не отличит их от отсутствия поля, поэтому проверяю сценарии вроде «обнулить скидку». Совместимость: номера полей менять и переиспользовать нельзя, старый клиент должен работать с новым сервером, это проверяю прогоном старого клиента. Для потоков проверяю обрыв посередине, дедлайны с DEADLINE_EXCEEDED и что сервер прекращает работу по отменённому вызову.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.