JMeter BeanShell 获取 HTTP Request 中的 Name

场景:添加 JMeter log 输出,想输入自定义请求的名称

 

// 获取 response body
prev.getResponseDataAsString();
// 获取 HTTP Request 插件里面的 Name
prev.getSampleLabel()

 

补充知识点: 

 JMeter prev对象核心方法详解
(适用于BeanShell/JSR223脚本环境,prev即SampleResult对象)

一、基础信息获取方法

// ▶ 请求基本信息
prev.getSampleLabel()      // 获取请求显示名称,如:"HTTP Get User"
prev.getSampler().getName()// 底层采样器名称,如:"HTTP Request"
prev.getThreadName()       // 线程组名称,如:"Thread Group 1-1"

// ▶ 时间维度数据
prev.getTime()            // 请求总耗时(毫秒)
prev.getStartTime()       // 请求开始时间戳(毫秒)
prev.getEndTime()         // 请求结束时间戳(毫秒)

 

二、响应数据处理方法

// ▶ 文本型响应
prev.getResponseDataAsString()  // 获取响应正文文本
prev.getResponseHeaders()       // 获取完整响应头

// ▶ 二进制响应
prev.getResponseData()          // 获取byte[]格式响应数据

// ▶ 状态码验证
prev.getResponseCode()         // HTTP状态码,如:"200"
prev.isResponseCodeOK()        // 状态码是否2xx(返回boolean)

  

三、高级调试方法

// ▶ 断言与错误判断
prev.isSuccessful()      // 请求是否成功(包含断言结果)
prev.getAssertionResults()// 获取断言失败信息数组

// ▶ 数据提取
prev.getLatency()        // 网络延迟时间(毫秒)
prev.getConnectTime()   // TCP连接建立耗时(毫秒)

  

四、典型使用场景示例

// 场景1:记录异常请求详情
if (!prev.isSuccessful()) {
    errorLog = "失败请求:" + prev.getSampleLabel() 
             + " | 状态码:" + prev.getResponseCode()
             + " | 错误信息:" + prev.getResponseMessage()
    vars.put("ERROR_LOG", errorLog)
}

// 场景2:计算响应时间占比
def connectPercent = (prev.getConnectTime()/prev.getTime())*100
log.info("TCP连接时间占比:" + connectPercent + "%")

  

五、关键注意事项

  • ‌作用域限制‌
  • 仅在PostProcessor/断言等后置处理器中有效
  • 前置处理器(PreProcessor)中不可用
  • ‌性能建议‌
  • 避免在高并发下频繁调用getResponseDataAsString()   (我拒绝你的建议)
  • 大数据响应建议改用prev.getResponseData().length获取字节大小
  • ‌替代方案‌
  • JMeter 5.0+推荐使用JSR223+Groovy替代BeanShell
// Groovy等效写法
def responseCode = prev.getResponseCode()

 

posted @ 2025-02-27 18:11  learcher  阅读(115)  评论(0)    收藏  举报