使用 Jayway 的 rest-assured 验证 XML 属性
Verifying an XML attribute using Jayway's rest-assured
我正在尝试验证 xmlns:ns1="http://thomas-bayer.com/blz/" 在下面 XML 使用 Jayway 的放心 XML support.
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:getBankResponse xmlns:ns1="http://thomas-bayer.com/blz/">
<ns1:details>
<ns1:bezeichnung>ABK-Kreditbank</ns1:bezeichnung>
<ns1:bic>ABKBDEB1XXX</ns1:bic>
<ns1:ort>Berlin</ns1:ort>
<ns1:plz>10789</ns1:plz>
</ns1:details>
</ns1:getBankResponse>
</soapenv:Body>
</soapenv:Envelope>
据我了解,
xmlns:ns1="http://thomas-bayer.com/blz/"
是
的 属性
<ns1:getBankResponse
@ 前缀应该 return 匹配 @.
之后的词干的属性
假设 xmlString 等于上面的 SOAP 响应 XML,以下所有 returned null:
String nameSpace1 = given(xmlString).getString("Envelope.Body.getBankResponse.@xmlns:ns1");
String nameSpace2 = given(xmlString).getString("Envelope.Body.getBankResponse.@ns1");
String nameSpace3 = given(xmlString).getString("Envelope.Body.getBankResponse.@xmlns");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@xmlns:ns1");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@ns1");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@xmlns");
如有任何帮助,我们将不胜感激。
PS。我知道 rest-assured 主要与 RESTful API 有关,但它可用于测试 SOAP。
这样部分解决了:
XmlPath xmlPath = new XmlPath(xmlResponse).using(xmlPathConfig().declaredNamespace("ns1", "http://thomas-bayer.com/blz/"));
// Then
assertThat(xmlPath.getString("Envelope.Body.getBankResponse.ns1:details.ns1:bezeichnung.text()"), equalTo("ABK-Kreditbank"));
我说部分是因为虽然它确实证明了名称 space ns1 被使用,因此必须被定义为有效它没有表明:
xmlns:ns1="http://thomas-bayer.com/blz/"
因为如果我更改 URI,测试仍然会通过。
有人有更好的答案吗?
在即将推出的 REST Assured 版本(可能是 2.9.1)中,您将能够将 XmlPath 配置为不知道名称空间。所以这意味着你可以这样做:
XmlPath xmlPath = new XmlPath(xmlResponse).using(xmlPathConfig().namespaceAware(false));
assertThat(xmlPath.getString("soapenv:Envelope.soapenv:Body.ns1:getBankResponse.@xmlns:ns1"), equalTo("http://thomas-bayer.com/blz/"));
您今天可以在添加以下 Maven 存储库后根据版本 2.9.1-SNAPSHOT
进行尝试:
<repositories>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots />
</repository>
</repositories>
我正在尝试验证 xmlns:ns1="http://thomas-bayer.com/blz/" 在下面 XML 使用 Jayway 的放心 XML support.
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:getBankResponse xmlns:ns1="http://thomas-bayer.com/blz/">
<ns1:details>
<ns1:bezeichnung>ABK-Kreditbank</ns1:bezeichnung>
<ns1:bic>ABKBDEB1XXX</ns1:bic>
<ns1:ort>Berlin</ns1:ort>
<ns1:plz>10789</ns1:plz>
</ns1:details>
</ns1:getBankResponse>
</soapenv:Body>
</soapenv:Envelope>
据我了解,
xmlns:ns1="http://thomas-bayer.com/blz/"
是
的 属性<ns1:getBankResponse
@ 前缀应该 return 匹配 @.
之后的词干的属性假设 xmlString 等于上面的 SOAP 响应 XML,以下所有 returned null:
String nameSpace1 = given(xmlString).getString("Envelope.Body.getBankResponse.@xmlns:ns1");
String nameSpace2 = given(xmlString).getString("Envelope.Body.getBankResponse.@ns1");
String nameSpace3 = given(xmlString).getString("Envelope.Body.getBankResponse.@xmlns");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@xmlns:ns1");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@ns1");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@xmlns");
如有任何帮助,我们将不胜感激。
PS。我知道 rest-assured 主要与 RESTful API 有关,但它可用于测试 SOAP。
这样部分解决了:
XmlPath xmlPath = new XmlPath(xmlResponse).using(xmlPathConfig().declaredNamespace("ns1", "http://thomas-bayer.com/blz/"));
// Then
assertThat(xmlPath.getString("Envelope.Body.getBankResponse.ns1:details.ns1:bezeichnung.text()"), equalTo("ABK-Kreditbank"));
我说部分是因为虽然它确实证明了名称 space ns1 被使用,因此必须被定义为有效它没有表明:
xmlns:ns1="http://thomas-bayer.com/blz/"
因为如果我更改 URI,测试仍然会通过。
有人有更好的答案吗?
在即将推出的 REST Assured 版本(可能是 2.9.1)中,您将能够将 XmlPath 配置为不知道名称空间。所以这意味着你可以这样做:
XmlPath xmlPath = new XmlPath(xmlResponse).using(xmlPathConfig().namespaceAware(false));
assertThat(xmlPath.getString("soapenv:Envelope.soapenv:Body.ns1:getBankResponse.@xmlns:ns1"), equalTo("http://thomas-bayer.com/blz/"));
您今天可以在添加以下 Maven 存储库后根据版本 2.9.1-SNAPSHOT
进行尝试:
<repositories>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots />
</repository>
</repositories>