2013-11-26 72 views
1

我測試的網絡服務,這在例如像返回的XML下面RestAssured - 如何檢查ID在<a id="some number"></a>?

<test xmlns="some url"> 
    <a id="482b6f66-0543-49b2-9a22-d70dc1a87032" href="some url">some text</a> 
</test> 

我通過RestAssured文檔看了,但我怎麼也找不到來檢查每一個XML屬性。我想測試在響應中返回的「id」屬性,但是我的測試失敗,告訴我實際vs預期是空的,儘管我可以清楚地看到標記存在並且id值存在,如果我輸出xml響應爲一個字符串。

這裏是我的測試:

expect().body("test.a.id", equalTo(expectedId)).when().post(myRequest); 
+0

不認爲這是有關在這種情況下 – casper

回答

1

因爲你的反應是XML,你可以使用XPath:

expect().body(hasXPath("/test/a/@id"), equalTo(expectedId)).when().post(myRequest); 

@是你應該解決的XPath屬性的方式。請注意,這也可能有助於您使用XMLPath的解決方案。 (見例子here

也許您的命名空間的使用可能會雖然給一些麻煩,您可以啓用,使用:

given(). 
    config(newConfig().xmlConfig(xmlConfig().with().namespaceAware(true))). 
expect(). 
    body(hasXPath("/yourns:test/yourns:a/@id"), equalTo(expectedId)).when().post(myRequest); 

還看到:http://code.google.com/p/rest-assured/wiki/Usage#XPath

+0

謝謝,這看起來很有希望,但現在我得到這個錯誤: ** org.xml.sax.SAXParseException:元素類型「HR」必須由匹配的結束標記「」終止。 \t at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)** – casper

+0

這有點遺憾,因爲這意味着你的XML不是有效的XML(html很少是..)無法使用hasXPath選項和XMLPath選項。 (除非可以保證來自服務器的有效XML輸出)。也許你仍然可以用'@'來標記屬性,但是我沒有發現任何有關html輸出的內容。 – ljgw

+0

好消息,使用@解決了我!稍後將發佈解決方案。非常感謝提示! – casper

1

的解決方案竟然是位醜陋,但我找不到任何這種用法的相關示例,所以這都是猜測工作。也許有一個更好的辦法,但這裏是我想出了:

下面的代碼來查找和打印我的ID:

String xml = get(myRequest).asString(); 
XmlPath xmlPath = new XmlPath(xml).setRoot("test"); 
String id = xmlPath.get("[email protected]"); 
Assert.assertTrue(id.equals(expectedId)); 
0

這個工作對我的xml:

<example id="12345"> 
    <someStuff></someStuff> 
</example> 

我可以使用驗證屬性:

given(). 
when(). 
    post("/example/get/"). 
then(). 
    body(
     "[email protected]", equalTo("12345") 
    ); 
2

你是缺少一個@ 應是:

expect().body("[email protected]", equalTo(expectedId)).when().post(myRequest); 
+0

你。從字面上。保存。我的。生活8-) – Mateva

相關問題