Go에서 실시간 요청으로 HTTP 서버 테스트
단위 테스트 핸들러를 별도로 테스트하는 것은 필수적이지만 라우팅 및 기타 미들웨어의 영향을 간과할 수 있습니다. . 포괄적인 테스트를 위해서는 "라이브 서버" 접근 방식을 사용하는 것이 좋습니다.
httptest.Server를 사용한 라이브 서버 테스트
net/http/httptest.Server 유형은 라이브 서버 테스트를 용이하게 합니다. 서버 테스트. 제공된 핸들러(이 경우 Gorilla Mux 라우터)를 사용하여 서버를 생성합니다. 예는 다음과 같습니다.
func TestIndex(t *testing.T) {
// Create server using the router initialized elsewhere.
ts := httptest.NewServer(router)
defer ts.Close()
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
}{
// Test GET and POST requests.
{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)
}
// check for expected response here.
})
}
}
httptest.Server는 Gorilla mux뿐만 아니라 http.Handler 인터페이스를 만족하는 모든 핸들러를 테스트하는 데 사용할 수 있습니다.
고려 사항
라이브 서버 테스트는 보다 현실적인 테스트를 제공하지만 단위 테스트보다 속도가 느리고 리소스 집약적일 수도 있습니다. 포괄적인 테스트 전략을 위해 단위 테스트와 통합 테스트의 조합을 고려하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3