2013-01-31 80 views
1

我正在嘗試使用rest-assured進行集成測試。在我的一個測試案例中,我必須驗證XML文件的一些屬性,這些屬性使用了似乎使用Groovy的GPath的放心XmlPath。使用休息保證的XML映射

我有如下結構的XML文檔(ID是唯一的):

<rootelement> 
    <someelement id="1234" type="a"> 
     <property key="hello" value="world" /> 
     <property key="name" value="a name" /> 
     <property key="status" value="new" /> 
     <child target="645823" type="a" /> 
     <child target="7482" type="b" /> 
     <child target="8942" type="c"> 
     <property key="pro" value="yes" /> 
     </child> 
    </someelement> 
    <someelement> 
     ... 
    </someelement> 
<rootelement> 

理想的情況下,給定一個someelement ID,我希望得到一個地圖的它的屬性,即假設給定someelement ID是1234我想得到一張如下圖所示的地圖: {"hello": "world", "name": "a name", "status": "new"}。我將如何做到這一點?我知道XmlPath中有一個getMap方法,但我無法弄清楚我將不得不使用哪種表達式。

如果無法將屬性作爲地圖獲取,我將滿足於獲取鍵值列表和值列表。再次,我不知道我必須使用哪種表達方式。我試過類似的東西:

xmlPath.getList("**.find {[email protected] = '1234'}[email protected]", String.class) 

但是,它沒有找到任何東西。

+0

我剛剛注意到爲什麼後面的列表方法不起作用:我使用了一個等號而不是雙.. – rkcpi

回答

1

您可以用Groovy做到這一點(假設xml是包含你的XML字符串)

def map = new XmlParser().parseText(xml) 
         .someelement 
         .find { [email protected] == '1234' } 
         .property 
         .collectEntries { [ [email protected], [email protected] ] } 

assert map == [ hello:'world', name:'a name', status:'new' ] 

從未使用過休息,放心,所以我不能有太大的幫助,在這個方向雖然:-(

+0

它工作得差不多!看起來你在.property之後錯過了一個findAll()。我正在使用rest-以「someelement.find {it。@ id =='1234'} .property.findAll()。collectEntries {[it。@ key,it。@ value]}」作爲路徑。 – rkcpi