带有Groovy和获取响应数据内容的Jmeter后处理器

带有Groovy和获取响应数据内容的Jmeter后处理器,groovy,jmeter,Groovy,Jmeter,在JSR223后处理器中,我使用此方法获取响应数据: def json = new JsonSlurper().parseText(response) 下面是我的json输出的一个片段,如下所示 XmlItemResult:[[xPath:/Blocks/Block[001], name:abc, folder:\A\abc\a1, id:84, information:[[xPath:/Blocks/Block[001], result:Block number 1: abc], [xPat

在JSR223后处理器中,我使用此方法获取响应数据:

def json = new JsonSlurper().parseText(response)
下面是我的json输出的一个片段,如下所示

XmlItemResult:[[xPath:/Blocks/Block[001], name:abc, folder:\A\abc\a1, id:84, information:[[xPath:/Blocks/Block[001], result:Block number 1: abc], [xPath:/Blocks/Block[001]/Steps/CallSteps/Step[001], result:Call step StepNo 1], 
文件夹:\Voice133,id:2542,信息:[[xPath:/TestCases/TestCase[001]

正如你所看到的,这个回答包含了我感兴趣的两件事:

folder:\A\abc\a1, id:84,
folder:\Voice133, id:2542,
我只需要获取此行-->文件夹的id值:\Voice133,id:2542,
注2542是可变的,每次运行和每次运行后都可能不同

我试过了

json.find ("Voice133, id:(.+?),")

你的字符串不是一个有效的JSON,你可以自己用any来检查,因此你不能使用,你只能用正则表达式

在Groovy中,您可以使用
=~
-为了能够提取所需的值,示例代码如下:

def response = 'XmlItemResult:[[xPath:/Blocks/Block[001], name:abc, folder:\\A\\abc\\a1, id:84,' +
        ' information:[[xPath:/Blocks/Block[001], result:Block number 1: abc],' +
        ' [xPath:/Blocks/Block[001]/Steps/CallSteps/Step[001], result:Call step StepNo 1], '

def matcher = (response =~ 'folder:\\\\A\\\\abc\\\\a1, id:(\\d+),')

if (matcher.find()) {
    log.info('Folder ID = ' + matcher.group(1))
}
演示:


更多信息:

您能以最简单的形式共享您的json文件吗?我会给您一个片段以获得结果。注意:json slurper将文本或阅读器内容解析为列表和地图的数据结构。因此,您可以像访问地图或列表一样访问它们。在您的情况下,它将是一个地图。要使用json slurper,string必须是有效的json。如果您的响应具有特定模式,您可能需要使用正则表达式提取器。