mocking webservice with SoapUI example

test case data config xml

<?xml version="1.0" encoding="UTF-8"?>

<webservices>
	<version number="1">		
		<service name="AuthenticateService">
		    <wsdlFileName>AuthenticateService.wsdl</wsdlFileName>
			<servicePath>/mockrgtServicesV1</servicePath>
			<operation name="authenticate">
			    <!-- Binding the response whose name is equal to this mock request's UniqueId to this request -->
			    <!-- If the operation has only one test case, set a defaultResponse is OK, no need to add xpath expression -->
			    <xpathExpression>declare namespace ser='http://com.test.wagerlink/services'; //ser:authenticate[1]/ser:UniqueId/.</xpathExpression>
                <defaultResponse>testplayer1</defaultResponse>
				<testcase name="SUCCESS" SkinCode="GEN1" ChannelCode="INT"
					IntegrationModeCode="XFR">
					<request name="request1">
						<UniqueId>testplayer1</UniqueId>
						<SecureToken>this is securitytoken for testplayer</SecureToken>
					</request>
					<response name="testplayer1">
						<Status>
							<StatusCode>101</StatusCode>
							<Message>no</Message>
							<Status>Complete</Status>
						</Status>
						<UniqueID>testplayer1</UniqueID>
						<Balance>12.0</Balance>
						<Currency>GBP</Currency>
						<Country>GB</Country>
						<StakeLimit>100</StakeLimit>
						<LossLimit>5</LossLimit>
						<SessionTimeout>30</SessionTimeout>
					</response>
				</testcase>
				<testcase name="SUCCESS2" SkinCode="GEN1" ChannelCode="INT"
					IntegrationModeCode="XFR">
					<request name="request2">
						<UniqueId>testplayer2</UniqueId>
						<SecureToken>this is securitytoken for testplayer</SecureToken>
					</request>
					<response name="testplayer2">
						<Status>
							<StatusCode>101</StatusCode>
							<Message>no</Message>
							<Status>Complete</Status>
						</Status>
						<UniqueID>testplayer2</UniqueID>
						<Balance>12.0</Balance>
						<Currency>GBP22</Currency>
						<Country>GB</Country>
						<StakeLimit>100</StakeLimit>
						<LossLimit>5</LossLimit>
						<SessionTimeout>30</SessionTimeout>
					</response>
				</testcase>
			</operation>
		</service>
		<service name="PlayerBalanceService">
		    <wsdlFileName>PlayerBalanceService.wsdl</wsdlFileName>
			<servicePath>/mockrgtServicesV1_playerBalance</servicePath>
			<operation name="GetBalance">
			  <!-- Binding the response whose name is equal to this mock request's UniqueId to this request -->
			  <!-- If the operation has only one test case, set a defaultResponse is OK, no need to add xpath expression -->
				<defaultResponse>testGetBalance1</defaultResponse>
				<testcase name="SUCCESS" SkinCode="GEN1" ChannelCode="INT"
					IntegrationModeCode="XFR">
					<request name="request1">
						 <UniqueId>testGetBalance1</UniqueId>
						 <SecureToken>test secure token</SecureToken>
					</request>
					<response name="testGetBalance1">
						<Status>
							<StatusCode>101</StatusCode>
							<Message>no</Message>
							<Status>completed</Status>
						</Status>
						<UniqueID>testGetBalance1</UniqueID>
						<CurrencyCode>GBP</CurrencyCode>
						<Balance>11</Balance>
					
				     </response>
				</testcase>
			</operation>
		</service>
		<service name="GenerateTicketService">
		    <wsdlFileName>GenerateTicket.wsdl</wsdlFileName>
			<servicePath>/mockrgtServicesV1_generateTicket</servicePath>
			<operation name="generateTicket">
			  <!-- Binding the response whose name is equal to this mock request's UniqueId to this request -->
			  <!-- If the operation has only one test case, set a defaultResponse is OK, no need to add xpath expression -->
				<defaultResponse>testGenerateTicket1</defaultResponse>
				<testcase name="SUCCESS" SkinCode="GEN1" ChannelCode="INT"
					IntegrationModeCode="XFR">
					<request name="request1">
						 <SkinCode>GEN1</SkinCode>
						 <UniqueID>testUniqueId</UniqueID>
						 <Password>123456</Password>
					</request>
					<response name="testGenerateTicket1">
						 <return>sucessfully generated ticket</return>
					</response>
				</testcase>
			</operation>
		</service>
		
		<service name="ReceiveGameTxnService">
		    <wsdlFileName>ReceiveGameTxnService.wsdl</wsdlFileName>
			<servicePath>/mockrgtServicesV1_ReceiveGameTxn</servicePath>
			<operation name="ReceiveGameTxnMessage">
			  <!-- Binding the response whose name is equal to this mock request's UniqueId to this request -->
			  <!-- If the operation has only one test case, set a defaultResponse is OK, no need to add xpath expression -->
				<defaultResponse>testReceiveGameTxnMessage1</defaultResponse>
				<testcase name="SUCCESS" SkinCode="GEN1" ChannelCode="INT"
					IntegrationModeCode="XFR">
					<request name="request1">
						 <UniqueId>testUniqueId</UniqueId>
						 <CasinoSkinCode>GEN1</CasinoSkinCode>
						 <GameTxnId>2011</GameTxnId>
						 <TxnSequence>2001</TxnSequence>
						 <Currency>GB</Currency>
						 <SoftwareId>2007-001</SoftwareId>
						 <TxnStartTime>2007</TxnStartTime>
						 <TxnEndTime>2008</TxnEndTime>
						 <TransactionStatus>testTxnStatus</TransactionStatus>
						 <MinimumBetAmount>1.3</MinimumBetAmount>
						 <WagerAmountHandle>22.2</WagerAmountHandle>
						 <PayoutAmount>33.3</PayoutAmount>
						 <Mode>tstMode</Mode>
						 <SecureToken>tstSecureToken</SecureToken>
					</request>
					<response name="testReceiveGameTxnMessage1">
						<Status>
						   <StatusCode>101</StatusCode>
						   <Message>no message</Message>
						   <Status>completed</Status>
						</Status>
						<NsGameTxnId>26</NsGameTxnId>
						<Timestamp>123456</Timestamp>
					</response>
				</testcase>
			</operation>
		</service>
		
		<service name="rgtHeartBeatService">
		    <wsdlFileName>rgtHeartBeatService.wsdl</wsdlFileName>
			<servicePath>/mockrgtServicesV1_rgtHeartBeat</servicePath>
			<operation name="heartbeat">
			  <!-- Binding the response whose name is equal to this mock request's UniqueId to this request -->
			  <!-- If the operation has only one test case, set a defaultResponse is OK, no need to add xpath expression -->
				<defaultResponse>testheartbeat1</defaultResponse>
				<testcase name="SUCCESS" SkinCode="GEN1" ChannelCode="INT"
					IntegrationModeCode="XFR">
					<request name="request1">
						<Timestamp>201101</Timestamp>
					</request>
					<response name="testheartbeat1">
						<heartbeatinfo>12345</heartbeatinfo>
					</response>
				</testcase>
			</operation>
		</service>
	
	</version>
