go测试库之apitest
2023/5/6 1:22:03
本文主要是介绍go测试库之apitest,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
使用go语言做开发差不多快一年了,主要用来写后端Web服务,从一开始吐槽他的结构体,比如创建个复杂的JSON格式数据,那是相当的痛苦。还有 err 处理写的巨麻烦。
当然,go 也有爽的地方,创建个线协程简直太简单了。
到后来慢慢接受,觉得效率还行,因为是静态强类型语言,在修改完项目代码之后,反而很有信心(如果出现低级的类型错误,直接编译出错了),相比 Python 就要反复检查两边,对修改的代码总时心里发虚。
go语言测试相关的东西都不咋地,比如自带的测试框架相比较 pytest 那是相当的简陋。今年开始给后端写单元测试(其实应该叫接口测试),发现 apitest库 眼前一亮。采用链式调用,和 HttpRunner 3.x 的链式调用颇有几分相似。
- HttpRunner 3.x
# httprunner 3.x from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase class TestCaseTestCase(HttpRunner): config = Config("basic test config").base_url("http://127.0.0.1:8000/api") teststeps = [ Step( RunRequest(" test_add_event_all_null") .post("/add_event/") .with_data({"eid": "", "limit": "", "address": "", "start_time": ""}) .validate() .assert_equal("body.status", 10021) .assert_equal("body.message", "parameter error") ) ] if __name__ == "__main__": TestCaseTestCase().test_start()
apitest 测试库
一个简单且可扩展的行为测试库。
测试库: https://github.com/steinfletcher/apitest jsonpath库: github.com/steinfletcher/apitest-jsonpath
- 简单的get接口
package api import ( "net/http" "testing" "time" "github.com/steinfletcher/apitest" ) func Client() http.Client { cli := &http.Client{ Timeout: time.Second * 10, } return *cli } func TestGetSample(t *testing.T) { cli := Client() apitest.New(). EnableNetworking(&cli). Get("http://httpbin.org/get"). Expect(t). Status(http.StatusOK). End() }
New()
: 创建一个新的API测试。
EnableNetworking()
: EnableNetworking为提供的客户端启用网络,需要一个 http.Clinet。
Get()
: 发送get 请求,需要一个URL。
Expect()
: Expect将请求规范标记为完整。
Status()
: 断言http状态。http.StatusOK = 200
End()
: End运行测试,将结果返回给调用者。
- get接口带参数
import ( ... jsonpath "github.com/steinfletcher/apitest-jsonpath" ) ... func TestGetParams(t *testing.T) { cli := Client() apitest.New(). EnableNetworking(&cli). Intercept(func(req *http.Request) { req.URL.RawQuery = "id=1&name=jack" }). Get("http://httpbin.org/get"). Expect(t). Assert( jsonpath.Contains(`$.args.id`, "1")). Assert( jsonpath.Equal(`$.args.name`, "jack")). End() }
req.URL.RawQuery
: 用于定义get请求参数。
Assert()
,方法用于断言。
jsonpath 提供了断言方法,Contains判断包含,Equal判断相等。
- post接口Form-data参数
... func TestPostFormData(t *testing.T) { cli := Client() apitest.New(). EnableNetworking(&cli). Post("http://httpbin.org/post"). FormData("key1", "value1"). FormData("key2", "value2"). Expect(t). Assert( jsonpath.Chain(). Equal(`$.form.key1`, "value1"). Equal(`$.form.key2`, "value2"). End()). End() }
FormData()
用于设置form-Data格式的参数。
jsonpath 提供的断言同样支持链式调用。
- post接口JSON参数
... func TestPostJson(t *testing.T) { cli := Client() apitest.New(). EnableNetworking(&cli). Post("http://httpbin.org/post"). JSON(`{"message": "hi"}`). Expect(t). Assert( jsonpath.Chain(). Contains(`$.data`, "message"). Contains(`$.data`, "hi"). End()). End() }
JSON()
用于设置JSON()请求方法。
apitest 评价
官网:https://apitest.dev/
apitest 在完成http接口测试方面还是非常方便的,如果你被 go语言的 http 库蹂躏过一段时间之后感触更深;怎么说了,比如你经常被老板PUA,突然有一天老板居然当面表扬了你,大概就这种感觉。
这篇关于go测试库之apitest的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站