三、XML Schema解析验证

目录

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

一、XML解析

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


   {params("firstName")}
   {params("lastName")}

如果想验证返回结果中的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文件如下


     
       Chocolate
       Coffee
     
     
       Paper
       Pens
     
     
       Kathryn's Birthday
     

如我们想写一个测试来检验类型为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()这个方法

你可能感兴趣的:(三、XML Schema解析验证)