首頁 >後端開發 >Golang >如何使用 httptest.Server 在 Go 中測試具有即時請求的 HTTP 伺服器?

如何使用 httptest.Server 在 Go 中測試具有即時請求的 HTTP 伺服器?

Patricia Arquette
Patricia Arquette原創
2024-11-03 08:01:30618瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn