2010-05-27 38 views
5

Soy nuevo en SoapUI y acabo de configurar un MockService muy simple. ¿Es posible manipular la respuesta para que, para una solicitud particular, los elementos de la respuesta se acumulen dinámicamente?Cómo devolver la respuesta dinámica en SoapUI MockService

Escenario 1:

Solicitud:

<record> 
    <identifier>ID1</identifier> 
</record> 

Respuesta:

<response> 
    <child1>child 1</child1> 
</response> 

Escenario 2:

Solicitud:

<record> 
    <identifier>ID2</identifier> 
</record> 

Respuesta:

<response> 
    <child2>child 2</child2> 
</response> 

Es una prueba sencilla y no se necesita hacer nada más que el anterior. Actualmente estoy haciendo lo siguiente que produce los resultados que quiero, pero ya que estoy completamente nuevo en esto estoy seguro que hay mejores alternativas:

Respuesta:

<response> 
    ${dynElement} 
</response> 

guión maravilloso:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def holder = groovyUtils.getXmlHolder(mockRequest.requestContent) 
def reqRef = String.valueOf(holder.getNodeValue("//identifier")) 

def child1Text = "<child1>child 1</child1>" 
def child2Text = "<child2>child 2</child2>" 

if (reqRef == "ID1") { 
    context.setProperty("dynElement", child1Text) 
} else if (reqRef == "ID2") { 
    context.setProperty("dynElement", child2Text) 
} 
+0

Creo que no fue su intención poner comillas dobles alrededor de child2Text en la última línea del ejemplo. De lo contrario, la variable child2Text nunca se lee. – 0x89

+0

sí, lo siento, un error. Voy a corregir – Ross

Respuesta

2

Lo hago con "respuestas enlatadas" y consultas xpath. Para hacer esto, configurará una serie de manejadores de envío en el servicio de simulación para que coincida con los requisitos de respones. Supongamos que tiene Request1, Request2, Response1, Response2. Utilice el método de envío "Consultar concordancia" para hacer coincidir una expresión XPATH. En ese partido, devuelve la respuesta deseada. es decir, si encuentra ID1 en xpath, devuelva la respuesta enlatada1.

Además, la versión PRO hace un gran trabajo con el XPATH, por lo que no tiene que codificarlo a mano. es decir, puede ver una respuesta, haga clic en la cosa que desea activar (en su caso, ID1) y construye la expresión XPATH para usted. Solicité una licencia de PRO solo basada en eso. Actualmente a la espera de la presupuestación ...

IMO, mucho más fácil de empezar que de averiguar groovy.

Chris

+0

Gracias Chris, eso es lo que estaba buscando. Me gusta el enfoque de configurar 'respuestas enlatadas' y las cosas XPath parecen funcionar para mí. Estoy muy impresionado con esta herramienta hasta ahora. – Ross

3

En lugar de XPath, también se puede utilizar XmlSlurper.

def req = new XmlSlurper().parseText(mockRequest.requestContent) 
def reqRef = req.record.identifier 

Desvergonzadamente arrancado de this question's de respuestas, por favor, no me hagas daño.

Cuestiones relacionadas