问题历史:
SOAP和gRPC是服务间消息交换的协议。SOAP起源于SOA时代,当时需要大规模自动化业务流程。gRPC是谷歌为高性能服务提供的现代RPC框架。测试这些协议的自动化传统上比REST更复杂,因为它们的特殊性:数据格式、序列化模式和客户端代码生成。
问题:
解决方案:
对于SOAP:使用专门的工具SoapUI,Postman(有限支持),通过在测试语言(Python、Java)中生成SOAP客户端进行基本级别的自动化。重要的是要验证不仅是响应,还要验证WSDL协议。
对于gRPC:通过protoc生成客户端stubs,使用与gRPC兼容的库(Python的grpcio,grpc-java等),测试运行器(例如grpcurl,BloomRPC)。通过拦截器或内存服务模拟gRPC服务器是一种良好的实践。
关键特点:
可以用与REST相同的工具简单地测试gRPC服务吗?
不可以。gRPC使用二进制协议,并且不直接与HTTP工作(仅在HTTP/2之上),需要生成protobuf客户端和特定库。
SOAP通过WSDL提供自动发现所有合同错误吗?
不可以。严格的数据模式有助于在客户端编译阶段捕获部分错误,但无法避免业务逻辑问题和集成错误。
仅有单元测试是否足够用于SOAP/gRPC?
不够。必须要有集成测试和端到端测试,以确保服务之间的交互、网络限制和序列化的特点。
团队尝试通过curl和类似工具测试gRPC服务,忽略了protobuf生成的必要性。最后,测试不稳定,有些场景根本没有覆盖。
优点:
缺点:
实施了集中化的管道:为每个gRPC/SOAP服务生成客户端,所有测试自动收集,模拟服务在内存中启动,测试使用合同验证模式和响应。
优点:
缺点: