如何在子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
相关产品推荐
相关产品推荐

