soapUI: jugando con web services
Indice
- Introducción a soapUI – Fast and Fun SOA Testing
Introducción
soapUI es una aplicación muy versátil que nos permite probar, simular y generar código de servicios web de forma ágil, partiendo del contrato de los mismos en formato WSDL y con vínculo SOAP sobre HTTP. soapUI tiene dos distribuciones: soapUI freeware (GNU LGPL y opensource java) y soapUIPro (comercial), en versión de escritorio, online y plugin para varios IDE.
Introducimos esta herramienta en este tutorial, mostrando su instalación y un primer ejemplo de uso con un web service público. Por último comentamos las características principales de soapUI.
En adictosaltrabajo.com existen otros tutoriales que explican o utilizan soapUI:
- Servicio Web con NetBeans 6 y prueba con SoapUI, de Roberto Canales
- Contract-First web services con Visual Studio 2008
- Otros tutoriales posteriores
Instalar soapUI 3.0.1
La página del producto es www.soapui.org, si bien los fuentes y binarios del proyecto se alojan en SourceForge.net, http://sourceforge.net/projects/soapui/. Descargamos la distribución más reciente (al escribir esto, la 3.0.1) en su versión freeware, mediante el enlace de su página web:
Lo que nos llevará a la web de SourceForge e iniciará la descarga del fichero soapUI-x32-3_0_1.exe de tamaño 67.8 MB:
Proyecto soapUI en SourceForge.net
Una vez en local, ejecutamos el instalador. Aceptamos el contrato de licencia:
Contrato de licencia GNU LGPL
Seleccionamos el directorio de instalación:
Directorio de instalación de soapUI
Para utilizar el programa es suficiente con la instalación de los binarios de soapUI:
Componentes de instalación de soapUI
Aceptando los siguientes pasos, comienza la copia de ficheros:
Instalación de soapUI 3.0.1
Al finalizar el asistente, iniciamos la herramienta:
Distribución de escritorio de soapUI 3.0.1
Ejemplo: probar un web service existente
Hagamos un test simple a un servicio web existente para comprobar al correcta instalación y conocer las funcionalidades básicas. En internet encontramos directorios y recursos de web services que pueden utilizarse libremente y sin subscripción de pago, por ejemplo:
- http://www.webservicex.net, servicios web listos para utilizar
- http://xmethods.net, otro clásico
- http://www.wsindex.org/Web_Services, servicios web y recursos relacionados
Vamos a utilizar el servicio Global Weather, cuyo endpoint es: http://www.webservicex.net/globalweather.asmx, para conocer las condiciones meteorológicas actuales de las principales ciudades del planeta.
Creamos un nuevo proyecto soapUI desde el menú File | New soapUI Project:
Nuevo proyecto de soapUI
Completamos la siguiente información del proyecto:
- Project Name: Tiempo meteorologico
- Initial WSDL/WADL, dirección web o ruta de fichero donde se encuentra el descriptor del servicio web de trabajo. En este caso nos lo indican el la web del servicio Global Weather: http://www.webservicex.net/globalweather.asmx?wsdl
- Create Request: activamos el checkbox de ‘Create sample requests for all operations?‘. soapUI creará un esqueleto de mensaje SOAP para invocar a los métodos del servicio web
Datos del proyecto de soapUI
Si la dirección del descriptor es correcta, soapUI lo recuperará:
Recuperando el WSDL del web service
Y a continuación lo analizará. Si no hay errores sintácticos ni ciertas incoherencias semánticas, creará el proyecto con la siguiente estructura:
- Nombre del proyecto
- Dos interfaces, GlobalWeatherSoap12 y GlobalWeatherSoap. En este caso en particular el servicio web expone dos interfaces, cada una con una versión de SOAP distinta.
- Dentro de cada interfaz, los metodos del servicio: GetCitiesByCountry y GetWeather
- Dentro de cada método, un esqueleto de mensaje SOAP, con el nombre genérico Request 1
Proyecto de nuestro servicio web
Haciendo soble click sobre Request 1 accedemos al mensaje de petición SOAP, el que enviaremos al servicio web. Sustituimos los caracteres ? por nuestros datos:
- CityName: San Sebastian
- CountryName: Spain
SOAP Request al método GetWeather
Enviamos el mensaje al servicio pulsando en la fecha verde de la esquina izquierda. Tras unos instantes, recibimos el mensaje de respuesta SOAP que se mostrará a la derecha de la ventana anterior:
SOAP Response con el tiempo de San Sebastián registrado a las 8:30 p.m. de hoy
Si editamos el SOAP Request del método GetCitiesByCountry, para conocer por ejemplo las ciudades disponibles en Chile:
¿Qué ciudades de Chile podemos consultar?
Recibiremos en la respuesta un dataset con los valores: Arica, Balmaceda, Chile Chico, etc.:
Ciudades de Chile con datos del tiempo
Si pulsamos en la pestaña lateral Raw, podemos ver el mensaje del protocolo HTTP sobre el que viaja SOAP, con el payload y el mensaje en su cuerpo:
Mensaje HTTP en claro
Finalmente mostramos un ejemplo de un mensaje de error. Si el mensaje de petición contiene datos no aceptados por el servicio web, o el mensaje SOAP tiene algún error que no permita ser analizado en el servidor, recibiremos un mensaje SOAP Fault. Vamos a forzar uno editando el SOAP Request anterior y modificamos la estructura XML del mensaje, cambiando por ejemplo web:CountryName y dejando web:Country:
Mensaje SOAP alterado
mensaje de respuesta del servicio:
SOAP Fault con error de aplicación
El servicio web emite un mensaje de error, describiendo el tipo (SqlException de .NET al esperar pero no disponer del parámetro CountryName)
Características y funcionalidades de soapUI
Vista la funcionalidad básica, que es la generación de un proyecto para vincularnos con un servicio web en este caso ya existente, otras interesantes son:
Examinar detalles y validar interfaces
Podemos ver los detalles de cada interfaz expuesta por el servicio web. Para ello, en nuestro ejemplo anterior, pulsamos con el botón derecho sobre uno de los dos, por ejemplo GlobalWeatherSoap12:
soapUI Interface viewer
Inicialmente obtenemos un resumen der servicio y operaciones:
soapUI overview
En la pestaña WSDL Content podemos ver el descriptor y navegar por su árbol de nodos:
soapUI WSDL Content
Asimismo, en la pestaña WS-I Compliance, podemos validar si el descriptor WSDL cumple con el estándar WS-I Basic Profile de interoperabilidad del Web Services Interoperability Organization (WS-I). Iniciamos el análisis pulsando en el icono de fecha verde:
Analizando conformidad del WSDL respecto del WS-I
El resultado emitido por el propio WS-I se muestra en la ventana, y su informe indica que el uso de SOAP 1.2 no es válido conforme el Basic Profile 1.1:
Informe de conformidad del WS-I Basic Profile 1.1
Generar casos de prueba funcionales
SOA promueve que todo web service sea probado exhaustivamente a nivel funcional. soapUI nos permite generar baterías de pruebas unitarias. La funcionalidad está disponible pulsando botón derecho sobre la interfaz a probar, y escogiendo la opción Generate TestSuite:
Batería de pruebas unitarias con soapUI
EL manual de soapUI nos muestra información detallada acerca de esta funcionalidad: http://www.soapui.org/userguide/functional/testsuites.html
Generar pruebas de rendimiento
De igual manera las pruebas de rendimiento de un servicio, por su naturaleza de ser un componente reutilizable por múltiples clientes, se hacen imprescindibles. Una vez creado un TestCase dentro de un TestSuite, podemos hacer botón derecho sobre el nodo Load Test (0) y crear un nuevo test de carga seleccionando New LoadTest:
Crear un test de carga
Más información en: http://www.soapui.org/userguide/loadtest/index.html
Simular el coportamiento de un web service
Una característica fundamental de los servicios web es la separación de su definición y su implementación. con soapUI y el WSDL de un servicio, podemos exponer la interfaz en un endpoint en su servidor de aplicaciones jetty, aun no estando programada su lógica de negocio. soapUI, mediante su funcionalidad Web Service Mocking, nos permite simularlo con scripts de Groovy: http://www.soapui.org/userguide/mock/index.html
Generar código fuente java y .NET cliente y servidor de un webservice
La construcción de web services dirigidos por contrato a partir de su WSDL es una tarea habitual y soapUI, al igual que muchas otras herramientas y frameworks, permite hacerlo. El menú Tools nos muestra todas las posibilidades y entornos de generación de código fuente de web services cliente y proveedor:
Entornos de generación de código del web service
Cabe señalar que tales entornos deben instalarse por separado y configurar soapUI para integrarse con ellos y acceder a sus comandos de generación.
Generar documentación del servicio
La documentación de un servicio, además de la incluida en el WSDL, es una labor promovida por el área de Gobierno SOA. Asimismo, para los desarrolladores puede ser de gran utilidad. La generación automática de documentación en HTML es una opción disponible pulsando con el botón derecho sobre una interfaz del servicio y seleccionando Generate Documentation:
Generar documentación con soapUI
El documento se generará en la carpeta seleccionada y se mostrará a continuación en un navegador:
Documentación HTML de un servicio a partir de su contrato
Probar servicios basados en REST
A las opciones antes explicadas sobre servicios web con SOAP se añade la posibilidad de hacerlo sobre aquellos basados en REST. En este caso puede especificarse la URL del servicio o un documento WADL (Web Application Description Language). La documentación de referencia se encuentra en http://www.soapui.org/userguide/rest/index.html
Conclusión
Herramientas como soapUI aportan notable agilidad al desarrollo y prueba de servicios web. No sólo a los desarrolladores les es muy útil, sino también en nuestros trabajos de análisis y arquitectura para validar y distribuir requisitos mediante el contrato de interfaz.
Una consulta?, por casualidad sabes porque cuando activo el Monitor SOAP, y luego ejecuto el mismo requerimiento que antes me funcionaba, ya no funciona.
Si me pudieses ayudar, lo agradecería mucho.
Gracias.
Excelente tutorial, para iniciar con SoapUI.
buen material de apoyo para proyectos WS
Muy bueno. Muchas gracias.
Buenisimo, muy claro todo!
Este programa permite hacer pruebas de un WS que utilice certificado?
excelente muchas gracias es de gran utilidad. felicitaciones.
Genial, simple y claro.
Gracias por el aporte muy bueno y facil de seguir
[…] voy a hablar aquí de SoapUI en detalle porque ya tenemos tutoriales para eso, como por ejemplo: http://adictosaltrabajo.com/tutoriales/introduccion-soap-ui/, pero sí que vamos a ver lo mínimo para afrontar este […]
Como puedo exportar e importar una base datos en esta aplicacion
La verdad que felicito a quien escribió este tutorial, me parece excelente para los que no conocíamos la herramienta.
JASM
Buenas tardes, me parece excelente. Tengo que trabajar con esta herramienta que es nueva para mi, ejecutando casos de pruebas y este material me parece muy bueno para los que estamos iniciando.
Buenos días amigo, podrás ayudarme en la creación de un mock para una web rest service. No tengo la idea de como comenzar.
Gracias Anticipadas.
Hola Lorenzo, espero estes bien. Lograste crear el mock.?? estoy empezando a usar esta herramienta y debo aprender como crear mock con la misma. Me seria de gran ayuda la informacion que me puedas brindar al respecto.
Saludos
La versión gratuita es totalmente operativa sin ninguna restricción ?
[…] Introducción SoapUI. […]
Excelente tutorial, pero como lo interperto con vb o C# para consumirlos
[…] si no estas muy familiarizado con SOAP UI, te recomiendo que le eches un vistazo al siguiente tutorial […]
EXCELENTE TUTORIAL LO FELICITO PRO SU APORTE
buen tutorial, lamentablemente no lo pude ejecutar ya que el web service http://www.webservicex.net/globalweather.asmx?wsdl ya no existe, si modificaseis el tutorial me gustaría saberlo y poder realizarlo al completo
Excelente tutorial, lamentablemente el servicio brindado ya no ejecuta correctamente.
Muchas gracias por el tutorial !
Hola a todos
¿Cómo les cambio el puerto al mockserver?
un saludo.