第七周作业
发布于: 2020 年 07 月 20 日
用你熟悉的编程语言写一个 web 性能压测工具,
输入参数:URL,请求总次数,并发数。
输出参数:平均响应时间,95% 响应时间。
用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。
import org.apache.http.HttpStatus;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by ANDY on 2020/7/17. * * 用你熟悉的编程语言写一个 web 性能压测工具, * 输入参数:URL,请求总次数,并发数。 * 输出参数:平均响应时间,95% 响应时间。 * 用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。 */public class Test { public static void main(String[] args){ new Test().test("http://www.baidu.com",2,5); System.exit(0); } public void test(final String url,int totalCount,int bfCount){ ExecutorService threadPools = Executors.newFixedThreadPool(bfCount); final CountDownLatch countD = new CountDownLatch(totalCount); long startTime = System.currentTimeMillis(); long endTime = 0l; final List<Long> times = new ArrayList<Long>(totalCount); for(int i = 0 ; i < totalCount ; i++){ threadPools.execute(new Runnable() { public void run() { try{ times.add(sendRequest(url));// System.out.println(Thread.currentThread().getName()); }catch (Exception e){ }finally { countD.countDown(); } } }); } try{ countD.await(); }catch (Exception e){ }finally { endTime = System.currentTimeMillis(); System.out.println("it's ok !"); } Collections.sort(times);// 95%响应时间 int no_95 =totalCount*95/100; long i = 1l; long tmp= 0l; for(long no:times){ tmp+= no; //简单判定95%响应时间 if(i/totalCount == no_95 || i== no_95){ System.out.println("95%响应时间为:"+no + "ms"); } i++; } System.out.println("平均响应时间:"+tmp/totalCount +"ms"); } /** * * @param url * @return 请求目标地址,并返回请求耗时time */ public long sendRequest(String url){ long startTime = System.currentTimeMillis(); long endTime = 0l; CloseableHttpClient client = HttpClients.createDefault(); // 发送get请求 HttpGet request = new HttpGet(url); CloseableHttpResponse response = null; try { response = client.execute(request); // 请求发送成功,并得到响应 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //可以统计请求成功次数 } else { System.out.println("get请求提交失败:" + url); } } catch (IOException e) { e.printStackTrace(); }finally { request.releaseConnection(); endTime = System.currentTimeMillis(); } System.out.println("cost time" + (endTime-startTime)); return endTime-startTime; }}
划线
评论
复制
发布于: 2020 年 07 月 20 日 阅读数: 26
![用户头像](http://static001.geekbang.org/account/avatar/00/14/5a/c4/d676b8b0.jpg?x-oss-process=image/resize,w_200,h_200)
andy
关注
还未添加个人签名 2018.11.29 加入
还未添加个人简介
评论 (1 条评论)