如何测试客户端代码是不是正确超时 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 请求设置超时