</webservices>

 

transit test case to soapui mock service config xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy?-->
<xsl:stylesheet version="1.0"  
xmlns:v1DefaultNs="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:con="http://eviware.com/soapui/config" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ser="http://com.test.wagertest/services" 
xmlns:java="java:com.test.webservices.casino.services.rgt"
xmlns:javaTxn="java:com.test.webservices.casino.services.rgt.receivegametxn"
>

<xsl:param name="wsdlFileDir"/>
<xsl:param name="serviceHost"/>
<xsl:param name="servicePort"/>

<xsl:output method="xml" version="1.0" indent="yes"/>
 <xsl:template match="/">
 <xsl:apply-templates select="/webservices/version[@number='1']"/>
 </xsl:template>
<xsl:template match="version">
	  <xsl:variable name="ser">http://com.test.wagertest/services</xsl:variable>
	  <xsl:variable name="java">java:com.test.webservices.casino.services.rgt</xsl:variable>
	  <xsl:variable name="javaTxn">java:com.test.webservices.casino.services.rgt.receivegametxn</xsl:variable>
<!-- <con:soapui-project name="testV1">-->
<xsl:element name="con:soapui-project">
    <xsl:attribute name="name">testV1</xsl:attribute>
    <con:settings/>
  <xsl:for-each select="service">
	  <xsl:variable name="mockServiceName"><xsl:value-of select="@name"/></xsl:variable>
	  <xsl:variable name="wsdlFilePath"><xsl:value-of select="$wsdlFileDir"/></xsl:variable>
	  <xsl:variable name="wsdlFileName"><xsl:value-of select="./wsdlFileName/."/></xsl:variable>
	  <xsl:variable name="wsdlURI"><xsl:value-of select="$wsdlFilePath"/>/<xsl:value-of select="$wsdlFileName"></xsl:value-of></xsl:variable>
	  <xsl:variable name="interfaceName"><xsl:value-of select="document($wsdlURI)//v1DefaultNs:binding/@name"/></xsl:variable>
	  <xsl:variable name="portTypeName"><xsl:value-of select="document($wsdlURI)//v1DefaultNs:portType/@name"/></xsl:variable>
	  <xsl:variable name="servicePath"><xsl:value-of select="./servicePath/."/></xsl:variable>
	  <xsl:variable name="targetNamespace"><xsl:value-of select="document($wsdlURI)//@targetNamespace"/></xsl:variable>
	  <xsl:variable name="bindingName">{<xsl:value-of select="$targetNamespace"/>}<xsl:value-of select="$interfaceName"/></xsl:variable>
  
	  <xsl:element name="con:interface">
	  	<xsl:attribute name="xsi:type">con:WsdlInterface</xsl:attribute>
	  	<xsl:attribute name="wsaVersion">NONE</xsl:attribute>
	  	<xsl:attribute name="name"><xsl:value-of select="$interfaceName"/></xsl:attribute>
	  	<xsl:attribute name="type">wsdl</xsl:attribute>
	  	<xsl:attribute name="bindingName"><xsl:value-of select="$bindingName"/></xsl:attribute>
	  	<xsl:attribute name="soapVersion">1_1</xsl:attribute>
	  	<xsl:attribute name="anonymous">optional</xsl:attribute>
	  	<xsl:attribute name="definition"><xsl:value-of select="$wsdlURI"/></xsl:attribute>
	  	
	  	<con:settings/>
	  	
	  	<xsl:element name="con:definitionCache">
	  		<xsl:attribute name="type">TEXT</xsl:attribute>
	  		<xsl:attribute name="rootPart"><xsl:value-of select="$wsdlURI"/></xsl:attribute>
	  		<xsl:element name="con:part">
	  		<con:url><xsl:value-of select="$wsdlURI"></xsl:value-of></con:url>
	  		<xsl:text disable-output-escaping= "yes"><con:content></xsl:text>
	  		<xsl:text disable-output-escaping= "yes"><![CDATA[</xsl:text>    
	  		   <xsl:copy-of select="document($wsdlURI)"/>   
	  	    <xsl:text disable-output-escaping= "yes">]]></xsl:text> 
	  	    <xsl:text disable-output-escaping= "yes"></con:content></xsl:text> 
	  		<con:type>http://schemas.xmlsoap.org/wsdl/</con:type>
	  		</xsl:element>
	  	</xsl:element>
	  	
	  	<con:endpoints>
	  		<con:endpoint>https://bossk:443/CasinoWS/Authenticate</con:endpoint>
	  	</con:endpoints>
	  	<xsl:for-each select="./operation">
	  	  <xsl:element name="con:operation">
	  		<xsl:attribute name="isOneWay">false</xsl:attribute>
	  		<xsl:attribute name="action"></xsl:attribute>
	  		<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
	  		<xsl:attribute name="bindingOperationName"><xsl:value-of select="@name"/></xsl:attribute>
	  		<xsl:attribute name="type">Request-Response</xsl:attribute>
	  		<xsl:attribute name="inputName"></xsl:attribute>
	  		<xsl:attribute name="receivesAttachments">false</xsl:attribute>
	  		<xsl:attribute name="sendsAttachments">false</xsl:attribute>
	  		<xsl:attribute name="anonymous">optional</xsl:attribute>
	
	  		<con:settings></con:settings>
	  		<xsl:variable name="operationName"><xsl:value-of select="@name"/></xsl:variable>
	  		<xsl:for-each select="testcase">
	  		  <xsl:element name="con:call"><xsl:attribute name="name"><xsl:value-of select="request/@name"/></xsl:attribute>
	  		    <con:settings>
					<con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment<xsl:text disable-output-escaping= "yes">/></xsl:text></con:setting>
				</con:settings>
				<con:encoding>UTF-8</con:encoding>
				<con:endpoint>http://<xsl:value-of select="$serviceHost"/>:<xsl:value-of select="$servicePort"/><xsl:value-of select="$servicePath"/> </con:endpoint>
				<xsl:for-each select="request">
					<xsl:element name="con:request">
					  <xsl:text disable-output-escaping= "yes"><![CDATA[</xsl:text>
		  		 	  <xsl:text disable-output-escaping= "yes"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="</xsl:text>
		  		 	    <xsl:value-of select="$targetNamespace"/><xsl:text disable-output-escaping= "yes">"></xsl:text>
		  		 	    <soapenv:Header/>
		  		 	      <soapenv:Body>
		  		 	        <xsl:element name="ser:{$operationName}">
		  		 	            <xsl:for-each select="./*">
		  		 	              <xsl:element name="ser:{name()}" ><xsl:value-of select="."/></xsl:element>
		  		 	            </xsl:for-each>
						    </xsl:element>
						  </soapenv:Body>
		  		 	  <xsl:text disable-output-escaping= "yes"></soapenv:Envelope>]]></xsl:text>
		  	        </xsl:element>
	  	        </xsl:for-each>
	  	        <con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/>
	  	        <xsl:element name="con:wsaConfig">
	  	          <xsl:attribute name="mustUnderstand">NONE</xsl:attribute>
	  	          <xsl:attribute name="version">200508</xsl:attribute>
	  	          <xsl:attribute name="action"><xsl:value-of select="$targetNamespace"/>/<xsl:value-of select="$portTypeName"/>/<xsl:value-of select="$operationName"/>Request</xsl:attribute>
	  	        </xsl:element>
	  	        <con:wsrmConfig version="1.2"/>
	  		  </xsl:element> <!-- /con:call -->
	  		</xsl:for-each>
	  	  </xsl:element> <!-- /con:operation -->
	  	</xsl:for-each>
	  </xsl:element> <!-- /con:interface -->
  <!-- end of webService configuration -->
  
  <!-- 
    ***  mock service configuration  ***
  -->
	  <xsl:element name="con:mockService"><xsl:attribute name="port"><xsl:value-of select="$servicePort"/></xsl:attribute><xsl:attribute name="path"><xsl:value-of select="$servicePath"/></xsl:attribute><xsl:attribute name="host"><xsl:value-of select="$serviceHost"/></xsl:attribute><xsl:attribute name="name"><xsl:value-of select="$mockServiceName"/></xsl:attribute>
	    <con:settings>
				<con:setting id="com.eviware.soapui.impl.wsdl.mock.WsdlMockService@require-soap-action">false</con:setting>
		</con:settings>
		<xsl:for-each select="./operation">
		<xsl:variable name="operationName"><xsl:value-of select="@name"/></xsl:variable>
		  <xsl:element name="con:mockOperation">
		    <xsl:attribute name="name"><xsl:value-of select="@name"/> </xsl:attribute>
		    <xsl:attribute name="interface"><xsl:value-of select="$interfaceName"/> </xsl:attribute>
		    <xsl:attribute name="operation"><xsl:value-of select="@name"/> </xsl:attribute>
		  <con:settings/>
		  <xsl:choose>
		     <xsl:when test="./xpathExpression">
		        <con:dispatchPath><xsl:value-of select="./xpathExpression/."/></con:dispatchPath>
		        <con:dispatchStyle>XPATH</con:dispatchStyle>
		     </xsl:when>
		     <xsl:otherwise>
		        <con:dispatchStyle>SEQUENCE</con:dispatchStyle>
		     </xsl:otherwise>
		  </xsl:choose>
		  <con:defaultResponse><xsl:value-of select="defaultResponse/."/> </con:defaultResponse>
		  <xsl:for-each select="testcase">
		    <xsl:for-each select="response">
			    <xsl:element name="con:response">
			      <xsl:attribute name="name"><xsl:value-of select="./@name"/></xsl:attribute>
			      <xsl:attribute name="encoding">UTF-8</xsl:attribute>
			    <con:settings/>
			    <con:responseContent>
			       <xsl:text disable-output-escaping= "yes"><![CDATA[</xsl:text>
		  		   
					  <xsl:choose>
					  <xsl:when test="$operationName='authenticate'">
					       <xsl:text disable-output-escaping= "yes"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="</xsl:text><xsl:value-of select="$ser"/>
					       <xsl:text disable-output-escaping= "yes">" xmlns:java="</xsl:text><xsl:value-of select="$java"/>
					       <xsl:text disable-output-escaping= "yes">"></xsl:text>
				  		 	   <soapenv:Header/>
				  		 	   <soapenv:Body>
				  		 	        <ser:authenticateResponse>
				  		 	        	 <ser:return>
				  		 	        	 	<xsl:call-template name="copyBlock">
							  					<xsl:with-param name="childNodes" select="./*"/>
							  					<xsl:with-param name="prefix">java</xsl:with-param>
											</xsl:call-template>
				  		 	        	 </ser:return>
				  		 	        </ser:authenticateResponse>
				  		 	   </soapenv:Body>
					    </xsl:when>
					    <xsl:when test="$operationName='GetBalance'">
					       <xsl:text disable-output-escaping= "yes"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="</xsl:text><xsl:value-of select="$ser"/>
					       <xsl:text disable-output-escaping= "yes">" xmlns:java="</xsl:text><xsl:value-of select="$java"/>
					       <xsl:text disable-output-escaping= "yes">"></xsl:text>
				  		 	   <soapenv:Header/>
				  		 	   <soapenv:Body>
				  		 	        <ser:GetBalanceResponse>
				  		 	        	<ser:return>
										     <xsl:call-template name="copyBlock">
								  					<xsl:with-param name="childNodes" select="./*"/>
								  					<xsl:with-param name="prefix">java</xsl:with-param>
											</xsl:call-template>
										</ser:return>
									</ser:GetBalanceResponse>
				  		 	   </soapenv:Body>
					    </xsl:when>
					    <xsl:when test="$operationName='generateTicket'">
					       <xsl:text disable-output-escaping= "yes"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="</xsl:text><xsl:value-of select="$ser"/>
					       <xsl:text disable-output-escaping= "yes">"></xsl:text>
				  		 	   <soapenv:Header/>
				  		 	   <soapenv:Body>
				  		 	        <ser:generateTicketResponse>
									     <xsl:call-template name="copyBlock">
							  					<xsl:with-param name="childNodes" select="./*"/>
							  					<xsl:with-param name="prefix">ser</xsl:with-param>
										</xsl:call-template>
									</ser:generateTicketResponse>
				  		 	   </soapenv:Body>
					    </xsl:when>
					    <xsl:when test="$operationName='ReceiveGameTxnMessage'">
					       <xsl:text disable-output-escaping= "yes"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="</xsl:text><xsl:value-of select="$ser"/>
					       <xsl:text disable-output-escaping= "yes">" xmlns:javaTxn="</xsl:text><xsl:value-of select="$javaTxn"/>
					       <xsl:text disable-output-escaping= "yes">" xmlns:java="</xsl:text><xsl:value-of select="$java"/>
					       <xsl:text disable-output-escaping= "yes">"></xsl:text>
				  		 	   <soapenv:Header/>
				  		 	   <soapenv:Body>
				  		 	   		<ser:ReceiveGameTxnMessageResponse>
         								<ser:Response>
				  		 	            <xsl:call-template name="copyBlock">
							  				<xsl:with-param name="childNodes" select="./*"/>
							  				<xsl:with-param name="prefix">javaTxn</xsl:with-param>
							  				<xsl:with-param name="operationName">ReceiveGameTxnMessage</xsl:with-param>
										</xsl:call-template>
										</ser:Response>
     								</ser:ReceiveGameTxnMessageResponse>
				  		 	   </soapenv:Body>
					    </xsl:when>
					    
					    <xsl:when test="$operationName='heartbeat'">
					       <xsl:text disable-output-escaping= "yes"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="</xsl:text><xsl:value-of select="$ser"/>
					       <xsl:text disable-output-escaping= "yes">"></xsl:text>
				  		 	   <soapenv:Header/>
				  		 	   <soapenv:Body>
				  		 	         <ser:heartbeatResponse>
				  		 	         	<xsl:call-template name="copyBlock">
							  				<xsl:with-param name="childNodes" select="./*"/>
							  				<xsl:with-param name="prefix">ser</xsl:with-param>
										</xsl:call-template>
				  		 	         </ser:heartbeatResponse>
				  		 	   </soapenv:Body>
					    </xsl:when>
					  </xsl:choose>

		  		 	  <xsl:text disable-output-escaping= "yes"></soapenv:Envelope>]]></xsl:text>
			    </con:responseContent>
			    <con:wsaConfig mustUnderstand="NONE" version="200508" action="{$targetNamespace}/{$portTypeName}/{$operationName}Response"/>
			    </xsl:element>
		    </xsl:for-each>
		  </xsl:for-each>
		  <xsl:element name="con:dispatchConfig">
		  </xsl:element>
		  </xsl:element>
		</xsl:for-each>
	  </xsl:element>
    </xsl:for-each> <!-- for each service -->
  	<con:properties/>
	<con:wssContainer/>
