三、XML Schema解析验证

目录

1、XML解析
2、XML Schema 或DTD
3、复杂的解析和验证
4、深度优先搜索

一、XML解析

有一个POST请求,请求结果为XML文件,内容如下:

<greeting>
   <firstName>{params("firstName")}</firstName>
   <lastName>{params("lastName")}</lastName>
</greeting>

如果想验证返回结果中的firstName 和 lastName两个字段,方法如下:

given().
         parameters("firstName", "John", "lastName", "Doe").
when().
         post("/greetXML").
then().
         body("greeting.firstName", equalTo("John")).
         body("greeting.lastName", equalTo("Doe"));
二、XML Schema(XSD) 或 DTD
XSD例子
get("/carRecords").then().assertThat().body(matchesXsd(xsd));

DTD 例子
get("/videos").then().assertThat().body(matchesDtd(dtd));

matchesXsdmatchesDtd方法在Hamcrest matchers里,你可以从io.restassured.matcher.RestAssuredMatchers导入。
三、复杂的解析和验证
有XML文件如下

<shopping>
     <category type="groceries">
       <item>Chocolate</item>
       <item>Coffee</item>
     </category>
     <category type="supplies">
       <item>Paper</item>
       <item quantity="4">Pens</item>
     </category>
     <category type="present">
       <item when="Aug 10">Kathryn's Birthday</item>
     </category>
</shopping>

如我们想写一个测试来检验类型为groceries的category节点有Chocolate和Coffee这两个项目。在rest-assured可以这样做:

when().
       get("/shopping").
then().
       body("shopping.category.find { it.@type == 'groceries' }.item", hasItems("Chocolate", "Coffee"));

注释:
1、shopping.category返回categoriy的一个列表,使用find命令
2、@type这个属性且该属性值为groceries的单个category节点
3、通过`Hamcrest matcher`的`hasItems`方法来解析它
四、深度优先搜索

实际上之前的例子我们还可以继续简化:

when().
       get("/shopping").
then().
       body("**.find { it.@type == 'groceries' }", hasItems("Chocolate", "Coffee"));
注释:
1、`**`是一种在XML文件中做深度优先搜索的捷径
2、注意我们没有在"item"这个XML路径结束。原因是在category节点返回一个列表的项目值时,自动调用了toString()这个方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容