Go에서 라이브 요청으로 HTTP 서버 테스트
당면한 문제는 HTTP 핸들러 기능이 다양한 HTTP 요청 방법에 올바르게 응답하는지 확인하는 것입니다. (GET 및 POST) 라이브 서버 시나리오에서. 이를 위해서는 단위 테스트에만 의존하기보다는 실제 서버의 컨텍스트 내에서 핸들러를 테스트해야 합니다.
이를 달성하기 위해 net/http/httptest.Server 유형이 솔루션을 제공합니다. 특정 라우터를 사용하는 라이브 서버를 생성할 수 있습니다. 라우터는 Gorilla mux(질문에서 언급한 대로), net/http의 ServeMux 또는 net/http 핸들러 인터페이스를 만족하는 기타 구현을 기반으로 할 수 있습니다.
다음은 라이브 서버를 설정하는 방법에 대한 예입니다. 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>
이 예에서는 라우터가 테스트 기능 외부에서 초기화되는 것으로 가정합니다. 그런 다음 라우터를 사용하여 httptest.Server가 생성되고 테스트가 완료되면 닫힙니다. newreq 함수는 특정 메서드와 URL이 포함된 요청을 생성하는 데 사용됩니다. 테스트 케이스는 쉬운 반복을 용이하게 하기 위해 구조체 조각으로 정의됩니다.
http.DefaultClient.Do()를 사용하여 서버에 라이브 요청을 보내면 다음 컨텍스트에서 핸들러 함수의 동작을 검증할 수 있습니다. 라이브 서버. 이는 격리된 단위 테스트에 비해 더 포괄적인 테스트 접근 방식을 제공합니다.
이 답변의 접근 방식과 세부 정보는 Gorilla Mux뿐만 아니라 http.Handler 인터페이스를 구현하는 모든 라우터에 적용 가능합니다.
위 내용은 Go에서 라이브 요청으로 HTTP 서버 핸들러를 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!