Как выполнить модульное тестирование клиента gRPC, моделируя grpc.GrpcError в PythonPython

Программы на Python
Anonymous
Как выполнить модульное тестирование клиента gRPC, моделируя grpc.GrpcError в Python

Сообщение Anonymous »

Я реализовал сервер и клиент gRPC по этому примеру.
Я использую метод grpc.ServicerContext.abort_with_status(), чтобы вызвать исключения на сервере.Модульные тесты для случаев ошибок на сервере пишутся так же, как я вызываю сервер с клиента, перехватывая исключение grpc.GrpcClient:

Код: Выделить всё

    try:
result = client.my_rpc(request)
except grpc.RpcError as rpc_error:
status = rpc_status.from_call(rpc_error)
Теперь я хочу протестировать клиент, но не нашел способа проверить случаи возникновения этого исключения. Я пытаюсь имитировать вызов метода-заглушки, чтобы вызвать это исключение.
Но в тестах при попытке получить статус:

Код: Выделить всё

status = rpc_status.from_call(rpc_error)
Я получаю следующее исключение:

Код: Выделить всё

AttributeError: 'RpcError' object has no attribute 'trailing_metadata'
Я даже не пытался добавить статус к этой RpcError, я следую тому, что было сделано в этом ответе.
Кто-нибудь сталкивался с этой проблемой?
Я пробовал так много вещей, но не могу найти способ заставить ее работать.
Я реализовал класс, который действует как заглушка, которая использует библиотеку grpcio-testing для вызова другого класса, который является реализованным мною сервисным классом. Затем издевался над заглушкой в ​​клиенте, но мне не удалось заставить ее вызывать исключение при использовании grpc.ServicerContext.abort_with_status().
Любая помощь приветствуется, если есть лучший способ проверить это, дайте мне знать.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python

Вернуться в «Python»