我们使用 grpc 作为我们所有内部系统的 RPC 协议。大部分系统是用Java编写的。
在 Java 中,我们可以使用 InprocessServerBuilder 进行单元测试。但是,我还没有在 Python 中找到类似的类。
任何人都可以提供有关如何在 python 中进行 GRPC 单元测试的示例代码吗?
原文由 Crazymooner 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们使用 grpc 作为我们所有内部系统的 RPC 协议。大部分系统是用Java编写的。
在 Java 中,我们可以使用 InprocessServerBuilder 进行单元测试。但是,我还没有在 Python 中找到类似的类。
任何人都可以提供有关如何在 python 中进行 GRPC 单元测试的示例代码吗?
原文由 Crazymooner 发布,翻译遵循 CC BY-SA 4.0 许可协议
一些示例代码开始:
原型
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 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
你今天问这个问题真是太巧了; 我们的单元测试框架刚刚进入代码审查。所以目前测试的方法是 使用完整的生产堆栈来连接你的客户端和服务器端代码(或者违反 API 并模拟很多内部的东西)但希望在几天到几周内会更好将为您提供解决方案。