本人在使用 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