You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置JMeter使请求无需等待响应,按每秒1次频率发送

解决JMeter每秒发一次请求(无需等待响应)的问题

为什么Constant Throughput Timer无效?

Constant Throughput Timer是基于采样完成时间来调控吞吐量的,它需要等待上一个请求完全结束(收到响应)后,才会计算下一次请求的触发时机。你的请求响应耗时5秒,所以每次循环都要等5秒才会发下一个,自然总耗时50秒,达不到每秒1次的发送频率。

设置请求超时是否可行?

可行,但有明显弊端:

  • 把HTTP请求的超时时间设为极短(比如1毫秒),JMeter会在超时后立即终止等待,进入下一个请求,确实能实现每秒发一次,但所有请求会被标记为「超时失败」。
  • 如果你的测试只需要模拟请求发送频率,不需要关注响应结果,这个方法可以临时用,但会导致JMeter主动断开连接,可能造成服务端的连接资源未正常释放,长期测试可能影响服务稳定性。

更优解决方案

1. 使用异步HTTP请求(推荐)

在HTTP请求采样器的「高级」标签页中,勾选「异步请求」(部分JMeter版本标注为Async Request)。开启后,JMeter发送请求后会立即执行下一个步骤,无需等待响应。

  • 配合Constant Timer(设置1000毫秒),线程组循环10次,就能实现每秒发送1次请求,总耗时约10秒。
  • 若需要获取响应,可后续添加「异步请求响应采样器」来收集异步请求的返回结果。

2. 用JSR223 Sampler编写异步请求脚本

通过Groovy脚本实现异步HTTP请求,发送后直接进入下一个步骤,完全脱离同步等待的限制。示例脚本:

import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import java.net.URI

// 初始化HTTP客户端
def httpClient = HttpClient.newHttpClient()
// 构建请求
def request = HttpRequest.newBuilder()
    .uri(URI.create("你的目标请求URL"))
    .method("GET", HttpRequest.BodyPublishers.noBody()) // 根据实际请求方法调整
    .build()

// 异步发送请求,不阻塞后续执行
httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
  • 在JSR223 Sampler后添加Constant Timer(1000毫秒),线程组循环10次,即可实现每秒1次的发送频率。
  • 这种方式灵活性更高,可自定义请求头、参数等,适合复杂场景。

3. 使用Parallel Controller(适用于批量异步场景)

若需要一次性发起多个异步请求并控制间隔,可将HTTP请求放入Parallel Controller,结合Loop Controller和Constant Timer实现:

  • 线程组设置1用户,循环10次。
  • 每次循环内添加Parallel Controller,放入HTTP请求(开启异步)。
  • 在Parallel Controller外添加Constant Timer(1000毫秒),确保每次循环间隔1秒。

内容的提问来源于stack exchange,提问作者Nathan Drake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:33:35