性能压测工具 -JAVA
发布于: 2021 年 01 月 08 日

题目
用你熟悉的编程语言写一个 Web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com
实现代码
public class LoadTester { private static final long REQUEST_FAILED_TIME = -1L; private static CopyOnWriteArrayList<Long> results = new CopyOnWriteArrayList<>(); private static ExecutorService executor = Executors.newCachedThreadPool(); public static void main(String[] args) throws InterruptedException { doTest("https://www.baidu.com/", 10); doTest("https://www.baidu.com/", 100); }
/** * @param concurrentRequestThreads 并发请求数量 * @param address http地址 */ private static void doTest(String address, int concurrentRequestThreads) throws InterruptedException { CyclicBarrier cyclicBarrier = new CyclicBarrier(concurrentRequestThreads); CountDownLatch latch = new CountDownLatch(concurrentRequestThreads); for (int i = 0; i < concurrentRequestThreads; i++) { executor.submit(() -> { try { //等待并发 cyclicBarrier.await(); long timeElapsed = sendRequest(address); results.add(timeElapsed); } catch (Exception e) { e.printStackTrace(); } finally { latch.countDown(); } }); } latch.await(); System.out.println("并发测试,数量======================= " + concurrentRequestThreads); //排除失败请求,计算平均响应时间 double avgTime = results.stream().filter(time -> time != REQUEST_FAILED_TIME).mapToLong(Long::longValue).average().getAsDouble(); System.out.println("平均响应时间为===> " + avgTime); long failedCount = results.stream().filter(time -> time == REQUEST_FAILED_TIME).count(); System.out.println("失败请求数===> " + failedCount); //计算95%响应时间 List<Long> successfulResults = results.stream().filter(time -> time != REQUEST_FAILED_TIME).collect(Collectors.toList()); int index = (int) (0.95 * successfulResults.size()); long time = successfulResults.get(index); System.out.println("95%响应时间为===> " + time); results.clear(); }
/** * 对目标地址发起请求,成功返回消耗时间(ms),失败返回-1 * @param address http请求地址 * @return */ private static long sendRequest(String address) { long startTime = System.currentTimeMillis(); String content = HttpUtils.get(address, null); if (null == content || content.length() == 0) { return REQUEST_FAILED_TIME; } System.out.println(content); long endTime = System.currentTimeMillis(); return endTime - startTime; }
}复制代码
执行结果截图
划线
评论
复制
发布于: 2021 年 01 月 08 日阅读数: 61
锐
关注
还未添加个人签名 2018.04.29 加入
还未添加个人简介











评论