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

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



猜你喜欢

转载自blog.csdn.net/fhaohaizi/article/details/79262875