1. 程式人生 > >httpclient介面測試中重試控制器設定

httpclient介面測試中重試控制器設定

本人在使用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;
    }

技術類文章精選

  1. java一行程式碼列印心形
  2. Linux效能監控軟體netdata中文漢化版
  3. 介面測試程式碼覆蓋率(jacoco)方案分享
  4. 效能測試框架
  5. 如何在Linux命令列介面愉快進行效能測試
  6. 圖解HTTP腦圖
  7. 如何測試概率型業務介面
  8. httpclient處理多使用者同時線上
  9. 將swagger文件自動變成測試程式碼
  10. 五行程式碼構建靜態部落格
  11. httpclient如何處理302重定向
  12. 基於java的直線型介面測試框架初探
  13. Tcloud 雲測平臺--集大成者

非技術文章精選

  1. 為什麼選擇軟體測試作為職業道路?
  2. 成為傑出Java開發人員的10個步驟
  3. 寫給所有人的程式設計思維
  4. 自動化測試的障礙
  5. 自動化測試的問題所在
  6. 測試之《程式碼不朽》腦圖
  7. 成為優秀自動化測試工程師的7個步驟
  8. 優秀軟體開發人員的態度
  9. 如何正確執行功能API測試
  10. 未來10年軟體測試的新趨勢-上
  11. 未來10年軟體測試的新趨勢-上
  12. 自動化測試解決了什麼問題

點選檢