您的位置:首页 > 理论基础 > 计算机网络

httpclient 接口测试多线程并发类封装

2018-02-05 18:11 411 查看
本人在使用 httpclient 进行接口测试的过程中,需要对接口的并发性能进行简单的测试,在学习了 java 多线程之后,写了一个多线程类来封装多线程执行某一个请求的方法,并将请求响应时间存在本地文件,然后用 Python 读取用 plotly 统计出表格。

下面分享一下多线程执行某个请求类的代码,供大家参考。

package source;

import java.util.Date;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.http.client.methods.HttpRequestBase;

public class Concurrent extends ApiLibrary {
public static HttpRequestBase request;
public int threads = 5;
public int times = 50;

@SuppressWarnings("unused")
private Concurrent() {
}

/**
* 多线程执行请求方法
*
* @param request
*            被执行的请求
* @param threads
*            线程数
* @param times
*            每个线程运行的次数
*/
public Concurrent(HttpRequestBase request, int threads, int times) {
Concurrent.request = request;
this.threads = threads;
this.times = times;
}

/**
* 执行多线程任务
*/
public void excuteTreads() {
ExecutorService executorService = Executors.newFixedThreadPool(threads);
CountDownLatch countDownLatch = new CountDownLatch(threads);
Date start = new Date();
for (int i = 0; i < threads; i++) {
executorService.execute(new More(countDownLatch));
}
try {
countDownLatch.await();
executorService.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();
}
Date end = new Date();
output("总计" + threads + "个线程,总计" + (threads * times) + "次请求,共用时:" + getTimeDiffer(start, end) + "秒!");
saveRequestTimes();
}

/**
* 保存请求时间到本地文件
*/
public static void saveRequestTimes() {
StringBuffer buffer = new StringBuffer();
int length = testTimes.size();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(testTimes.get(0));
continue;
}
buffer.append(LINE + testTimes.get(i));
}
logLong(buffer.toString());
}

/**
* 多线程类
*
* @Author [Vicky]
* @Description
* @UpdateRemark
* @UpdateDate: [2018年1月30日 上午11:14:53]
* @CreateDate: [2018年1月30日 上午11:14:53]
*/
class More implements Runnable {
public CountDownLatch countDownLatch;

public More(CountDownLatch countDownLatch) {
this.countDownLatch = countDownLatch;
}

@Override
public void run() {
try {
excuteRequest(Concurrent.request, times);
} finally {
countDownLatch.countDown();
}
}

}
}

末了宣传一下自己的 QQ群:群号:340964272

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息