第七周作业

用户头像
andy
关注
发布于: 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;
}

}




用户头像

andy

关注

还未添加个人签名 2018.11.29 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签,方便分类
2020 年 07 月 21 日 10:54
回复
没有更多了
第七周作业