|
|
Línea 1: |
Línea 1: |
− | Partiendo del WSDL, se puede crear automáticamente un servicio web con una demo de invocación y respuesta para cada operación declarada en el contrato del servicio (WSDL).
| + | It's about time soomene wrote about this. |
− | | |
− | ==Mock Service paso a paso==
| |
− | | |
− | 1. Generar nuevo proyecto, con el WSDL inicial y activar "create requests" y "create Ws Simulation of the imported WSDL".
| |
− | | |
− | 2. Cuando presenta la pantalla para Generar el mock Service, colocar el path y puerto
| |
− | y seleccionar "Adds the Mock Services endpoint to the mocked interface" si se quiere usar luego una dirección diferente a la indicada en el WSDL.
| |
− | | |
− | 3. Dar el nombre al Mock service
| |
− | | |
− | 4. Verificar cada respuesta para las operaciones generadas y editarlas con el contenido que se necesite par el servicio.
| |
− | | |
− | 5. Iniciar el Mock service que quedará atendiendo en el puerto y path indicados.
| |
− | | |
− | 6. Guardar el proyecto, esto genera un xml con la información necesaria para volver a generar el proyecto.
| |
− | | |
− | Un detalle importante es que con SOAP UI 2.5, si se necesita invocar desde el exterior al WSDL publicado por nuestro Mock, este queda conformado con una dirección de localhost en <SOAP:address location="localhost:port/path"/>. Entonces, si por ejemplo se utiliza el servicio simulado desde alguna herramienta de automatización como [http://www.dosideas.com/wiki/Selenium Selenium], invocará al WS en el localhost y no en la dirección del servidor.
| |
− | | |
− | Con la versión 3.0 esto no sucede, y es la que usamos. Necesita Java 6.
| |
− | | |
− | ==Iniciar el Mock Service en Windows==
| |
− | | |
− | El Mock Service se inicia con una línea de comando. Se necesita el xml generado al guardar el proyecto (ej: Mi-soapui-project.xml). Ver apartado Mock Service paso a paso.
| |
− | | |
− | Para Windows se puede hacer un .bat de esta manera (p.e. mockservicerunner.bat):
| |
− | | |
− | <code html4strict>
| |
− | | |
− | @echo off
| |
− | | |
− | set SOAPUI_HOME=%~dp0
| |
− | | |
− | set JAVA_HOME=C:\Archivos de programa\Java\jre6
| |
− | set JAVA=%JAVA_HOME%\bin\java
| |
− | | |
− | set CLASSPATH=%SOAPUI_HOME%soapui-3.0.1.jar;%SOAPUI_HOME%..\lib\*;
| |
− | | |
− | rem JVM parameters, modify as appropriate
| |
− | set JAVA_OPTS=-Xms128m -Xmx384m -Dsoapui.properties=soapui.properties "-Dsoapui.home=%SOAPUI_HOME%\"
| |
− | | |
− | if "%SOAPUI_HOME%\" == "" goto START
| |
− | set JAVA_OPTS=%JAVA_OPTS% -Dsoapui.ext.libraries="%SOAPUI_HOME%ext"
| |
− | set JAVA_OPTS=%JAVA_OPTS% -Dsoapui.ext.listeners="%SOAPUI_HOME%listeners"
| |
− | set JAVA_OPTS=%JAVA_OPTS% -Dsoapui.ext.actions="%SOAPUI_HOME%actions"
| |
− | :START
| |
− | rem ********* run soapui testcase runner ***********
| |
− | | |
− | "%JAVA%" %JAVA_OPTS% -cp "%CLASSPATH%" com.eviware.soapui.tools.SoapUIMockServiceRunner %*
| |
− | | |
− | </code>
| |
− | | |
− | Entonces, la línea de comando sería: mockservicerunner.bat -m "Nombre-MockService" "Mi-soapui-project.xml". Con esto se puede hacer un acceso directo y ubicarlo en el Inicio. De esta manera, cada vez que se inicia la PC servidor, estaría disponible el servicio.
| |
− | | |
− | | |
− | ==Iniciar el Mock Service en Unix==
| |
− | | |
− | El Mock Service se inicia con una línea de comando que involucra al archivo que viene en la instalación llamado "mockservicerunner.sh". Se necesita el xml generado al guardar el proyecto (ej: Mi-soapui-project.xml). Ver apartado Mock Service paso a paso.
| |
− | | |
− | Ej para Solaris:
| |
− | Se instala SOAPUI descomprimiendo el archivo soapui-3.0.1-linux-bin.zip, en el directorio deseado y la única modificación que hubo que hacer para poder ejecutar el mockservicerunner.sh, es editarlo cambiando el intérprete que lo ejecuta por Ej: ksh (#!/bin/ksh), en caso que no se cuente con el "sh" que viene originalmente en el script.
| |
− | | |
− | La línea de comando para levantar el servicio en segundo plano es:
| |
− | <code>
| |
− | nohup mockservicerunner.sh -m"Nombre-MockService" "/path/Mi-soapui-project.xml" &
| |
− | </code>
| |
− | Es conveniente crear un directorio por cada Servicio que se quiera implementar, donde quedará el archivo del proyecto Mi-soapui-project.xml, un script para iniciarlo, y donde quedarán los log de funcionamiento y error que genera SOAPUI.
| |
− | | |
− | ==Devolver un valor desde una petición (request)==
| |
− | | |
− | [http://www.dosideas.com/wiki/SoapUI SoapUI] permite simular un servicio. En caso de necesitar que el servicio simulado, tome un valor y responda dependiendo de ese valor ingresado, es necesario utilizar [http://www.dosideas.com/wiki/Groovy Groovy].
| |
− | | |
− | Con la siguiente secuencia:
| |
− | | |
− | 1. Seleccionar el Mock Service en SoapUI
| |
− | | |
− | 2. Seleccionar la operación
| |
− | | |
− | 3. Seleccionar la respuesta que se quiere codificar
| |
− | | |
− | 4. Parados sobre la respuesta de la operación, hacer click en pestaña "Script"
| |
− | | |
− | 5. Escribir el siguiente código en el panel de edición, substituyendo por los valores que correspondan:
| |
− | | |
− | <code html4strict>
| |
− | | |
− | def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context)
| |
− | def holder = groovyUtils.getXmlHolder(mockRequest.requestContent)
| |
− | // para trabajar con el valor ingresado en el nodo "id" de la operacion
| |
− | def idRequest = ( holder["//id"] )
| |
− | context.id = idRequest
| |
− | //si ingresa valores mayores 1, la salida será Si
| |
− | if (idRequest > "1")
| |
− | {
| |
− | context.salida = "Si"
| |
− | }
| |
− | //si ingresa valores menores o iguales a 1, la salida será No
| |
− | else
| |
− | {
| |
− | context.salida = "No"
| |
− | }
| |
− | </code>
| |
− | | |
− | Y así es como, dependiendo del valor ingresado, dinámicamente podremos devolver valores diferentes.
| |
− | | |
− | Hey, keillr job on that one you guys!
| |
− | | |
− | ==Obtener el valor de un nodo en un request con name space==
| |
− | | |
− | Si tenemos definido un name space en nuestro request vamos a tener que declarar el name space en nuestro holder para poder obtener los valores de los nodos.
| |
− | | |
− | '''Request con name space'''
| |
− | | |
− | <code html4strict>
| |
− | <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
| |
− | xmlns:xsd="http://chopera.metrochopp/xsd">
| |
− | <soapenv:Header/>
| |
− | <soapenv:Body>
| |
− | <xsd:getTamaño>
| |
− | <xsd:metros>1,5</xsd:metros>
| |
− | </xsd:getTamaño>
| |
− | </soapenv:Body>
| |
− | </soapenv:Envelope>
| |
− | </code>
| |
− | | |
− | Para leer el valor del nodo "<xsd:metros>" declaramos el name space en el holder de la siguiente manera:
| |
− | | |
− | <code html4strict>
| |
− | holder.declareNamespace('xsd', 'http://chopera.metrochopp/xsd')
| |
− | //obtenemos el valor del nodo
| |
− | def metros = holder.getNodeValue("//xsd:metros")
| |
− | </code>
| |
− | | |
− | ==Log del script==
| |
− | | |
− | Para logear desde el script de groovy tenemos que poner:
| |
− | | |
− | <code html4strict>
| |
− | log.info "Mensaje"
| |
− | </code>
| |
− | | |
− | Los logs saldran por la consola dentro de soapUI en la solapa que dice "script log".
| |
− | | |
− | ==Ver también==
| |
− | * [[Web Service]]
| |
− | * [[Clientes De Web Service]]
| |
− | * [[SoapUI Con JUnit]]
| |
− | * [http://www.dosideas.com/foros/5-ascensor-a-ningun-lugar/658-web-service-minimo-para-pruebas-de-desarrollo.html Foro con la comparación entre Jetty y SoapUI]
| |
− | * [http://www.soapui.org/userguide/functional/groovystep.html Ayuda con Groovy]
| |
− | * [http://www.soapui.org/apidocs/com/eviware/soapui/support/XmlHolder.html Documentación de XmlHolder]
| |
− | | |
− | [[Category:Web Service]]
| |
− | [[Category:ATDD]]
| |
It's about time soomene wrote about this.