golang 接口测试

"本文介绍了如何使用Go语言进行接口测试,包括HttpGet和HttpPost两种请求方式。在HttpGet测试中,断言返回的msg字段为"terrychow"但模拟了失败情况;在HttpPost测试中,成功发送json数据并断言返回的msg字段为"terrychow"。通过示例代码展示了测试套件的设置和断言操作。"

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

golang 接口测试

package hello_test

import (
    "testing"
    "fmt"
    "strconv"
    "io/ioutil"
    "net/http"
     "bytes"
    "encoding/json"
    . "gopkg.in/check.v1"
)

var a int =1


// Hook up gocheck into the "go test" runner.
func Test(t *testing.T) { TestingT(t) }

type MySuite struct{}

type HttpData struct {

    Flag int `json:"flag"`
    Msg string `json:"msg"`

}

var _ = Suite(&MySuite{})

var testurl string ="http://127.0.0.1:12345"

func (s *MySuite) SetUpSuite(c *C) {
    str3:="第1次套件开始执行"
    fmt.Println(str3)
    //c.Skip("Skip TestSutie")
}

func (s *MySuite) TearDownSuite(c *C) {
    str4:="第1次套件执行完成"
    fmt.Println(str4)
}

func (s *MySuite) SetUpTest(c *C) {
    str1:="第"+strconv.Itoa(a)+"条用例开始执行"
    fmt.Println(str1)

}

func (s *MySuite) TearDownTest(c *C) {
    str2:="第"+strconv.Itoa(a)+"条用例执行完成"
    fmt.Println(str2)
    a=a+1
}

func (s *MySuite) TestHttpGet(c *C) {
    geturl := fmt.Sprintf("%v/checkon", testurl)
   respget, err := http.Get(geturl)
  if err != nil {
        panic(err)
    }
  defer respget.Body.Close() //关闭连接

  body, err := ioutil.ReadAll(respget.Body) //读取body的内容
  var gdat map[string]interface{} //定义map用于解析resp.body的内容
    if err := json.Unmarshal([]byte(string(body)), &gdat); err == nil {
        fmt.Println(gdat)
    } else {
        fmt.Println(err)
    }
    var gmsg=gdat["msg"]
    c.Assert(gmsg, Equals, "terrychow")  //模拟失败的断言

}

func (s *MySuite) TestHttpPost(c *C) {

    url := fmt.Sprintf("%v/postdata", testurl)
    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
    }
    var dat map[string]interface{} //定义map用于解析resp.body的内容
    if err := json.Unmarshal([]byte(string(content)), &dat); err == nil {
        fmt.Println(dat)
    } else {
        fmt.Println(err)
    }
    var msg=dat["msg"]
    c.Assert(msg, Equals, "terrychow")  //模拟成功的断言
}

执行: go test -v xxx_test.go

相关链接

性能测试ginkgoginkgo使用ginkgo测试框架gomegaGoConveypython接口测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值