net/http/httptest

Guided tour · Networking · pkg.go.dev →

Test helpers for HTTP handlers and servers. Fake requests, record responses, spin up local servers.

Calling a handler without a real network

Recorder — record what the handler wrote

rec := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/hello?name=ada", nil)

myHandler(rec, req)

if rec.Code != 200 {
    t.Errorf("got %d", rec.Code)
}
if !strings.Contains(rec.Body.String(), "ada") {
    t.Error("missing ada")
}

Spinning up a real local server

NewServer — integration tests

Gives you a live URL you can pass to clients. Close when done.

srv := httptest.NewServer(http.HandlerFunc(myHandler))
defer srv.Close()

resp, _ := http.Get(srv.URL + "/api/things")

NewTLSServer — HTTPS variant

srv.Client() returns a client that trusts the server's self-signed cert.

srv := httptest.NewTLSServer(handler)
defer srv.Close()
resp, _ := srv.Client().Get(srv.URL)