JMeter:处理 HTTP 请求失败并标记为成功

JMeter:处理 HTTP 请求失败并标记为成功

重要提示: 通常情况下,不建议 将失败的请求标记为成功。明确知道需要这样做,并且已经充分考虑了其影响的情况下,才应该使用这种方法。常见的使用场景包括:

  • 测试应用的容错能力: 测试应用程序在 API 接口不可用时的行为。
  • 暂时忽略某些已知错误: 在开发或调试阶段,暂时忽略某些已知的问题,以便专注于其他功能的测试。

核心思想: 使用后置处理器(PostProcessor)捕获请求的失败状态,并手动将其修改为成功。

HTTP 请求处理:

  1. HTTP Request Sampler: 按照正常方式配置你的 HTTP 请求,包括 URL、请求方法、请求参数等。

  2. JSR223 PostProcessor (强烈推荐使用 Groovy): 在 HTTP Request Sampler 下添加一个 JSR223 PostProcessor-Groovy

    copy
    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,代码如下:

copy
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"); }
posted @   夷某蓁  阅读(50)  评论(0编辑  收藏  举报
相关博文:
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起