JMeter JSR223后处理器未更新用户参数

时间:2017-09-13 20:20:27

标签: jmeter jsr223

我有一个HTTP采样器,它产生一个JSOn字符串。我使用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控制器,其终止由UDV" pollOver" (pollOver在UDV部分"创建站点参数"中定义): [虽然控制器依赖于UDV] [3]

这是更新UDV pollOver以使控制器终止的后处理器: [在此处输入图像说明] [4]

感谢名单,

[R

1 个答案:

答案 0 :(得分:0)

User Parameters是一个在其范围内的采样器之前运行的预处理器。由于您没有提供测试计划的屏幕截图,我无法确定它会影响哪个采样器,但很可能它会在您的采样器之前运行并删除您的存储在变量中的值。

对于您的用例,将“用户参数”定义为“线程组”中第一个采样器的子级,以使其范围不会删除JSR223 PostProcessor计算的值

请参阅:

从您的评论中,似乎我的答案还可以,修复它,在控制器之前添加一个测试操作:

  • 暂停模式并睡眠为0

在其中移动User Parameter元素,以便它只运行一次以初始化pollOver。

我只是使用Pause = 0的测试操作来避免生成无用的SampleResult。我也可以使用Debug Sampler。

正如我所解释的那样,您遇到的主要问题是您的用户参数范围太大,因此它适用于覆盖后处理器更新值的所有请求。