前言

前几话主要讲解关于使用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))

}