目录
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导入。
三、复杂的解析和验证
有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()这个方法