2014-06-26 54 views
0

我希望得到任何幫助與以下:了SoapUI(Groovy的) - 從另一個請求的響應傳遞的節點值,如果條件爲真

XML響應:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <ns3:GetSeatPlanAvailabilityResponse xmlns:ns2="http://stagecoach.com/schemas/engine/common" xmlns:ns3="http://stagecoach.com/schemas/engine/seat"> 
     <ns3:header> 
      <ns2:version>1.0</ns2:version> 
     </ns3:header> 
     <ns3:journeyDetails> 
      <ns2:journeyId>4769046</ns2:journeyId> 
      <ns2:origin> 
       <ns2:cityId>120</ns2:cityId> 
       <ns2:description>Memphis, TN</ns2:description> 
       <ns2:stop>MEM</ns2:stop> 
      </ns2:origin> 
      <ns2:destination> 
       <ns2:cityId>320</ns2:cityId> 
       <ns2:description>Austin, TX</ns2:description> 
       <ns2:stop>AUS</ns2:stop> 
      </ns2:destination> 
      <ns2:departureDate>2014-07-28Z</ns2:departureDate> 
      <ns2:departureTime>04:00:00Z</ns2:departureTime> 
     </ns3:journeyDetails> 
     <ns3:noOfNonReservableSeatsRemaining>70</ns3:noOfNonReservableSeatsRemaining> 
     <ns3:singleSeats> 
      <ns2:singleSeat> 
       <ns2:seatPlanKey>US1</ns2:seatPlanKey> 
       <ns2:seatId>7ecc7775-6caa-4e17-80d7-6cfa46be507b</ns2:seatId> 
       <ns2:seatNumber>1</ns2:seatNumber> 
       <ns2:seatClassCode>FRN</ns2:seatClassCode> 
       <ns2:seatDeck>UPPER</ns2:seatDeck> 
       <ns2:availableForSelection>true</ns2:availableForSelection> 
      </ns2:singleSeat> 
      <ns2:singleSeat> 
       <ns2:seatPlanKey>US2</ns2:seatPlanKey> 
       <ns2:seatId>fe73cc9a-7c4f-4d1f-80e5-6131926af694</ns2:seatId> 
       <ns2:seatNumber>2</ns2:seatNumber> 
       <ns2:seatClassCode>FRN</ns2:seatClassCode> 
       <ns2:seatDeck>UPPER</ns2:seatDeck> 
       <ns2:availableForSelection>true</ns2:availableForSelection> 
      </ns2:singleSeat> 
      <ns2:singleSeat> 

       <ns2:seatPlanKey>US3</ns2:seatPlanKey> 
       <ns2:seatId>20121517-d657-438f-bc26-92bb98b20bb5</ns2:seatId> 
       <ns2:seatNumber>3</ns2:seatNumber> 
       <ns2:seatClassCode>FRN</ns2:seatClassCode> 
       <ns2:seatDeck>UPPER</ns2:seatDeck> 
       <ns2:availableForSelection>true</ns2:availableForSelection> 
      </ns2:singleSeat> 
      <ns2:singleSeat> 
       <ns2:seatPlanKey>US4</ns2:seatPlanKey> 
       <ns2:seatId>b93be6b7-ebb9-482e-9ec2-3c9d32beab32</ns2:seatId> 
       <ns2:seatNumber>4</ns2:seatNumber> 
       <ns2:seatClassCode>FRN</ns2:seatClassCode> 
       <ns2:seatDeck>UPPER</ns2:seatDeck> 
       <ns2:availableForSelection>true</ns2:availableForSelection> 
    </ns2:singleSeat> 
     </ns3:singleSeats> 
     <ns3:doubleSeats/> 
     <ns3:salesClassInformation> 
      <ns2:seatClassCode>FRN</ns2:seatClassCode> 
      <ns2:salesClassCode>SFRN</ns2:salesClassCode> 
      <ns2:salesClassDescription/> 
      <ns2:price>3.00</ns2:price> 
      <ns2:maxPassengers>1</ns2:maxPassengers> 
     </ns3:salesClassInformation> 
     <ns3:salesClassInformation> 
      <ns2:seatClassCode>LEG</ns2:seatClassCode> 
      <ns2:salesClassCode>SLEG</ns2:salesClassCode> 
      <ns2:salesClassDescription/> 
      <ns2:price>7.00</ns2:price> 
      <ns2:maxPassengers>1</ns2:maxPassengers> 
     </ns3:salesClassInformation> 
     <ns3:salesClassInformation> 
      <ns2:seatClassCode>TBL</ns2:seatClassCode> 
      <ns2:salesClassCode>STBL</ns2:salesClassCode> 
      <ns2:salesClassDescription/> 
      <ns2:price>9.00</ns2:price> 
      <ns2:maxPassengers>1</ns2:maxPassengers> 
     </ns3:salesClassInformation> 
     </ns3:GetSeatPlanAvailabilityResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

