httpclient接口測試中重試控制器設置

本人在使用httpclient作接口測試的過程當中,以前並無考慮到請求失敗自動重試的狀況,但有時又須要在發生某些錯誤的時候重試,好比超時,好比響應頻繁被拒絕等等,在看過官方的示例後,本身寫了一個自動重試的控制器。分享代碼,供你們參考。java

下面是獲取控制器的方法:編程

/**
     * 獲取重試控制器
     *
     * @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. 自動化測試解決了什麼問題

點擊查看公衆號地圖

相關文章
相關標籤/搜索