目錄
1、XML解析
2炉擅、XML Schema 或DTD
3阳惹、復(fù)雜的解析和驗(yàn)證
4、深度優(yōu)先搜索
一快鱼、XML解析
有一個(gè)POST請(qǐng)求体啰,請(qǐng)求結(jié)果為XML文件,內(nèi)容如下:
<greeting>
<firstName>{params("firstName")}</firstName>
<lastName>{params("lastName")}</lastName>
</greeting>
如果想驗(yàn)證返回結(jié)果中的firstName 和 lastName兩個(gè)字段荒勇,方法如下:
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導(dǎo)入沽翔。
三、復(fù)雜的解析和驗(yàn)證
有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>
如我們想寫(xiě)一個(gè)測(cè)試來(lái)檢驗(yàn)類(lèi)型為groceries的category節(jié)點(diǎn)有Chocolate和Coffee這兩個(gè)項(xiàng)目窿凤。在rest-assured可以這樣做:
when().
get("/shopping").
then().
body("shopping.category.find { it.@type == 'groceries' }.item", hasItems("Chocolate", "Coffee"));
注釋?zhuān)?1仅偎、shopping.category返回categoriy的一個(gè)列表,使用find命令
2雳殊、@type這個(gè)屬性且該屬性值為groceries的單個(gè)category節(jié)點(diǎn)
3橘沥、通過(guò)`Hamcrest matcher`的`hasItems`方法來(lái)解析它
四、深度優(yōu)先搜索
實(shí)際上之前的例子我們還可以繼續(xù)簡(jiǎn)化:
when().
get("/shopping").
then().
body("**.find { it.@type == 'groceries' }", hasItems("Chocolate", "Coffee"));
注釋?zhuān)?1夯秃、`**`是一種在XML文件中做深度優(yōu)先搜索的捷徑
2、注意我們沒(méi)有在"item"這個(gè)XML路徑結(jié)束仓洼。原因是在category節(jié)點(diǎn)返回一個(gè)列表的項(xiàng)目值時(shí)介陶,自動(dòng)調(diào)用了toString()這個(gè)方法