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

在JMeter中服务器未返回HTTP响应仅发TCP报文时如何让流程继续执行?

可行解决方案

以下三种方案可根据你的使用场景选择:


方案1:调整HTTP请求超时+自定义成功判定(无需更换采样器,改动最小)

  • 打开对应HTTP请求采样器的「高级」设置 tab,在*响应超时(毫秒)*栏填写合理阈值(可参考TCP报文返回的平均时长上浮30%50%,比如200500ms),超时后采样器会自动终止等待,不会持续卡住。
  • 添加JSR223断言,使用如下Groovy脚本自定义采样结果状态,只要请求成功发出、无连接级错误就判定为成功:
// prev为JMeter内置的当前采样结果对象
if (!prev.getResponseMessage().contains("Connection refused") 
    && !prev.getResponseMessage().contains("Connect timed out")) {
    prev.setSuccessful(true)
    prev.setResponseMessage("请求已发送,TCP层已收到ACK确认")
}

方案2:替换为TCP采样器(适配非HTTP响应场景,逻辑最贴合)

你的场景中服务器无标准HTTP响应,本质是TCP层面的交互,直接使用TCP采样器更合理:

  • 新建TCP采样器,配置目标服务器IP、端口,在「要发送的文本」字段填入完整的HTTP请求报文(和你此前HTTP采样器发出的请求内容完全一致,包含请求行、请求头、空行、请求体)。
  • 配置TCP采样器的超时规则,只要连接建立、请求发送成功、收到TCP层ACK报文就标记为采样成功,不需要等待应用层响应。

方案3:自定义HTTP发送代码(灵活度最高)

如果需要保留HTTP请求的自动构造能力,不想手动拼接HTTP报文,可使用JSR223采样器写代码发送请求,发送完成后直接标记成功,无需等待响应:

import org.apache.http.client.methods.HttpPost
import org.apache.http.impl.client.HttpClients
import org.apache.http.entity.StringEntity

// 初始化HTTP客户端
def httpClient = HttpClients.createDefault()
// 构造请求
def post = new HttpPost("替换为你的目标接口URL")
post.addHeader("Content-Type", "替换为你的请求Content-Type")
post.setEntity(new StringEntity("替换为你的请求体内容", "UTF-8"))
// 发送请求
def response = httpClient.execute(post)
// 直接标记成功,无需读取响应
prev.setSuccessful(true)
// 释放资源
response.close()
httpClient.close()

相关参考截图

  • 采样结果:sample result :
  • 响应数据:response data
  • 响应体:response body
  • 补充截图:enter image description here

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:39:02