4

最近,我一直在使用 MagicMock() 在 python 中模拟 gRPC 调用,但我没有成功模拟我得到的 gRPC 响应消息。这是一段代码python客户端代码

def senor_read(self, server_end_point)
with grpc.insecure_channel(server_end_point) as grpc_channel:
    grpc_stub = sensorservice_pb2_grpc.getsensorinfostub(grpc_channel)
    sensor_response = yield grpc_stub.getsensorreading(sensorservice_pb2_grpc.request(
                    sensorname=name, account=account))
    if sensor_response.ok:
        print(" Successful sensor reading")
    elf sensor_resonse.error:
        raise Sensor_ErrorReading(why="Not able to read sensor)

    return convert_resoonse_to_dict(sensor_response)

这是我模拟它的方式(仍然是新手学习模拟框架)

sensorservice_pb2_grpc = MagicMock()
sensorservice_pb2_grpc.getsensorinfostub = MagicMock()
mock_grpc_stub = MagicMock()
mock_grpc_channel = MagicMock()
mock_grpc_channel.grpc.insecure_channel = MagicMock()
mock_grpc_channel.grpc_channel = MagicMock()
mock_grpc_response = MagicMock(mock_grpc_stub.getsensorreading)
type(mock_grpc_response.return_value).error = PropertyMock(return_value=True)

Flow 是 python 函数 senor_read() 向远程服务器发出 gRPC 请求并获取读数并传回给调用者。

此测试的目的是使代码在“eif”情况下执行并捕获异常。1)当我执行测试代码时,如果 case 并且我看到一些其他异常被发送给调用者,它不会转到“elf”。我是否在 gRPC 响应模拟中正确设置了状态?

2) 我的模拟步骤对于模拟 gRPC 调用是否正确?

3)此外,当我运行时,我无法在成功时看到打印消息,而只能在失败测试用例打印时看到。另外,实际功能中的打印不打印?

我确实搜索了很多,找不到太多关于在 python 中模拟 gRPC 的信息。

4

0 回答 0