Forum Discussion

mchelikani's avatar
mchelikani
Contributor
12 years ago

GroovyScript - Saving Request to a File

I have a httprequest where I have some values(Start, End etc) getting from datasource as shown below. I have a groovy script to store request and responses. The issue I am facing is, once the request is saved shows the same request shown below instead of values getting replaced with data from my datasource.

The TestCase and TestStep are successful. It looks like when it is executed soapui successfully replacing with the values from datasource but when I save the request through below groovy script , it is storing the request as it is.

Can anyone please help? or have any suggestion here. Thanks!!

DataSource: RegressionData

<soap:Envelope xsi:schemaLocation="http://gcnet/Intranet/cgi-bin/1AXML.xsd" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header xmlns="http://www.amadeus.net/1axml-msg/schema/msg-header-1_0.xsd">
<MessageHeader ResponseRequested="true" Terminate="true" Reverse="true" id="095C7130000E8A" version="1.0" soap:mustUnderstand="1">
<From>AVMHOS</From>
<To>1ASRHOS6C2</To>
<TimeStamp>
<GenerationTime>2012-07-25T18:27:06Z</GenerationTime>
</TimeStamp>
<FromRef>
<ID>00C9RXCK4N</ID>
<SequenceNb>1</SequenceNb>
</FromRef>
<Service version="" id="OTA2007A">
<name>OTA_HotelAvailRQ</name>
</Service>
</MessageHeader>
</soap:Header>
<soap:Body>
<OTA_HotelAvailRQ xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05 OTA_HotelAvailRQ.xsd" EchoToken="T" Target="Test" Version="2.001" PrimaryLangID="en" SummaryOnly="1" RateRangeOnly="1" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source AgentSine="A9999WS" PseudoCityCode="DUBIE38SP" ISOCountry="IE" ISOCurrency="EUR" AgentDutyCode="SU" AirlineVendorID="1A" AirportCode="DUB">
<RequestorID Type="22" ID="00333480" ID_Context="IATA"/>
</Source>
</POS>
<AvailRequestSegments>
<AvailRequestSegment>
<HotelSearchCriteria>
<Criterion ExactMatch="1">
<StayDateRange Start="${RegressionData#StartDate}"/>
</Criterion>
<Criterion ExactMatch="1">
<StayDateRange End="${RegressionData#EndDate}"/>
</Criterion>
<Criterion ExactMatch="1">
<RoomStayCandidates>
<RoomStayCandidate>
<GuestCounts>
<GuestCount AgeQualifyingCode="10" Count="1"/>
</GuestCounts>
</RoomStayCandidate>
</RoomStayCandidates>
</Criterion>
<Criterion ExactMatch="1">
<HotelRef ChainCode="${RegressionData#Brand}" HotelCode="${RegressionData#Brand}${RegressionData#Amadeus}" HotelCityCode="ATL" HotelCodeContext="1A"/>
</Criterion>
</HotelSearchCriteria>
</AvailRequestSegment>
</AvailRequestSegments>
</OTA_HotelAvailRQ>
</soap:Body>
</soap:Envelope>


Groovy Script to Save and Request and Response to File:


def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def lastResult = testRunner.getResults().last()
def lastResultName = lastResult.getTestStep().getLabel().toString()
def request = groovyUtils.getXmlHolder(lastResultName + "#Request")
def response = groovyUtils.getXmlHolder(lastResultName + "#Response")
//def response = groovyUtils.getXmlHolder(testStepResult.testStep.Response)

def resultsFolderPath = context.expand( '${resultsPath}' )
def testCaseName = testRunner.testCase.name
def hotel = context.expand( '${RegressionData#Hotel}' )
def testName = context.expand( '${RegressionData#TestName}' )
def corpID = context.expand( '${RegressionData#CorpID}' )

log.info("Request..."+request.getXml())
log.info("Response..."+response.xml)
log.info("resultsFolderPath..."+resultsFolderPath)

def filePath = resultsFolderPath
def requestFileSuffix = "_RQ.xml"
def responseFileSuffix = "_RS.xml"
def fileName = ''

if(testCaseName){
fileName = fileName + testCaseName
}
if(testName){
fileName = fileName +"_" + testName
}

if(hotel){
fileName = fileName + "_" + hotel
}
if(lastResultName){
fileName = fileName + "_" +lastResultName
}
def testcaseRequest = new PrintWriter(filePath + fileName + requestFileSuffix )
def testcaseResponse = new PrintWriter(filePath + fileName + responseFileSuffix )
testcaseRequest.println( request.xml)
testcaseResponse.println( response.getXml())
testcaseRequest.flush()
testcaseRequest.close()
testcaseResponse.flush()
testcaseResponse.close()
  • nmrao's avatar
    nmrao
    Champion Level 3
    Just trying to understand your scenario.

    Would you please tell the high level steps in your test case and where does this groovy run in the order?
  • I have a Test Step-1 where I have HTTP Request as I posed. The http request has variables which gets data from datasource.
    I have an event handler testRunListener.afterStep where I have the groovy code as I posted.

    when I try to save the request using the groovy script in the above said even handler the request getting saved is as it is in my HttpRequest Post body. (I am expecting the variable in my request will get replaced with values from datasource).

    The test case is successful as when I the request is sent to the server and when I caputure it in our server it has values replaces from the datasource.

    please let me know if I am not clear. Thanks for Replying.