</xsl:element> <!-- /soapui-project -->
</xsl:template>

<xsl:template name="copyBlock">
    <xsl:param name="childNodes" select="*"/>
    <xsl:param name="prefix">java</xsl:param>
    <xsl:param name="operationName">test</xsl:param>
  	<xsl:for-each select="$childNodes">
	  <xsl:choose>
		<xsl:when test="* and name()='Status' and $operationName='ReceiveGameTxnMessage'">
		     <xsl:element name="{$prefix}:{name()}">
				 <xsl:call-template name="copyBlock">
				   <xsl:with-param name="childNodes" select="child::*"/>
				   <xsl:with-param name="prefix">java</xsl:with-param>
				 </xsl:call-template>
			</xsl:element>
		</xsl:when>
		
		<xsl:when test="*">
		     <xsl:element name="{$prefix}:{name()}">
				 <xsl:call-template name="copyBlock">
				   <xsl:with-param name="childNodes" select="child::*"/>
				 </xsl:call-template>
			</xsl:element>
		</xsl:when>
		
		<xsl:otherwise>
		   <xsl:element name="{$prefix}:{name()}"><xsl:value-of select="."/></xsl:element>
		</xsl:otherwise>
		</xsl:choose>
		
	</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


 

start the mock service with soapUI mock runner.

你可能感兴趣的:(webservice,service,XSL,binding,stylesheet,mocking)