1

我正在测试一个 Web 服务,它返回一个 xml,如下例所示

<test xmlns="some url">
   <a id="482b6f66-0543-49b2-9a22-d70dc1a87032" href="some url">some text</a>
</test>

我查看了 RestAssured 文档,但找不到如何检查单个 xml 属性。我想测试响应中返回的“id”属性,但我的测试失败,告诉我实际与预期是空的,尽管我可以清楚地看到标签在那里并且 id 值存在,如果我输出 xml 响应为一个字符串。

这是我的测试:

expect().body("test.a.id", equalTo(expectedId)).when().post(myRequest);
4

4 回答 4

3

你错过了一个@ 应该是:

expect().body("test.a.@id", equalTo(expectedId)).when().post(myRequest);
于 2015-08-15T12:55:51.193 回答
1

结果证明这个解决方案有点难看,但我找不到任何有关这种用法的例子,所以这一切都是猜测。也许有更好的方法,但这是我想出的:

这是查找和打印我的 id 的代码:

String xml = get(myRequest).asString();
XmlPath xmlPath = new XmlPath(xml).setRoot("test");
String id = xmlPath.get("a.@id");
Assert.assertTrue(id.equals(expectedId));
于 2013-11-26T15:54:30.433 回答
1

由于您的响应是 XML,您可以使用 XPath:

expect().body(hasXPath("/test/a/@id"), equalTo(expectedId)).when().post(myRequest);

@是您应该在 xpath 中处理属性的方式。请注意,这也可能有助于您使用 XMLPath 的解决方案。(见这里的例子)

也许您对命名空间的使用可能会带来一些麻烦,您可以使用以下方法启用它:

given().
    config(newConfig().xmlConfig(xmlConfig().with().namespaceAware(true))).
expect().
    body(hasXPath("/yourns:test/yourns:a/@id"), equalTo(expectedId)).when().post(myRequest);

另见:http ://code.google.com/p/rest-assured/wiki/Usage#XPath

于 2013-11-26T15:10:17.903 回答
0

这对我有用xml:

<example id="12345">
    <someStuff></someStuff>
</example>

我可以使用以下方法验证属性:

given().
when().
    post("/example/get/").
then().
    body(
        "example.@id", equalTo("12345")
    );
于 2015-02-13T18:38:53.197 回答