viernes, 10 de enero de 2014

SOAPUI para la creación de servicios falsos. I


Cuando se trabaja en un proyecto de mediana o gran envergadura es normal tener trabajando diferentes equipos en diferentes aspectos de un mismo sistema, diferentes componentes o módulos para poner un ejemplo. También es normal que estos componentes interactúen de alguna manera brindando o consumiendo información de otros componentes. En dependencia del grado de complejidad de cada tarea los  equipos de trabajo no tienen por qué ir trabajando al mismo ritmo y es entonces donde aparece la complicación de cómo hacer que un equipo A que requiere una funcionalidad que debe ser implementada por un equipo B pueda avanzar, si el equipo B aun no la ha implementado.

La respuesta vendría siendo  la siguiente:

  1. Como primer paso se debe establecer algún tipo de contrato que defina qué información brindará la funcionalidad y cómo está será accedida.
  2. Luego el equipo B debe implementar un componente falso, o sea algo que aunque no implementa la funcionalidad real actúa como si lo hiciera, lo más creíblemente posible. La idea es que este tipo de componente se implementa rápidamente, casi sin esfuerzo o con mucho menos esfuerzo que el componente real.
  3. Para finalizar el equipo A usaría el componente falso para comprobar que se cumple con el contrato del punto 1. Y de esta manera avanzar en su implementación.

Logrado esto, cuando el equipo B implemente la funcionalidad real, será cosa de quitar el componente falso y poner el real, y el equipo A ni tendrá que enterarse del cambio. Claro que debe ser notificado.

Bajo el supuesto de que la comunicación será vía servicios web usando SOAP o a través de APIs con servicios REST, la herramienta SOAPUI es la respuesta para implementar una solución rápida del punto 2.

Ya hemos visto algo de SOAPUI en [1] y en [2] así que para aquellos que consulten el blog no es una herramienta nueva. En esta primera entrada veremos cómo crear rápidamente un servicio web falso, mock, usando SOAPUI y en una segunda entrada veremos cómo hacer lo mismo pero para un servicio REST.

Comencemos.

Paso 1: Tener el WSDL del servicio que deseamos implementar.

Paso 2:  Creamos un proyecto en SOAPUI marcando la opción “Create MockService”.


Luego de realizada esta acción se nos muestra la siguiente ventana.


Ahí podemos seleccionar las operaciones que queremos exponer, la ruta y el puerto por el cual el SOAPUI estará escuchando. Además nos permite definir si queremos que el servicio sea iniciado inmediatamente.
Bastante fácil verdad?

La estructura es la siguiente:


Se puede apreciar el proyecto creado, una interface EchoSOAP12 que contiene un request de la operación y otra interface EchoSOAP12 MockService que es el servicio falso creado, que contiene una respuesta.

Paso 3: ajustar  el servicio falso creado.

Ya este paso es un poco más enfocado a cómo queremos que funcione el servicio. Por defecto puede venir con una respuesta generada por la misma herramienta como pueden ver a continuación.

Pero ustedes pueden crear tantas respuestas como quieran, y a través de scripts puede decidir cuál mostrar en función del mensaje request que sea enviado.
Para detener el servicio pueden pulsar sobre el botón rojo, con forma de cuadrado, en caso de que no lo estén usando, pues siempre será un ahorro de recursos.

Si queremos crear más respuestas podemos dar clic derecho sobre la operación echoOperation  dela interface del servicio web falso y tendremos la opción “New MockResponse”.


Para comprobar que tenemos 2 operaciones pues abrimos el Request 1 y ajustando el endpoint a http://127.0.0.1:8088/mockEchoSOAP12 podremos ver como primero se obtiene la respuesta creada por el soapui y luego la respuesta creada por nosotros.


El servicio se puede configura un poco más. Basta con ir a la última de la siguiente imagen.

Y veremos esta pantalla

Ahí aproveché para cambiar el host, pero igual pueden cambiar la ruta o el puerto. O tal vez especificar un operación fallida por defecto.

Paso 4: exportar el servicio creado para un servidor de aplicaciones.

Este paso es sumamente importante pues hasta el momento para usar el servicio falso creado tenemos que tener el SOAPUI corriendo, y eso no es muy eficiente. Lo ideal sería que pudiéramos desplegar el servicio  en un servidor de aplicaciones y usarlo desde ahí. Así que manos a la obra.

Paso 4.1:  damos clic en el proyecto creado y seleccionamos “Deploy as War” y procedemos a configurar la forma de despliegue.



Paso 4.2:  desplegar el resultado del paso 2 en un contenedor de aplicaciones.

En este caso para la versión de SOAPUI que tengo no me crea el war, si no recuerdo mal en versiones anteriores si lo hacía.
Así que modifiqué el puerto por el del 8080 para desplegarlo  en un tomcat ya que inicialmente quería hacerlo en el AS de WSO2 y agregué una carpeta en mi escritorio y obtengo lo siguiente:



Dentro del WEB-INF verán un web.xml, el cual pueden configurar a su gusto sin tener que volver a regenerar el proyecto desde el SOAPUI.

La carpeta generada la copio para [tomcat]/ webapps/ y al inicial el servidor me dirijo a http://localhost:8080/soapuimockEcho/ y podemos ver lo siguiente:


Si pinchamos en [EchoSOAP12 MockService] tendremos acceso al WSDL del servicio mock y si lo queremos probar pues hacemos lo mismo que en [2] y listo.


1 comentario: