JMeter:处理 HTTP 请求失败并标记为成功
重要提示: 通常情况下,不建议 将失败的请求标记为成功。明确知道需要这样做,并且已经充分考虑了其影响的情况下,才应该使用这种方法。常见的使用场景包括:
- 测试应用的容错能力: 测试应用程序在 API 接口不可用时的行为。
- 暂时忽略某些已知错误: 在开发或调试阶段,暂时忽略某些已知的问题,以便专注于其他功能的测试。
核心思想: 使用后置处理器(PostProcessor)捕获请求的失败状态,并手动将其修改为成功。
HTTP 请求处理:
-
HTTP Request Sampler: 按照正常方式配置你的 HTTP 请求,包括 URL、请求方法、请求参数等。
-
JSR223 PostProcessor (强烈推荐使用 Groovy): 在 HTTP Request Sampler 下添加一个 JSR223 PostProcessor-Groovy
if (!prev.isSuccessful()) { // 检查前一个 sampler 是否失败 def errorMessage = prev.getErrorMessage() // 获取原始错误信息 log.error("Original HTTP request error: " + errorMessage) // 记录原始错误信息到 JMeter 日志 prev.setSuccessful(true) // 将请求标记为成功 prev.setResponseCode("200") // 设置响应代码为 200 OK,或者其他你认为合适的成功代码 prev.setResponseMessage("HTTP request failed but marked as successful. Original error: " + errorMessage) // 设置自定义响应消息,包含原始错误信息 prev.setResponseData("{\"status\":\"success\",\"message\":\"HTTP operation failed but handled gracefully. Original error: " + errorMessage + "\"}", "UTF-8") // 设置自定义响应数据 (JSON 格式),包含原始错误信息 }
代码详细解释:
!prev.isSuccessful()
:这是判断前一个 sampler 是否失败的有效方法。它会检查各种可能的失败原因,包括网络错误、连接超时、响应代码非 2xx、断言失败等。def errorMessage = prev.getErrorMessage()
:获取原始的错误信息。务必使用log.error()
将此信息记录到 JMeter 日志中。 这很重要,因为即使你将请求标记为成功,你也需要在日志中保留原始的错误记录,以便后续分析和排查问题。prev.setSuccessful(true)
:将前一个 sampler 标记为成功,将 sampler 的状态修改为成功,监听器中显示红色失败标记。prev.setResponseCode("200")
:设置响应代码为 200 OK。你可以根据实际情况设置其他合适的成功代码。prev.setResponseMessage(...)
:设置自定义的响应消息。建议包含原始错误信息,以便在“查看结果树”中查看请求被标记为成功的原因。prev.setResponseData(...)
:设置自定义的响应数据。建议使用 JSON 格式,方便解析和处理。同样,建议包含原始错误信息。
BeanShell PostProcessor (不推荐,但可用):
如果你使用 BeanShell,代码如下:
if (!prev.isSuccessful()) {
String errorMessage = prev.getErrorMessage();
log.error("Original HTTP request error: " + errorMessage);
prev.setSuccessful(true);
prev.setResponseCode("200");
prev.setResponseMessage("HTTP request failed but marked as successful. Original error: " + errorMessage);
prev.setResponseData("{\"status\":\"success\",\"message\":\"HTTP operation failed but handled gracefully. Original error: " + errorMessage + "\"}", "UTF-8");
}
标签:JMeter,HTTP,请求,标记,errorMessage,错误信息,error,prev
From: https://www.cnblogs.com/yimouz-219/p/18676413