jMeter - XPath Extractor不允许BSF Post Processor(带有javascript代码)访问多个提取的匹配项

时间:2013-06-26 17:20:31

标签: javascript variables xpath jmeter

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

示例:

响应返回多个contentGroupID值 Debug Sampler显示它们:

  • 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)
}

这里我们将XML的部分放置为值<ns8:forContentGroupId><ns2:id>' + ids + '</ns2:id></ns8:forContentGroupId>,与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 Post Processor并在XML中添加变量,情况也是如此。

问题是:如何才能获取这些神奇的价值?

P.S。一切都很好,然后我使用ForEach控制器。但问题是我需要对所有值进行单一请求,而不是一个接一个地发出多个请求。

1 个答案:

答案 0 :(得分:0)

在这里找到解决方案:

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}变量。

故事结束! =)