首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >httpclient接口测试中重试控制器设置

httpclient接口测试中重试控制器设置

作者头像
FunTester
发布2019-09-25 09:53:27
8080
发布2019-09-25 09:53:27
举报
文章被收录于专栏:FunTesterFunTester

本人在使用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年软件测试的新趋势-上
点击查看公众号地图
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
应用性能监控
应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档