golang分层测试之http接口测试入门教程
前言
前几话主要讲解关于使用golang进行单元测试,在单元测试的上一层就是接口测试,本节主要讲使用golang进行接口测试,其中主要以http协议的接口测试来讲解
golang中的http请求
golang中拥有一个原生的http依赖库:net/http,http服务器的建立还是http客户端的开发,都会使用到这个依赖库,这里主要讲解时client部分,作为请求发起方应用于日常的接口测试,例示代码如下:
get请求
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { //模拟一个get提交请求 resp, err := http.Get("http://127.0.0.1:12345/checkon") if err != nil { panic(err) } defer resp.Body.Close() //关闭连接 body, err := ioutil.ReadAll(resp.Body) //读取body的内容 fmt.Println(string(body)) }
结果
E:\go_project>go run testget.go { "code": 200, "data": "", "msg": "online", "state": "success" }
post请求:
package main import ( "fmt" "io/ioutil" "log" "net/http" "strings" ) func main(){ url:="http://www.shop.com:8088/Api/Weixinapi/getCommentsTypes/" resp,err:= http.Post(url,"application/x-www-form-urlencoded",strings.NewReader("goodsId=123")) //如果多个参数后面紧跟 if err != nil { log.Println("is error") log.Println(err) return } defer resp.Body.Close() data,_:= ioutil.ReadAll(resp.Body) fmt.Println(string(data)) }
结果:
1 2 | { "respMsg" : "\u6210\u529f" , "resultCode" : "0000" , "data" :{ "typesList" :[{ "evaluateId" :0, "evaluateanem" : "\u5168\u90e8" },{ "evaluateId" :1, "evaluateanem" :"\u6709\u56fe\u8bc4\u4e f7 (0) "},{" evaluateId ":2," evaluateanem ":" \u597d\u8bc4 (0) "},{" evaluateId ":3," evaluateanem ":" \u4e2d\u8bc4 (0) "},{" evaluateId ":4," evaluateanem ":" \u5dee\u8bc4 (0)"}]}} |
带json的post请求
我们大部分应用到的restful接口都是用json格式的请求体,对应的golang的http请求也会有相关的方式post json请求体
package main import ( "fmt" "io/ioutil" "net/http" "bytes" "encoding/json" ) type HttpData struct { Flag int `json:"flag"` Msg string `json:"msg"` } func main() { url := "http://127.0.0.1:12345/postdata" contentType := "application/json;charset=utf-8" var httpdata HttpData httpdata.Flag = 1 httpdata.Msg = "terrychow" b ,err := json.Marshal(httpdata) if err != nil { fmt.Println("json format error:", err) return } body := bytes.NewBuffer(b) resp, err := http.Post(url, contentType, body) if err != nil { fmt.Println("Post failed:", err) return } defer resp.Body.Close() content, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("Read failed:", err) return } fmt.Println("header:", resp.Header) fmt.Println("content:", string(content)) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-11-18 go里面面向对象