XML請求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bas="http://stagecoach.com/schemas/engine/basket" xmlns:com="http://stagecoach.com/schemas/engine/common"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <bas:AddSeatToBasketRequest> 
     <bas:header> 
      <com:version>1.0</com:version> 
      <com:retailOperation>US</com:retailOperation> 
      <com:channel>WEB</com:channel> 

     </bas:header> 
     <bas:basketItemId>56227</bas:basketItemId> 
     <!--1 or more repetitions:--> 
     <bas:seatSelectionInput> 
      <com:passengerOrdinal>1</com:passengerOrdinal> 
      <com:SeatId>7ecc7775-6caa-4e17-80d7-6cfa46be507b</com:SeatId> 
     </bas:seatSelectionInput> 
     <bas:seatSelectionInput> 
      <com:passengerOrdinal>2</com:passengerOrdinal> 
      <com:SeatId>d653b812-3230-4a31-88e7-a4ad867fb131</com:SeatId> 
     </bas:seatSelectionInput> 
     </bas:AddSeatToBasketRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 

我的要求是,我需要將<ns2:seatId>傳遞給另一個請求,首先它應該尋找條件,當<ns2:availableForSelection>TRUE,否則它應該跳到'假',並選擇`並將其傳遞給請求

有人可以請提供上述邏輯的groovy腳本?

+0

我編輯了你的文章,但是,上面的Request和Response都是不完整的XML。另外:1)你只需要在Groovy中完成這項工作?爲什麼? 2)當'seatId'爲'false'時,你期望什麼? – SiKing

+0

感謝您的回覆。我編輯了我的文章以包含完整的XML。 1)我首選Groovy,因爲我使用肥皂用戶界面,但我也可以使用Groovy的其他可用代碼。 2)我的要求是首先查找'真',並通過seatID並跳到'False',當真正離開並通過SeatID 請求。謝謝 – user3778964

+0

您的要求仍不清楚!該響應具有多個'availableForSelection = true';你想要哪一個?你的請求有多個'SeatId';你想要哪一個?我不明白「當真正離開時,跳到'假'。它沒有任何意義。 – SiKing

回答

0

您需要根據您的確切需要調整以下代碼,因爲您的問題中仍然缺少信息。

// to read a node from your Response 
def grUtils = new com.eviware.soapui.support.GroovyUtils(context) 
// depending on when/how your are doing this, you will need to provide the exact test step name 
def xmlHolder = grUtils.getXmlHolder("${context.currentStep.name}#Response") 

def seatIdNode = xmlHolder.getDomNode("//*:singleSeat[availableForSelection='true']/seatId") 

// if nothing was found 
if(seatIdNode == null) { 
    testRunner.cancel("seatId was not found!") 
    return 
} 

// you can store this in a testcase property 
testRunner.testCase.setPropertyValue("seatId", seatId.firstChild.nodeValue) 
// and use it in your next Request as '${#TestCase#seatId}' 

有一種方法可以將seatId直接寫入下一個請求。如果您希望走這條路線,我有一個blog entry,它描述瞭如何生成XML請求。

最後,所有這些都可以使用純粹的SoapUI測試步驟完成,而無需使用Groovy。有條件的轉到步驟將檢查上面的XPath是否存在,如果不存在,則繞過您的下一個請求。使用與上述相同的XPath的傳輸屬性步驟會將seatId的值傳輸到您的下一個請求。

+0

感謝您的回覆。我編輯了上面的腳本「def xmlHolder = grUtils.getXmlHolder(」GetSeatPlanAvailability#ResponseAsXml「)」,當我運行它時,它返回以下錯誤xml異常:意外的元素:CDATA錯誤在行:4。 TransferProperty雖然工作。 – user3778964

+1

試試'def xmlHolder = grUtils.getXmlHolder(「GetSeatPlanAvailability#Response」)'。 – SiKing

+0

這樣做現在它返回一個不同的錯誤。 「NullPointerException:無法在第5行的空對象錯誤處獲得屬性'firstchild' – user3778964

相關問題