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

如何在子JSR223 Postprocessor中获取并修改父JSR223 Sampler的“Sampler results”属性值

当然可以做到!在JMeter里,子级的JSR223 PostProcessor本来就设计用来处理前一个采样器(也就是你的父JSR223 Sampler)的结果,不管是读取属性还是修改它们都没问题,下面一步步给你讲:

访问父JSR223 Sampler的采样结果属性

JSR223 PostProcessor会自动关联到它前面最近的采样器,也就是你的父JSR223 Sampler。你可以通过JMeter内置的prev对象来访问这个采样器的所有结果属性——prev其实就是当前PostProcessor绑定的采样器的SampleResult实例,包含了所有你需要的信息。

常用属性的获取示例

比如你最关心的Load Time,直接用prev.getLoadTime()就能拿到它的数值(单位是毫秒)。除此之外,还有很多常用属性可以获取:

// 获取Load Time
def loadTime = prev.getLoadTime()
log.info("父Sampler的Load Time: ${loadTime}ms")

// 获取延迟时间(Latency)
def latency = prev.getLatency()
log.info("父Sampler的延迟时间: ${latency}ms")

// 获取响应码
def responseCode = prev.getResponseCode()
log.info("父Sampler的响应码: ${responseCode}")

// 获取采样器名称
def samplerName = prev.getSampleLabel()
log.info("父Sampler名称: ${samplerName}")

// 获取响应时间(和Load Time有时候一致,取决于是否有重定向)
def responseTime = prev.getTime()
log.info("父Sampler的响应时间: ${responseTime}ms")

如果想要更全面的属性,可以查看prev.getResult()返回的对象,里面包含了更多细节,比如响应内容、请求头之类的。


修改(覆盖)采样器结果属性

不仅能读,你还可以直接修改这些属性的值,覆盖原本的采样结果。同样是通过prev对象的setter方法来实现:

常用属性的修改示例

// 自定义Load Time为1000ms
prev.setLoadTime(1000)
log.info("已将父Sampler的Load Time修改为1000ms")

// 修改响应码为"200"
prev.setResponseCode("200")

// 修改响应状态为"成功"
prev.setResponseMessage("自定义成功消息")

// 标记采样结果为成功(即使原本失败)
prev.setSuccessful(true)

你可以结合条件判断来执行修改操作,比如当Load Time超过阈值时,修改它并记录日志:

def threshold = 500
if (prev.getLoadTime() > threshold) {
    prev.setLoadTime(threshold)
    log.warn("父Sampler的Load Time超过阈值${threshold}ms,已修改为阈值数值")
}

小提示

  • 尽量使用Groovy语言编写JSR223脚本,它的性能比其他脚本语言(比如JavaScript)好很多,而且对JMeter内置对象的支持更完善。
  • prev对象是PostProcessor中最常用的内置对象之一,你可以通过JMeter的官方文档查看SampleResult类的所有方法,获取更多你需要的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:55:22