首页 > 后端开发 > Golang > 如何使用 httptest.Server 在 Go 中测试具有实时请求的 HTTP 服务器?

如何使用 httptest.Server 在 Go 中测试具有实时请求的 HTTP 服务器?

Patricia Arquette
发布: 2024-11-03 08:01:30
原创
643 人浏览过

How do you test an HTTP server with live requests in Go using httptest.Server?

在 Go 中使用实时请求测试 HTTP 服务器

实时测试 HTTP 服务器允许您真实地验证端点的功能-世界环境。当您的服务器依赖外部服务或使用复杂的路由逻辑时,此方法特别有用。

使用 net/http/httptest.Server 进行实时测试

net/ Go 标准库中的 http/httptest.Server 类型提供了一种创建实时 HTTP 服务器以进行测试的方法。使用方法如下:

<code class="go">// Create a router that will be used for testing.
router := mux.NewRouter()

// Create a test server using the router.
ts := httptest.NewServer(router)

// Send test requests to the server.
newreq := func(method, url string, body io.Reader) *http.Request {
    r, err := http.NewRequest(method, url, body)
    if err != nil {
        t.Fatal(err)
    }
    return r
}

tests := []struct {
    name string
    r    *http.Request
}{
    {name: "1: testing get", r: newreq("GET", ts.URL+"/", nil)},
    {name: "2: testing post", r: newreq("POST", ts.URL+"/", nil)},
}

for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        resp, err := http.DefaultClient.Do(tt.r)
        defer resp.Body.Close()
        if err != nil {
            t.Fatal(err)
        }
        // Check for expected response.
    })
}</code>
登录后复制

在此示例中,我们创建一个 Gorilla mux 路由器,然后使用 httptest.NewServer 使用该路由器创建一个实时服务器。我们定义一些测试请求并使用 http.DefaultClient 将它们发送到服务器。然后,我们可以验证从服务器收到的响应,以确保它们符合我们的期望。

注意:虽然问题特别提到了 Gorilla mux,但此处描述的方法适用于任何路由器满足http.Handler接口。

以上是如何使用 httptest.Server 在 Go 中测试具有实时请求的 HTTP 服务器?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板