首页 > 解决方案 > 如何测试客户端代码是否正确超时 API 请求到外部服务器

问题描述

嗨,我有以下 GoLang 代码片段。

    func executeAuthorisationRequest(request http.Request) (*AuthorisationResponse, error) {
    var response AuthResponse
   
    client := &http.Client{
        Timeout: time.Second * 10
    }
    requestResult, requestError := client.Do(&request)
    if requestError != nil {
       log.Error(fmt.Sprintf("Some error %s", request.Error()))
    }
 }

请求在此处创建

  func creatRequest(url string, body url.Values) (*http.Request, error){
    
    req,reqError := http.NewRequest(http.MethodPost,url,strings.NewReader(body.Encode()))

if reqError != nil {
  //Error handle
}

req.Header.Add("Content-Type","some business logic")

return request,nil

}

我正在尝试创建一个测试用例,如果服务器端 API 花费太长时间,我的客户端代码将在 10 秒后超时,我该如何模拟/创建这样的测试用例

我无权访问服务器端代码

任何指导将不胜感激,请指出我正确的方向。

标签: httpgoclient

解决方案


您需要 lib httptest 示例:

func TestTimeout(t *testing.T) {
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        time.Sleep(time.Second * 15)
    }))
    defer ts.Close()
    client := &http.Client{
        Timeout: time.Second * 10,
    }
    res, err := client.Get(ts.URL)
    if err != nil {
        t.Fatal(err)
    }
    res.Body.Close()}

推荐阅读