如何测试客户端代码是不是正确超时 API 请求到外部服务器

Posted

技术标签:

【中文标题】如何测试客户端代码是不是正确超时 API 请求到外部服务器【英文标题】:How to test if client side code correctly timeout API request to external server如何测试客户端代码是否正确超时 API 请求到外部服务器 【发布时间】:2021-12-08 17:55:51 【问题描述】:

您好,我有以下 GoLang 代码 sn-p。

    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 秒后超时,我该如何模拟/创建这样的测试用例

我无权访问服务器端代码

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

【问题讨论】:

请重新使用 http.Client,它们不应该是单次使用的。 【参考方案1】:

你需要 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()

【讨论】:

为什么你有 time.Sleep(time.Second * 15) 只是想在实现之前理解你的代码? 要测试客户端指定的超时时间,服务器响应时间必须比超时时间长。十五秒比十秒长。 我的代码接受 POST 请求而不是 GET 请求,我需要如何更改此代码来解决该特定问题? 使用res, err := client.Post() 或使用client.Do()

以上是关于如何测试客户端代码是不是正确超时 API 请求到外部服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中为 BigQuery API 请求设置超时

我应该如何创建一个总是超时的测试资源

如何在 Spring Boot REST API 上设置超时?

java项目页面为啥会超时?

如何解决SSH连接Linux超时自动断开

获取 API 请求超时?