引言
最近公司项目用 Golang 重写,总算是有机会实战了。这篇文章主要分享与记录我是怎么在 Golang 的项目中写接口测试的。
因为是换语言重写 API 项目,所以一定要保证新旧项目对外输出的结果一致性。由于我使用 Golang 的时间不算太久,本篇文章如有错误、不足之处,还请大家多多指教。
接口测试
接口测试的代码有参考 qiangxue/go-rest-api 的代码,但是因为使用的包和结构也不太一样,所以会有调整,但是思路是差不多的。
tests 包
先建一个 tests 包,写一个 Endpoint
方法:
|
|
几点需要说明:
- 我们路由用的是
julienschmidt/httprouter
此处你可以更改适用你们的 stretchr/testify
包是 Go 用的最多的断言包,非常好用,出现断言失败,输出结果清晰明了,推荐。kinbiko/jsonassert
这个包可以断言两个JSON
的值是否相等,使用这个包是因为stretchr/testify
不满足我们的需求,我们每个接口都会返回request_id
这个值是唯一且随机的,所以我们断言的时候不必考虑这个值,使用的kinbiko/jsonassert
的<<PRESENCE>>
就能很好的满足我们的需求。另外由于 WantResponse 值我是直接拿的老项目返回的值做比对的,kinbiko/jsonassert
断言JSON
时不会考虑顺序,这个也正是我们需要的功能。
接口测试
一个示例:
|
|
mockNewServer
就是起一个 Server,具体每个项目都不太一样- 接口如果需要鉴权的话,要传入
token
数据。 我们使用的是在header
里面传入JWT
Mock 第三方接口
有时候我们的项目会依赖另外一个项目的接口,就比分说发通知的功能,我们会单独请求一个通知系统的接口给用户发通知,这种情况如何写测试代码呢?
首先要明确的是我们不会测试第三方接口的服务,所以这里我们就断言第三方接口一定会返回我们需要的数据。使用 Mock 方式就能达到这个需求。
我们使用的是 jarcoal/httpmock 这个包,可以很好的满足我们的需求。
使用方法我们分两步:
先定义 Mock 数据
|
|
使用 Mock
|
|
加入上面两行代码之后,跑测试时请求的第三方接口(URL 一致的话)会直接返回我们的 Mock 数据,非常方便。
总结
测试是非常有必要写的,特别是核心代码的测试一定要覆盖到,为以后重构或者修改需求都带来更多保障。
回顾一下今天主要就是分享了一下接口功能测试以及如何 Mock API 返回的数据,帮忙更好的写测试。
希望本篇文章分享对你有帮助。
- 原文作者: forecho
- 原文链接: https://blog.forecho.com/using-golang-for-api-testing.html
- 版权声明:本作品采用 署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。