博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用HttpClient模拟并发请求 - 压力测试
阅读量:6504 次
发布时间:2019-06-24

本文共 4190 字,大约阅读时间需要 13 分钟。

POM文件引入httpclient

org.apache.httpcomponents
httpclient
4.5.3

http 请求工具

package com.raytoo.common.toolbox.http;import java.io.IOException;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.config.CookieSpecs;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * http 工具 */public class HttpTool {        private static Logger logger = LoggerFactory.getLogger(HttpTool.class);        private static String ENCODING = "UTF-8";        private static String CONTENT_TYPE = "application/json";        /**     * 发送POST请求,参数是JSON     */    public static String requestPost(String url, String jsonParam){        logger.info("HttpTool.requestPost 开始 请求url:" + url + ", 参数:" + jsonParam);        //创建HttpClient对象        CloseableHttpClient client = HttpClients.createDefault();        //创建HttpPost对象        HttpPost httpPost = new HttpPost(url);                //配置请求参数        RequestConfig requestConfig = RequestConfig.custom()                .setCookieSpec(CookieSpecs.DEFAULT)                .setExpectContinueEnabled(true)                .setSocketTimeout(5000)                  .setConnectTimeout(5000)                  .setConnectionRequestTimeout(5000)                  .build();                httpPost.setConfig(requestConfig);                String respContent = null;                    //设置参数和请求方式        StringEntity entity = new StringEntity(jsonParam,ENCODING);//解决中文乱码问题            entity.setContentEncoding(ENCODING);            entity.setContentType(CONTENT_TYPE);                  httpPost.setEntity(entity);                    HttpResponse resp;        try {            //执行请求            resp = client.execute(httpPost);            if(resp.getStatusLine().getStatusCode() == 200) {                HttpEntity responseObj = resp.getEntity();                respContent = EntityUtils.toString(responseObj,"UTF-8");            }        } catch (IOException e) {            e.printStackTrace();            logger.info("HttpTool.requestPost 异常 请求url:" + url + ", 参数:" + jsonParam + ",异常信息:" + e);        }        logger.info("HttpTool.requestPost 结束 请求url:" + url + ", 参数:" + jsonParam + "");        //返回数据        return respContent;    }}

异步执行HTTP请求和并发测试demo

package com.raytoo.common.toolbox.http;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import com.alibaba.fastjson.JSON;import com.google.common.collect.Lists;/** * 异步执行HTTP请求 */public class HttpCallable implements Callable
{ private String url; private String jsonParams; public HttpCallable(String url, String jsonParams){ this.url = url; this.jsonParams = jsonParams; } /** * 执行并返回结果 */ @Override public String call() throws Exception { return HttpTool.requestPost(url, jsonParams); } /** * 模拟并发测试 */ public static void main(String[] args) throws InterruptedException, ExecutionException { //模拟并发数 int concurrencyNumber = 1000; List
resList = Lists.newArrayList(); //执行线程池 ExecutorService ex = Executors.newFixedThreadPool(100); String url = "www.baidu.com"; Map
mapPatam = new HashMap<>(); mapPatam.put("name", "测试"); for(int i =0 ; i< concurrencyNumber; i++){ Future
callRes = ex.submit(new HttpCallable(url, JSON.toJSONString(mapPatam))); resList.add(i + ">>>" + callRes.get()); } for(String s : resList){ System.out.println("------>" + s); } }}

转载地址:http://ccqyo.baihongyu.com/

你可能感兴趣的文章
开放才能进步!Angular和Wijmo一起走过的日子
查看>>
Java开发者必读的10篇精选优秀技术文章
查看>>
Oracle宣布提供新的Java支持价格体系
查看>>
IP路由与转发
查看>>
专访朱诗雄:Apache Spark中的全新流式引擎Structured Streaming
查看>>
AI+社交,快手商业化落地之道
查看>>
re:Invent大会第四天:为什么Lambda值得你更多关注?
查看>>
11个Visual Studio代码性能分析工具
查看>>
vue2.0一起在懵逼的海洋里越陷越深(四)
查看>>
为什么Python发展得如此之快?
查看>>
Kubernetes日志分析利器:Elassandra部署使用指南
查看>>
与Susan Fowler探讨生产就绪微服务之问答
查看>>
云原生持续交付的模式和实践
查看>>
美国国会为苹果和FBI举行了听证会
查看>>
Reinhold就Jigsaw投票一事向JCP提交公开信
查看>>
QCon全球软件开发大会(北京站)2015精彩回顾和总结
查看>>
Kong 发布 Kong Brain 和 Kong Immunity,可进行智能自动化和适应性监控
查看>>
es6(二):字符串的扩展
查看>>
智能手机拍照进化论:从传感器到算法摄影
查看>>
magento2项目上线注意事项
查看>>