美文网首页我爱编程
三、XML Schema解析验证

三、XML Schema解析验证

作者: by小杰 | 来源:发表于2017-06-27 11:49 被阅读100次
目录

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));

`matchesXsd`和`matchesDtd`方法在`Hamcrest matchers`里,你可以从[io.restassured.matcher.RestAssuredMatchers](http://static.javadoc.io/io.rest-assured/rest-assured/3.0.1/io/restassured/matcher/RestAssuredMatchers.html)导入。
三、复杂的解析和验证
有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 matcherhasItems方法来解析它

#####四、深度优先搜索 
实际上之前的例子我们还可以继续简化:

when().
get("/shopping").
then().
body("**.find { it.@type == 'groceries' }", hasItems("Chocolate", "Coffee"));
注释:
1、**是一种在XML文件中做深度优先搜索的捷径
2、注意我们没有在"item"这个XML路径结束。原因是在category节点返回一个列表的项目值时,自动调用了toString()这个方法

相关文章

网友评论

    本文标题:三、XML Schema解析验证

    本文链接:https://www.haomeiwen.com/subject/iziscxtx.html