我想对我的服务端点进行压力测试,发出 http POST 请求。
我希望解决方案能够:
- 发出一定数量的请求,例如 100K
- 继续运行 x 分钟
到目前为止,我使用 executorservice 创建了我的解决方案,例如:
int MAX_THREADS = 20;
int MAX_REQUESTS = 1000;
ExecutorService es = Executors.newFixedThreadPool(MAX_THREADS);
for(int x = 0; x < MAX_REQUESTS; x++) {
es.execute(new MyTask());
}
es.shutdown();
try {
es.awaitTermination(..);
}
catch(...) {
}
MyTask 实现 Runnable 的地方,它使用 HttpClient (apache) 制作 HttpPost。
所以这会创建一组线程池,然后调用任务 x 次。
如何修改它以使其也能够运行指定的分钟数?
为了让我获得开始/结束时间统计信息,我将不得不使用期货,所以每个线程并返回正确运行所需的时间?
此外,在我的可运行任务中,我正在创建一个新的 HttpClient 对象实例,并加载一个随帖子发送的文件。我猜这会减慢我的基准测试速度,除了实际调用来发出请求之外,有没有办法在所有设置中重新使用 httpclient?
在任何人提到它之前,我知道已经有 jmeter 等工具可以做到这一点,但我想了解它是如何工作的,并且稍后我将做一些我想要完全控制的自定义事情。