JMeter JSR223 后处理器不更新用户参数
JMeter JSR223 Postprocessor not updating User Parameter
我有一个生成 JSOn 字符串的 HTTP 采样器。我使用 groovy JSonSlurper 解析 JSon 片段来更新 UserParameter pollOver:
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def response = jsonSlurper.parseText(prev.getResponseDataAsString())
def isError = response.response.isError
def error = isError ? "true":"false"
def data = response.response.data
def pollOver = data?.trim() || isError
log.info("response = " + response)
log.info("isError = " + isError)
log.info("error = " + error)
log.info("data = " + data)
log.info("pollOver = " + pollOver)
vars.put("pollOver", pollOver ? "true":"false")
vars.put("data", data)
vars.put("error", error)
不幸的是,用户参数 pollOver 从未更新,尽管来自 groovy 后处理器的日志显示它具有正确的值:
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: response = [response:[version:1505333033161, data:138bdb6e-f0e9-48c0-8dd6-5bb14154d816, startTime:1505333033161, endTime:1505333033264, My Service, isError:false, operationIdList:[2ca8719c-152c-4baa-8cfc-8ec1022cdc09], progress: created successfully, rootId:570ef302-89a2-4bc1-bd1a-4d06fba306a0, id:570ef302-89a2-4bc1-bd1a-4d06fba306a0], version:1.0]
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: isError = false
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: error = false
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: data = 138bdb6e-f0e9-48c0-8dd6-5bb14154d816
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: pollOver = true
如果我将 pollOver 定义为用户定义变量,它可以正常工作。当然,我需要 X 对于不同的线程是不同的,因此我更喜欢使用用户参数而不是 UDV。
这里有我遗漏的问题吗?我不能在 JSR223 groovy 后处理器中使用 vars.put(...) 更新用户参数吗?
这里是 While Controller,其终止由 UDV "pollOver" 决定(pollOver 在 UDV 部分 "Create Site Parameters" 中定义):
[当控制器依赖于 UDV][3]
这是更新 UDV pollOver 以使控制器终止的后处理器:
[在此处输入图片描述][4]
谢谢,
R
User Parameters 是一个预处理器,在其范围内的采样器之前运行。由于您没有提供测试计划的屏幕截图,我无法判断它影响了哪个采样器,但很可能它在您的采样器之前运行并删除了您存储在变量中的值。
对于您的用例,将用户参数定义为线程组中第一个采样器的子级,这样它的范围就不会擦除由 JSR223 PostProcessor
计算的值
参见:
从你的评论来看,我的回答似乎没问题,要修复它,请在控制器之前添加一个测试操作:
- 暂停模式并休眠到 0
将用户参数元素移入其中,使其仅运行一次以初始化 pollOver。
我只是使用暂停 = 0 的测试操作来避免生成无用的 SampleResult。我也可以使用 Debug Sampler。
正如我所解释的,您遇到的主要问题是您的用户参数范围太大,因此它应用于所有请求,覆盖了您的 Post 处理器更新的值。
我有一个生成 JSOn 字符串的 HTTP 采样器。我使用 groovy JSonSlurper 解析 JSon 片段来更新 UserParameter pollOver:
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def response = jsonSlurper.parseText(prev.getResponseDataAsString())
def isError = response.response.isError
def error = isError ? "true":"false"
def data = response.response.data
def pollOver = data?.trim() || isError
log.info("response = " + response)
log.info("isError = " + isError)
log.info("error = " + error)
log.info("data = " + data)
log.info("pollOver = " + pollOver)
vars.put("pollOver", pollOver ? "true":"false")
vars.put("data", data)
vars.put("error", error)
不幸的是,用户参数 pollOver 从未更新,尽管来自 groovy 后处理器的日志显示它具有正确的值:
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: response = [response:[version:1505333033161, data:138bdb6e-f0e9-48c0-8dd6-5bb14154d816, startTime:1505333033161, endTime:1505333033264, My Service, isError:false, operationIdList:[2ca8719c-152c-4baa-8cfc-8ec1022cdc09], progress: created successfully, rootId:570ef302-89a2-4bc1-bd1a-4d06fba306a0, id:570ef302-89a2-4bc1-bd1a-4d06fba306a0], version:1.0]
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: isError = false
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: error = false
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: data = 138bdb6e-f0e9-48c0-8dd6-5bb14154d816
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: pollOver = true
如果我将 pollOver 定义为用户定义变量,它可以正常工作。当然,我需要 X 对于不同的线程是不同的,因此我更喜欢使用用户参数而不是 UDV。
这里有我遗漏的问题吗?我不能在 JSR223 groovy 后处理器中使用 vars.put(...) 更新用户参数吗?
这里是 While Controller,其终止由 UDV "pollOver" 决定(pollOver 在 UDV 部分 "Create Site Parameters" 中定义): [当控制器依赖于 UDV][3]
这是更新 UDV pollOver 以使控制器终止的后处理器: [在此处输入图片描述][4]
谢谢,
R
User Parameters 是一个预处理器,在其范围内的采样器之前运行。由于您没有提供测试计划的屏幕截图,我无法判断它影响了哪个采样器,但很可能它在您的采样器之前运行并删除了您存储在变量中的值。
对于您的用例,将用户参数定义为线程组中第一个采样器的子级,这样它的范围就不会擦除由 JSR223 PostProcessor
计算的值参见:
从你的评论来看,我的回答似乎没问题,要修复它,请在控制器之前添加一个测试操作:
- 暂停模式并休眠到 0
将用户参数元素移入其中,使其仅运行一次以初始化 pollOver。
我只是使用暂停 = 0 的测试操作来避免生成无用的 SampleResult。我也可以使用 Debug Sampler。
正如我所解释的,您遇到的主要问题是您的用户参数范围太大,因此它应用于所有请求,覆盖了您的 Post 处理器更新的值。