接口测试 关于 golang 里,grpc 接口测试。大佬们是如何进行测试的

body · 2021年05月19日 · 最后由 无敌大王康康 回复于 2022年09月08日 · 5791 次阅读

grpc 接口自动化测试应该怎么去实现

共收到 23 条回复 时间 点赞

你把自己当做是开发,学一下 golang 的 grpc 的开发,那你就知道怎么去测试了!

body #22 · 2021年05月19日 Author
残枫 回复

干的活都不一样~~这点不认同

头疼, 就提供这么一条信息,哪个大夫也不敢给您开药方。

直接写接口调用去调?grpc 可以直接根据 proto 文件生成不同语言的调用函数吧。

body 回复

事实上就是这样的,大概是两个层面,如果你只是测试 grpc+gin 暴露出来的 http 接口的话,这种就随便用啥语言都可以了。但是那个接口包含了复杂的微服务之间的相互调用,如果你想更加颗粒的测试微服务之间暴露的接口,你就要学 go,就要去学你们用的 grpc 框架,通过 proto 的接口声明来测试。

body #6 · 2021年05月20日 Author
残枫 回复

是的,现在就要测微服务直接的接口。也在学习 go
现在的疑惑是,开发每新增一个接口,我就需要对测试代码进行扩展(新增一个测试方法)。
应该怎么去做,可以自动生成新的测试用例

body #7 · 2021年05月20日 Author
hellohell 回复

说的不明确吗~~~~

body #8 · 2021年05月20日 Author
陈恒捷 回复

目前测试方案,就是调用 proto 写测试方法来进行的

body 回复

你修改下你的正文吧?你的问题不是要怎么去做自动化,而是你觉得你现在的方法不大好,想看下有什么可以优化。

可以把你现在用例怎么写的,也举个例子说明下吧,要不不知道你用的方法和大家理解的是否一致。

body #14 · 2021年05月20日 Author
陈恒捷 回复

我刚接触 grpc 测试。也是根据网上案例来实现 grpcClient 调用
就是想看看大家都是怎么去实现测试 以及自动化测试的

你能实现到 grpc 的客户端,就可以自动化啦。这个跟 http 几乎没什么区别。

body 回复

自动生成新的测试用例这个方面,也是两个方面,一个是通用的检验规则,这个是可以自动生成的,加个注解或者装饰器啥的,但是我们往往更加关注业务,所以目前来看,开发每新增一个微服务,你都要加用例,关注与业务逻辑方面以及服务暴露的安全方面。

我理解有两种方式:
1、自己实现 GRPC client,这种需要自己根据 ip:port 调用 dial 连接这些方法,然后构造请求对象去调用具体的 grpc 方法,这种方式比较通用。可以参考:https://github.com/myzhan/boomer/blob/master/examples/grpc/main.go
2、看看自己项目其他应用是如何调用被测应用的 grpc 接口的,比如我们项目是使用 microkit 的,它的 rpc 接口通过 pb 定义,并生成.pb.go,.microkit.go 文件,里面就有 NewClient 方法,拿到 client 后直接用来发起请求就可以了。

client := livetech.NewClient()
req := &livetech.GetQualityListRequest{
}
resp, err := client.GetQualityList(context.Background(), req)

.pb.go,.microkit.go 文件 可以理解成是 rpc 服务的接口说明,用就是了。

body #14 · 2021年05月20日 Author
bugVanisher 回复

对对对,目前就是这么调用的。
您这个是,有接口新增,就对代码进行扩展吗

body #15 · 2021年05月20日 Author
残枫 回复

我想通过规则校验,自动去构造测试代码

这只是初步的一个想法

body #16 · 2021年05月20日 Author
bugVanisher 回复

这样做,有个问题,就是需要把开发的代码拉下来。他有依赖别的项目。这样搞下来可能把整个公司的代码都拉下来了

body 回复

有新增接口,更新下接口描述和 PB,就可以写新接口的测试啦

body 回复

你只需要依赖你测试的接口的接口描述,不需要管它的依赖吧。另外建议把这些描述类文件都放到一个公共仓库统一管理

我用 bloomrpc 和 grpcox

body #4 · 2021年05月21日 Author
bugVanisher 回复

我现在的做法,
1、go.mod 配置 require(要测试的业务代码 Git)
2、go mod download
3、提示业务代码依赖的某些目录加载失败
4、将依赖的模块添加到 go.mod 里,重新 go mod download
5、开始调用开发已经编译好的 *.pd.go 里的 struct 以及 NewClient

这样做法我总感觉不对

body #21 · 2021年05月21日 Author
moku 回复

嗯嗯,学习一下~

body 回复

楼主,请问是怎么解决.proto 文件依赖的问题呀??

有比较好的想法了吗??

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册