在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()
相关参考截图
- 采样结果:

- 响应数据:

- 响应体:

- 补充截图:

内容的提问来源于stack exchange,提问作者Beklevir
相关产品推荐
相关产品推荐

