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

JMeter JSR223后处理器未更新用户参数,jmeter,jsr223,Jmeter,Jsr223,我有一个生成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.isE

我有一个生成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(…)更新用户参数吗

以下是由UDV“pollOver”确定终止的While控制器(pollOver在UDV“创建站点参数”部分中定义): [而控制器取决于UDV][3]

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

Thanx

R

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

对于您的用例,将用户参数定义为线程组中第一个采样器的子级,以便其作用域不会擦除由

见:

从您的评论来看,我的答案似乎还可以,要解决这个问题,请在控制器之前添加一个测试动作,包括:

  • 暂停模式并睡眠至0
将User Parameter元素移到其中,使其仅运行一次以初始化pollOver

我只是使用Pause=0的测试动作来避免生成无用的SampleResult。我也可以使用调试采样器


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

我在发布图像时遇到问题。下面是我的口头描述:(简单控制器{(UDV pollOver){(而控制器依赖于pollOver){(HTTP采样器){JSR223 groovy后处理器更新pollOver)}}}。后处理器在日志中正确地执行pollOver,但pollOver UDV仍然为“false”,其结果是循环从未终止。正如我在上次编辑中所述,我有一个while控制器,其终止取决于后处理器更新的用户参数pollOver。如果我将用户参数定义为while的子参数,while将立即终止(因为未定义选通变量)。因此,我已在用户参数下定义了while控制器。谢谢!您上次关于使用0秒暂停的测试操作的建议奏效了,尽管我不明白为什么需要这样做。如果您能解释,那太好了!我接受了。但是,由于我没有足够的徽章,表面上不会显示我的向上投票。谢谢又来了!