Heim >Backend-Entwicklung >Golang >Wie teste ich HTTP-Server-Handler mit Live-Anfragen in Go?
Testen von HTTP-Servern mit Live-Anfragen in Go
Das vorliegende Problem besteht darin, sicherzustellen, dass eine HTTP-Handler-Funktion korrekt auf verschiedene HTTP-Anfragemethoden reagiert (GET und POST) in einem Live-Server-Szenario. Dies erfordert das Testen des Handlers im Kontext eines tatsächlichen Servers, anstatt sich ausschließlich auf Unit-Tests zu verlassen.
Um dies zu erreichen, bietet der Typ net/http/httptest.Server eine Lösung. Es ermöglicht die Erstellung eines Live-Servers, der einen bestimmten Router verwendet. Der Router kann auf Gorilla Mux (wie in der Frage erwähnt), Net/https ServeMux oder einer anderen Implementierung basieren, die die Net/http-Handler-Schnittstelle erfüllt.
Hier ist ein Beispiel für die Einrichtung eines Live-Servers mit httptest.Server:
<code class="go">import ( "io" "net/http" "net/http/httptest" "testing" ) func TestIndex(t *testing.T) { // Create a server using the router initialized outside the test function. ts := httptest.NewServer(router) defer ts.Close() // Create a function to generate a request with the desired method and URL. 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 } // Define test cases with various requests. 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)}, // Note: POST requests require a reader in the body } // Run tests with live requests to the server. 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 in the live server's response here. }) } }</code>
In diesem Beispiel wird davon ausgegangen, dass der Router außerhalb der Testfunktion initialisiert wird. Der httptest.Server wird dann mithilfe des Routers erstellt und nach Abschluss des Tests geschlossen. Die newreq-Funktion wird verwendet, um Anfragen mit bestimmten Methoden und URLs zu generieren. Die Testfälle werden als Teil von Strukturen definiert, um eine einfache Iteration zu ermöglichen.
Durch das Senden von Live-Anfragen an den Server mit http.DefaultClient.Do() können wir das Verhalten der Handler-Funktion im Kontext von validieren ein Live-Server. Dies bietet einen umfassenderen Testansatz im Vergleich zu isolierten Unit-Tests.
Beachten Sie, dass der Ansatz und die Details in dieser Antwort auf jeden Router anwendbar sind, der die http.Handler-Schnittstelle implementiert, nicht nur auf Gorilla Mux.
Das obige ist der detaillierte Inhalt vonWie teste ich HTTP-Server-Handler mit Live-Anfragen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!