简易 web 性能工具
发布于: 2020 年 07 月 27 日
用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:
平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。
package other;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.concurrent.*;/** * * 用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数: * 平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。 * */public class WebTest { /** * 相应时间集合 */ private static List<Long> responseCostList = new ArrayList<>(); public void httpTest(String url,int requestCount,int concurrentCount){ ExecutorService executor = new ThreadPoolExecutor(concurrentCount, concurrentCount,1000, TimeUnit.SECONDS, new ArrayBlockingQueue<>(requestCount)); int loopCount = requestCount / concurrentCount; for (int i = 0; i < loopCount; i++) { for (int j = 0; j < concurrentCount; j++) { Task t = new Task(url); Future<Long> result = executor.submit(t); try { responseCostList.add(result.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } Collections.sort(responseCostList); Long sum = responseCostList.stream().mapToLong(value -> value).sum(); System.out.println("平均响应时间:" + (sum/requestCount) +" ms"); Long c95 = responseCostList.get(95); System.out.println("95%响应时间:" + c95 +" ms"); executor.shutdown(); } public static void main(String[] args) { WebTest test = new WebTest(); test.httpTest("http://www.baidu.com",100,10); } class Task implements Callable<Long>{ private String url ; public Task(String url){ this.url = url; } @Override public Long call(){ long current = System.currentTimeMillis(); HttpClientUtil.get(url,10000); long finish = System.currentTimeMillis(); return finish-current; } }}
输出:
划线
评论
复制
发布于: 2020 年 07 月 27 日 阅读数: 43
版权声明: 本文为 InfoQ 作者【王鹏飞】的原创文章。
原文链接:【http://xie.infoq.cn/article/f2abc61ec26a9bfcbb3bb13c6】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
王鹏飞
关注
还未添加个人签名 2019.06.11 加入
还未添加个人简介
评论