2017-04-11 15 views
0

我有響應相同的標記下返回一組值的SOAP請求的響應 假設如何可以斷言由值數組到用戶定義的變量

<PricelistDetails> 

         <ServicePricelistDetailInfo> 
          <cost>20</cost> 
         </ServicePricelistDetailInfo> 

         <ServicePricelistDetailInfo> 
          <cost>25</cost> 
         </ServicePricelistDetailInfo> 

         <ServicePricelistDetailInfo> 
          <cost>30</cost> 
         </ServicePricelistDetailInfo> 

<PricelistDetails> 

心中已經創建一個XPath斷言斷言成本標籤到用戶定義的變量:

/信封/車身/ GetServicePricelistResponse/GetServicePricelistResult/ServicePricelistInfoList/ServicePricelistInfo/PricelistDetails/ServicePricelistDetailInfoList/ServicePricelistDetailInfo /成本= '$ {COST1}'

同時COST1定義如下:

名:COST1

值:[20,25,30]

但是在運行測試計劃時它顯示斷言錯誤

注:

我創建了一個Xpath提取器來測試斷言查詢,並且它正確返回了所有 的成本值

+0

Xpath的斷言佔用更多的內存和CPU。你可以去xpath提取器檢查成本。您可以使用正則表達式提取器並使用控制器來檢查成本。 –

回答

0

我會建議通過View Results Tree聽衆把你的XPath查詢到XPath Extractor,加入Debug Sampler事後並檢查生成的變量,我的期望是,你會得到這樣的:

cost=20 
cost_1=20 
cost_2=25 
cost_3=30 
cost_matchNr=3 

所以,你將能夠使用針對這些${cost_1},${cost_2}${cost3}變量的「正常」Response Assertion


如果由於某種原因,你需要去 「的XPath方式」 - 使用下面的XPath表達式中斷言:

concat("[", //PricelistDetails/ServicePricelistDetailInfo[1]/cost, ",", //PricelistDetails/ServicePricelistDetailInfo[2]/cost, ",", //PricelistDetails/ServicePricelistDetailInfo[3]/cost, "]")="${COST1}" 

演示:

XPath Assertion Demo

參考:

+0

那很好運行 非常感謝 –

0

你的表達將只是[20,25,30]像比較每個值從返回數組(202530):

20 = [20,25,30] # false 
25 = [20,25,30] # false 
30 = [20,25,30] # false 

,並返回false所有comparissons失敗了,而你需要一次比較所有的人:

[20,25,30] = [20,25,30] # true 

我不知道,這是最好的解決辦法,但作爲最後的手段,你可以嘗試

concat('[', string-join(//PricelistDetails/ServicePricelistDetailInfo/cost, ','), ']') = '${COST1}' 
+0

不幸的是,在JMeter中沒有字符串連接函數,你必須堅持Xpath 1.0 –

+0

我試過這個 concat(「[」,// PricelistDetails/ServicePricelistDetailInfo [1]/cost,「,」,// PricelistDetails/ServicePricelistDetailInfo [2]/cost,「,」,// PricelistDetails/ServicePricelistDetailInfo [3]/cost,「]」)=「$ {COST1}」 和它的工作方式像魔術 –

相關問題