jMeter-XPath提取器不允许BSF后处理器(使用javascript代码)访问多个提取的匹配项

jMeter - XPath Extractor does not let BSF Post Processor (with javascript code) to access multiple extracted matches

本文关键字:提取 访问 代码 javascript BSF 不允许 处理器 使用 jMeter-XPath      更新时间:2023-09-26

我有一个来自服务器(SOAP)的XML响应,其中有多个值。XPath提取所有值并将其存储在内部,如Match_1、Match_2、Match_3等。但我既不能通过BSF后处理器也不能通过粘贴在XML中的JavaScript代码来访问它们。它只是拒绝返回值,然后我这样称呼它们:${Match_1}

示例:

响应返回多个contentGroupID
调试采样器揭示它们:

  • contentGroupID=67
  • contentGroupID_1=67
  • contentGroupID_2=50
  • contentGroupID_3=38
  • contentGroupID_4=54
  • contentGroupID_5=46

我们需要在下一个请求中使用这些值中的每一个,所以我们在XML中添加了一个代码来放置这些值:

${__javaScript
(myOutput =''; var names = {};
for (var i = 1; i <= ${contentGroupID_matchNr}; i++) 
{names[i] = "${contentGroupID_" + i + "}";}
for (var j = 1; j <= ${contentGroupID_matchNr}; j++) 
{myOutput = 
myOutput + '<ns8:forContentGroupId><ns2:id>' + names[j] + '</ns2:id></ns8:forContentGroupId>';},
myOutput)
}

在这里,我们将具有值<ns8:forContentGroupId><ns2:id>' + ids + '</ns2:id></ns8:forContentGroupId>的XML部分放置为XPath找到匹配项的次数。

但是魔法并没有发生。请求发送方式如下:

<ns8:forContentGroupId><ns2:id>${contentGroupID_1}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_2}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_3}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_4}</ns2:id></ns8:forContentGroupId>
<ns8:forContentGroupId><ns2:id>${contentGroupID_5}</ns2:id></ns8:forContentGroupId>

同样的情况发生在我用JavaScript代码设置BSF后处理器并在XML中添加变量的情况下。

问题是:一个人到底怎么能获得这些神奇的价值观

附言:一切都很好,然后我使用ForEach控制器。但诀窍是,我需要用所有的值发出一个请求,而不是一个接一个地发出多个请求。

在此处找到解决方案:

BSF后处理器切换JavaScript代码:

var myOutput = '';
var names = {};
var str;
var value = 0;
var match = vars.get("contentGroupID_matchNr");
for (var i = 1; i <= match; i++) 
{
var n = i.toString();
str = 'contentGroupID_' + n;
value = vars.get(str);
names[i] = value;
}
for (var j = 1; j <= match; j++) {
myOutput = myOutput +  '<ns8:forContentGroupId><ns2:id>' + names[j] + '</ns2:id></ns8:forContentGroupId>';
}
vars.put("array", myOutput);

加上XML中的${array}变量。

故事结束了