在neoload中将JSON转换更改为XML

时间:2014-10-29 15:45:24

标签: xml json neoload

给出以下HTTP响应:

{"id":"1", "name":test"}

目前,当您在“版本>偏好设置>项目设置>模块管理器> JSON”中检查“将JSON请求/响应视为xml内容”时(为了能够使用xpath而不是regexp) ),你有一个完全无用的东西,如:

<ObjectNode>
  <__children>
    <entry>
      <string>id</string>
      <__value>1</__value>
    </entry>
      etc...

注意:这没用,因为当你有深度JSON响应时,你有XPath:     ArrayNode / __孩子/儿童:: ObjectNode / __孩子/进入[子::字符串/文本()= '数据'] / ObjectNode / __孩子/进入[子::字符串/文本()= '身份证'] / IntNode / __值

我设法创建了一个扩展,我在JSONObject或JSONArray中解析JSON,然后我调用

return "<root>"+XML.toString(json)+"</root>";

给了我一个漂亮的

<root><id>1</id><name>test</name></root>

注意:我可以使用xpath轻松处理

问题在于Neoload会将此转换为

<String>&lt;root&gt;&lt;id&gt;etc... 

这与第一个东西一样无用(可能更无用,因为XPath不再是一个选项,因为我只有一个节点)。

所以我的问题是如何改变Neoload改变我的解码器返回值的方式?

我试图直接在Decoder中返回JSONObject或JSONArray,然后使用Namer,但Namer似乎只用于请求,而不是响应。

任何提示都表示赞赏!

1 个答案:

答案 0 :(得分:1)

&#34;更容易&#34;我发现模拟真正的JSON的方法是做以下事情。

首先,进行正常的网页调用并通过高级面板添加变量以捕获所有响应(要使用的正则表达式为(。*))。

然后,使用带有以下内容的javascript(此处,EntryResponse是捕获的变量名称)

//get the previous http response and eval it
var resp_ = context.variableManager.getValue("EntryResponse");
if (resp_ == null) {
        context.fail("Variable 'EntryResponse' not found");
}
logger.debug("EntryResponse="+resp_);
var resp = eval("("+resp_+")")

//then used resp as real json
logger.debug("Logged User Id="+resp.data.id);

// Inject a value in a runtime variable
context.variableManager.setValue("UserName", resp.data.id);

这并不像它可能那么简单,但这比经典的XPath更强大,更容易