首页 > 后端开发 > Golang > 如何使用 Go 中成熟的路由器实时测试 HTTP 服务器处理程序?

如何使用 Go 中成熟的路由器实时测试 HTTP 服务器处理程序?

Barbara Streisand
发布: 2024-11-03 04:59:30
原创
214 人浏览过

How to Live Test HTTP Server Handlers with a Full-Fledged Router in Go?

在 Go 中实时测试 HTTP 服务器

问题:

如何执行实时测试HTTP 服务器处理程序,确保它们在成熟的路由器上下文中正确响应特定的 HTTP 请求方法?

答案:

进行实时测试HTTP 服务器,使用 net/http/httptest.Server 类型。此方法涉及创建一个利用相关路由器的实时测试服务器。随后,您可以向此测试服务器发送 HTTP 请求,并根据预期结果验证响应。

代码示例:

以下代码演示了如何使用 httptest .用于实时测试的服务器:

<code class="go">import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestIndex(t *testing.T) {
    // Initialize the router, e.g., a Gorilla mux router as in the question.
    router := mux.NewRouter()
    router.HandleFunc("/", views.Index).Methods("GET")

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

    // Define a function to construct new HTTP requests.
    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)}, // reader argument required for POST
    }

    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)
            }

            // Perform validations on the response body, headers, etc.
        })
    }
}</code>
登录后复制

注意:此方法适用于任何实现 http.Handler 接口的路由器,包括 Gorilla mux、net/http.ServeMux 和 http。 DefaultServeMux。

以上是如何使用 Go 中成熟的路由器实时测试 HTTP 服务器处理程序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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