golang分层测试之http接口测试入门教程
原创
©著作权归作者所有:来自51CTO博客作者mysql_proxy的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言
前几话主要讲解关于使用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))
}
结果:
{"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))
}