gRPC测试用例编写指南
[i18n] post_less_than_a_minute_read
本文档将介绍如何编写api-testing
的 gRPC API 的测试用例。
阅读本文档之前,您需要先安装并配置好api-testing
,具体操作可以参考安装章节。如果您已经完成了这些步骤,可以继续阅读本文档的后续部分。
创建测试项目
创建一个基于服务反射的 gRPC 测试用例仅需在 yaml 文件的spec
路径下加入以下内容:
spec:
rpc:
serverReflection: true
rpc
字段一共有五个子字段
字段名 | 类型 | 是否可选 |
---|---|---|
import | []string | √ |
protofile | string | √ |
protoset | string | √ |
serverReflection | bool | √ |
字段import
和protofile
protofile
是一个文件路径,指向api-testing
查找描述符的.proto
文件的位置。
import
字段与protc
编译器中的--import_path
参数类似,用于确定查找proto
文件的位置与解析依赖的目录。与protoc
一样,您不需要在此处指定某些proto
文件的位置(以google.protobuf
开头的Protocol Buffers Well-Known Types
),它们已经内置在了api-testing
中。
字段protoset
protoset
字段既可以是一个文件路径,也可以是http(s)://
开头的网络地址。
当您的proto
数量繁多或引用关系复杂,可以尝试使用protoc --descriptor_set_out=set.pb
生成proto
描述符集合。本质上它是一个使用了wire
编码的二进制文件,其中包括了所有需要的描述符。
字段serverReflection
若目标服务器支持服务反射,将此项设为true
则不再需要提供上述三个字段。
注:api-testing
对三种描述符来源的优先级顺序为
serverReflection
> protoset
> protofile
编写gRPC API测试
与编写HTTP
测试用例类型,您需要在根节点的api
字段定义服务器的地址。
api: 127.0.0.1:7070
默认情况下api-testing
使用不安全的方式连接到目标服务器。若您想配置TLS证书,请参考文档关于安全
编写gRPC API
测试的方式与编写HTTP API
测试的方式基本相同。
- name: FunctionsQuery
request:
api: /server.Runner/FunctionsQuery
body: |
{
"name": "hello"
}
expect:
body: |
{
"data": [
{
"key": "hello",
"value": "func() string"
}
]
}
api
字段的格式为/package.service/method
,支持 gRPC 一元调用、客户端流、服务端流和双向流调用。
与api
字段同级的body
字段是以JSON
格式表示的Protocol Buffers
消息,代表将要调用的api
的入参。特别的,当您需要调用客户端流或双向流 API 时,请使用JSON Array
格式编写字段body
,如:
body: |
[
{
"name": "hello"
},
{
"name": "title"
}
]
编写返回内容验证
编写gRPC API
返回内容验证的方式与HTTP API
基本相同。对与gRPC API
来说,一切返回值都被视为map
类型,被放入api testing
特定的返回结构中:
expect:
body: |
{
"data": [
{
"key": "hello",
"value": "func() string"
}
]
}
api-testing
为JSON
比对编写了一套对比库,请参考此处compare
请注意,对于服务端流和双向流模式,服务器发送多条消息的情况下,此处的data
字段内的填写的目标数组,需同时满足与待验证数组长度相,两个数组同一下标的内容完全相同。
gRPC API
的verify
功能与HTTP API
保持一致,此处不再赘述。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.