我想对我的服务端点进行压力测试,发出 http POST 请求。
我希望解决方案能够:
- 发出一定数量的请求,例如 100K
- 继续运行 x 分钟
到目前为止,我使用如下执行器服务创建了我的解决方案:
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 次。
如何修改它才能运行指定的分钟数?
为了获得开始/结束时间统计信息,我将不得不使用 futures,以便每个线程并返回正确运行需要多长时间?
此外,在我的可运行任务中,我正在创建 HttpClient 对象的新实例,并加载随帖子发送的文件。我猜这会减慢我的基准测试,有没有办法在除了实际调用发出请求之外的所有设置中重新使用 httpclient?
在有人提到它之前,我知道已经有像 jmeter 等工具可以做到这一点,但我想了解它是如何工作的,并且稍后我将做一些我想要完全控制的自定义事情。
最佳答案
如果您可以使用 Apache JMeter,为什么还要自己制作呢?您可以制作一个简单的插件来满足您的应用程序需求,然后让 JMeter 的所有负载生成功能触手可及。包括间歇跑等等。
关于java - 压测服务端点,使用x个线程发送100K请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757095/