如何编写 GRPC python 单元测试

新手上路,请多包涵

我们使用 grpc 作为我们所有内部系统的 RPC 协议。大部分系统是用Java编写的。

在 Java 中,我们可以使用 InprocessServerBuilder 进行单元测试。但是,我还没有在 Python 中找到类似的类。

任何人都可以提供有关如何在 python 中进行 GRPC 单元测试的示例代码吗?

原文由 Crazymooner 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 777
2 个回答

一些示例代码开始:

原型

syntax = "proto3";

service MyLibrary {
    rpc Search (Request) returns (Response);
}

message Request {
    string id = 1;
}

message Response {
    string status = 1;
}

蟒蛇单元测试

#!/usr/bin/env python
# coding=utf-8

import unittest

from grpc import StatusCode
from grpc_testing import server_from_dictionary, strict_real_time
import mylibrary_pb2

class TestCase(unittest.TestCase):

    def __init__(self, methodName) -> None:
        super().__init__(methodName)

        myServicer = MyLibraryServicer()
        servicers = {
            mylibrary_pb2.DESCRIPTOR.services_by_name['MyLibrary']: myServicer
        }
        self.test_server = server_from_dictionary(
            servicers, strict_real_time())

    def test_search(self):
        request = mylibrary_pb2.Request(
            id=2,
        )
        method = self.test_server.invoke_unary_unary(
            method_descriptor=(mylibrary_pb2.DESCRIPTOR
                .services_by_name['Library']
                .methods_by_name['Search']),
            invocation_metadata={},
            request=request, timeout=1)

        response, metadata, code, details = method.termination()
        self.assertTrue(bool(response.status))
        self.assertEqual(code, StatusCode.OK)

if __name__ == '__main__':
    unittest.main()

原文由 rpstw 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题