简易 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 加入
还未添加个人简介
 
 
  
  
 
 
 
  
  
  
  
  
  
  
  
    
评论