我们使用REST保证的框架在Java中进行一些单元/集成测试。
REST服务的XML答案与此类似:
<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns="urn:service:com:namespace:item/1"
returned="3" found="3">
<ItemRef object="urn:svc:com:car:item:123456" type="door">door-123456.pdf</ItemRef>
<ItemRef object="urn:svc:com:car:item:983425" type="mirror">mirror-43562577.pdf</ItemRef>
<ItemRef object="urn:svc:com:car:item:983425" type="wheel" >door-94584854.pdf</ItemRef>
</Items>
在我的测试中,我有兴趣通过阅读属性returned
来检查返回的项目数量
givenOK()
.expect()
.body("Items.@returned", equalTo("3")) // this is a string
.when()
.get(myurl)
效果很好
现在我也想控制xmlns中的URN是否正确,具有相同的逻辑:
givenOK()
.expect()
.body("Items.@returned", equalTo("3")) // this is a string
.body("Items.@xmlns", equalTo("urn:service:com:namespace:item/1"))
.when()
.get(myurl)
但是当我的测试运行时,表达式Items.@xmlns
似乎没有返回属性的值而是空的:[]
知道为什么这不起作用吗?
答案 0 :(得分:1)
是否可以特别处理“xmlns”属性,因为它表示命名空间?
可能的解决方法是在XmlConfig中声明命名空间并验证正文中的内容。
given().
config(RestAssured.config().xmlConfig(XMLConfig.xmlConfig().declareNamespace("ns", "urn:service:com:namespace:item/1"))).
when().
get(myUrl).
then().
body("'ns:ItemRef'[0]", equalTo("door-123456.pdf"));
另一个具有多个节点和属性(显式路径)的示例:
given()
.config(
RestAssured.config()
.xmlConfig(XmlConfig.xmlConfig()
.declareNamespace("ns", "urn:service:com:namespace:item/1"))).
when()
.get(myUrl)
.then()
.body("'ns:RootNode'.'ns:Level1'.'ns:Level2'[0].'@ns:id'", equalTo("AN-ID-123"));