3

鉴于以下 SOAP 响应,我将如何使用 XPATH 对响应的内容进行一些测试/验证?注意:我正在使用 RunScope 来测试我们的 API。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetValidDataExtractResponse xmlns="http://some.namespace">
<GetValidDataForExtractResult>
<long>1001</long>
<long>1002</long>
  </GetValidDataForExtractResult>
</GetValidDataExtractResponse>
</soap:Body>
</soap:Envelope>

我可以通过使用: /soap:Envelope/soap:Body 得到一个有效值 但是,这并没有让我远远超出“体内是否存在某些东西”。我希望能够确定“GetValidDataExtractResponse”节点是否包含某些内容,以及“etValidRentalUnitIdsForExtractResult”节点是否包含 X 个项目,或者该节点是否包含某些值。

4

2 回答 2

1

好的,这并不漂亮,但它可能对你有用。使用 Runscope 测试中的脚本功能,您可以从正文中提取值。这是一个提取第一个“长”值的示例。

var parser = new marknote.Parser();
var doc = parser.parse(response.body);

var envelope = doc.getRootElement();
var body = envelope.getChildElement("soap:Body");
var resp = body.getChildElement("GetValidDataExtractResponse");
var result = resp.getChildElement("GetValidDataForExtractResult");
var long = result.getChildElement("long");
variables.set("id", long.getText());
于 2014-10-31T03:38:11.483 回答
1

您可以检查子节点是否存在parent[child]。因此,这里有一些想法,假设您为x设置了命名空间别名http://some.namespace,并且您在结束标签中输入了错字):

  • GetValidDataExtractResponse“与GetValidDataForExtractResult孩子一起寻找”:

x:GetValidDataExtractResponse[x:GetValidDataForExtractResult]
  • “找到GetValidDataForExtractResult正好两个long孩子”:

x:GetValidDataForExtractResult[count(x:long)=2]
  • 查找GetValidDataForExtractResult带有long“1001”作为文本值的孩子

x:GetValidDataForExtractResult[x:long/text()='1001']

我个人不使用RunScope,但我想它有一种方法可以测试 xpath 节点选择是否返回零节点(或单个节点选择的空元素)。

于 2014-10-29T18:55:39.277 回答