httpclient介面測試中重試控制器設定
阿新 • • 發佈:2019-09-24
本人在使用httpclient做介面測試的過程中,之前並沒有考慮到請求失敗自動重試的情況,但有時又需要在發生某些錯誤的時候重試,比如超時,比如響應頻繁被拒絕等等,在看過官方的示例後,自己寫了一個自動重試的控制器。分享程式碼,供大家參考。
下面是獲取控制器的方法:
/** * 獲取重試控制器 * * @return */ private static HttpRequestRetryHandler getHttpRequestRetryHandler() { return new HttpRequestRetryHandler() { public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { logger.warn("請求發生錯誤!", exception); if (executionCount > HttpClientConstant.TRY_TIMES) return false; if (exception instanceof NoHttpResponseException) { logger.warn("沒有響應異常"); sleep(1); return true; } else if (exception instanceof ConnectTimeoutException) { logger.warn("連線超時,重試"); sleep(5); return true; } else if (exception instanceof SSLHandshakeException) { logger.warn("本地證書異常"); return false; } else if (exception instanceof InterruptedIOException) { logger.warn("IO中斷異常"); sleep(1); return true; } else if (exception instanceof UnknownHostException) { logger.warn("找不到伺服器異常"); return false; } else if (exception instanceof SSLException) { logger.warn("SSL異常"); return false; } else if (exception instanceof HttpHostConnectException) { logger.warn("主機連線異常"); return false; } else if (exception instanceof SocketException) { logger.warn("socket異常"); return false; } else { logger.warn("未記錄的請求異常:{}", exception.getClass()); } HttpClientContext clientContext = HttpClientContext.adapt(context); HttpRequest request = clientContext.getRequest(); // 如果請求是冪等的,則重試 if (!(request instanceof HttpEntityEnclosingRequest)) { sleep(2); return true; } return false; } }; }
這樣超時時間和重試次數來作為判斷介面請求失敗的依據了。下面是控制器設定方法:
/** * 通過連線池獲取https協議請求物件 * <p> * 增加預設的請求控制器,和請求配置,連線控制器,取消了cookiestore,單獨解析響應set-cookie和傳送請求的header,適配多使用者同時線上的情況 * </p> * * @return */ private static CloseableHttpClient getCloseableHttpsClients() { // 建立自定義的httpsclient物件 CloseableHttpClient client = HttpClients.custom().setConnectionManager(connManager).setRetryHandler(httpRequestRetryHandler).setDefaultRequestConfig(requestConfig).build(); // CloseableHttpClient client = HttpClients.createDefault();//非連線池建立 return client; }
技術類文章精選
- java一行程式碼列印心形
- Linux效能監控軟體netdata中文漢化版
- 介面測試程式碼覆蓋率(jacoco)方案分享
- 效能測試框架
- 如何在Linux命令列介面愉快進行效能測試
- 圖解HTTP腦圖
- 如何測試概率型業務介面
- httpclient處理多使用者同時線上
- 將swagger文件自動變成測試程式碼
- 五行程式碼構建靜態部落格
- httpclient如何處理302重定向
- 基於java的直線型介面測試框架初探
- Tcloud 雲測平臺--集大成者
非技術文章精選
- 為什麼選擇軟體測試作為職業道路?
- 成為傑出Java開發人員的10個步驟
- 寫給所有人的程式設計思維
- 自動化測試的障礙
- 自動化測試的問題所在
- 測試之《程式碼不朽》腦圖
- 成為優秀自動化測試工程師的7個步驟
- 優秀軟體開發人員的態度
- 如何正確執行功能API測試
- 未來10年軟體測試的新趨勢-上
- 未來10年軟體測試的新趨勢-上
- 自動化測試解決了什麼問題