SOAP UI Dynamic mock service using Groovy Script
Create dynamic mock service using SOAP UI . You will just need the WSDL . You should be familiar using the soap ui and creating the mock service . Following is to only make it dynamic
- Create a SoapUI project using the WSDL . Right click and select the mock service .
- Select the WebService Method and Open the Response that has to be customized
- Create two files for Success and Error response and place them in folder {Project-Path}/responses
- WebService Response ( Right portion of the Soap UI Window )will be made dynamic based on request. Delete everything from mock response and replace with${content} . This value will be dynamically rendered from groovy script
- Choose Dispatch -> Script , and then choose Dynamic Reponse
- Use the groovy script below , to render Success and Error Responses .
It works in the following way ,
- if quotenumber is 9999 - send Error response
- anything else - send Success Response
Now you can create more test cases and test them by changing the input in the xml . Providing the input , output and the script below
Input ( for ref )
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://www.testing.com/WS/quoteWS"> <soapenv:Header/> <soapenv:Body> <test:Quote> <QuoteRequest> <quoteNumber>9999</quoteNumber> <quoteTitle>?</quoteTitle> <quotePrice>?</quotePrice> </QuoteRequest> </test:Quote> </soapenv:Body> </soapenv:Envelope>'
Output
Success
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://www.testing.com/WS/quoteWS"> <soapenv:Header/> <soapenv:Body> <test:QuoteResponse> <QuoteReply> <status>Success</status> <!--Optional:--> <errorCode>0</errorCode> <!--Optional:--> <errorMessage></errorMessage> <!--Optional:--> <errorDetail></errorDetail> </QuoteReply> </test:QuoteResponse> </soapenv:Body> </soapenv:Envelope>
Error
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://www.testing.com/WS/quoteWS"> <soapenv:Header/> <soapenv:Body> <test:QuoteResponse> <QuoteReply> <status>ERROR</status> <!--Optional:--> <errorCode>11</errorCode> <!--Optional:--> <errorMessage>Failed</errorMessage> <!--Optional:--> <errorDetail>Something failed </errorDetail> </QuoteReply> </test:QuoteResponse> </soapenv:Body> </soapenv:Envelope>
Groovy Script
import com.eviware.soapui.support.GroovyUtils
import groovy.xml.XmlUtil
log.info 'start'
def groovyUtils = new GroovyUtils(context)
def xmlParser = new XmlParser()
def responseContent
def requestXmlHolder = groovyUtils.getXmlHolder(mockRequest.getRequestContent())
requestXmlHolder.declareNamespace("test","http://www.testing.com/WS/quoteWS")
def quoteNumber = requestXmlHolder.getNodeValue("//test:Quote/QuoteRequest[1]/quoteNumber[1]")
log.info  quoteNumber
if(quoteNumber == '9999')
{
responseContent = xmlParser.parse(groovyUtils.projectPath +"/responses/error-response.xml")
}
else
{
responseContent = xmlParser.parse(groovyUtils.projectPath +"/responses/success-response.xml")
}
context.content = XmlUtil.serialize(responseContent)
log.info 'complete'
 


 
 
No comments:
Post a Comment