httpclient做接口测试时,如何设置自动重试

本人在使用httpclient做接口测试的过程中,之前并没有考虑到请求失败自动重试的情况,但有时又需要在发生某些错误的时候重试,比如超时,比如响应频繁被拒绝等等,在看过官方的示例后,自己写了一个自动重试的控制器。分享代码,供大家参考。

下面是获取控制器的方法:

/**
	 * 获取重试控制器
	 *
	 * @return
	 */
	private static HttpRequestRetryHandler getHttpRequestRetryHandler() {
		return new HttpRequestRetryHandler() {
			public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
				if (executionCount > TRY_TIMES) //超过重试次数,就放弃
					return false;
				if (exception instanceof NoHttpResponseException) {//没有响应,重试
					return true;
				} else if (exception instanceof SSLHandshakeException) {//本地证书异常
					return false;
				} else if (exception instanceof InterruptedIOException) {//被中断
					return false;
				} else if (exception instanceof UnknownHostException) {//找不到服务器
					return false;
				} else if (exception instanceof ConnectTimeoutException) {//连接超时,重试
					return true;
				} else if (exception instanceof SSLException) {//SSL异常
					return false;
				} else {
					output("未记录的请求异常:" + exception.getClass());
				}
				HttpClientContext clientContext = HttpClientContext.adapt(context);
				HttpRequest request = clientContext.getRequest();
				// 如果请求是幂等的,则重试
				if (!(request instanceof HttpEntityEnclosingRequest)) return true;
				return false;
			}
		};
	}

这样超时时间和重试次数来作为判断接口请求失败的依据了。下面是控制器设置方法:

	/**
	 * 获取https协议请求对象
	 *
	 * @return
	 */
	private static CloseableHttpClient getCloseableHttpsClients() {
		// 创建自定义的httpsclient对象
		CloseableHttpClient client = HttpClients.custom().setConnectionManager(connManager).setRetryHandler(httpRequestRetryHandler).build();
		// CloseableHttpClient client = HttpClients.createDefault();//非连接池创建
		return client;
	}

欢迎有兴趣的朋友一起交流:群号:340964272


猜你喜欢

转载自blog.csdn.net/fhaohaizi/article/details/80262760
今日推荐