2009-06-25 14 views
9

Tengo que burlarme del servicio web de Java bastante complicado y estoy buscando la solución adecuada. Una forma de hacerlo sería usar la interfaz de usuario de Soap, pero necesito algo que pueda modificar el estado del servidor, es decir. una solicitud afectaría solicitudes futuras.La mejor manera de burlarse del servicio web de Java

En este caso particular, podría hacerse rápidamente guardando los objetos serializados en el disco y generando a veces respuestas asíncronas al servicio web del cliente de origen.

Esos dos requisitos me impiden usar SoapUI; la lógica groovy se volvería bastante complicada y probablemente difícil de mantener.

Mis preguntas:

1) ¿Hay otras ventajas soapUI en este contexto (por ejemplo, una fácil migración a la nueva versión de WSDL) sobre la aplicación java personalizada simulada.?

2) ¿Cuál sería la forma más adecuada de generar el servicio web desde wsdl y aún así ser capaz de conectarlo con alguna funcionalidad personalizada, es decir. adjuntando algunos ganchos que se podrían editar en archivos separados (para facilitar la regeneración del código ws a partir de wsdl actualizado)?

+0

También debería tener en cuenta que el simulacro no es solo para fines de prueba y debe dejar al cliente como está, es decir. tiene que haber una comunicación http regular, solo los cambios en el punto final. Así que supongo que burlarse del marco no funcionará en este caso. – aaimnr

+0

Si está hablando de pruebas de integración, trataría de reflejar su entorno de producción lo más fielmente posible y usaría el servicio web real en una base de datos UAT/QA. Si el servicio web no está bajo su control, entonces considere crear datos de "prueba" que use durante sus pruebas.En mi humilde opinión, la creación de un 'simulacro'/stub del servicio web le da una falsa sensación de seguridad porque su 'simulacro' se basa en sus suposiciones sobre cómo se comportará el servicio web. Esto está bien en las pruebas unitarias, pero para una prueba de integración completa debe usar el real para asegurarse de que funciona. –

+0

No es realmente una prueba de integración, más bien piense en usarla con fines de capacitación. Dado que los servicios web que utiliza el frontend son realmente difíciles de reflejar (muchos datos confidenciales) es más fácil crear un simulacro ligero, pero lo suficientemente inteligente como para mantener el estado y, por lo tanto, proporcionar la posibilidad de escenarios de entrenamiento lógico. – aaimnr

Respuesta

2

Para simulaciones simples, utilizo soapUI, mientras que para las más complicadas, cuando el estado debe cambiar entre una solicitud, uso un emulador de servicio web simple escrito en Python. Dicho emulador utiliza plantillas de respuesta creadas a partir del servicio web real o las respuestas que creé en soapUI. De esta forma puedo controlar toda la lógica.

Emulador para mi último proyecto tiene más de 300 líneas de código Python, pero para el anterior, mucho más simple, era ~ 150 líneas de código Python.

+0

Eso suena genial y todo pero ¿está disponible? – Monachus

+0

soapUI es gratuito (también se paga la edición más avanzada). Los scripts de Python que uso para el emulador varían según el servicio especificado: usan el servidor HTTP y completan respuestas basadas en la plantilla y algún valor de base de datos. –

5

Debería mirar EasyMock, que permite construir simulaciones programáticamente. Es posible especificar comportamientos muy complejos para tus simulacros.

3

¿Presumiblemente está utilizando algún tipo de trozo generado en su cliente? Debería burlarse del stub con una de las API de burla (JMock o EasyMock) e inyectar el simulacro en la clase bajo prueba.

En el lado del servidor prueba esa clase que maneja la llamada, inyectando simulaciones de cualquier objeto que pueda usar para hacer su trabajo.

Como un aparte, debe esforzarse por mantener todas las llamadas en una unidad de prueba local (en proceso). Facilita el control de los valores de devolución de cualquier objeto del que dependa la clase bajo prueba y cuando el banco de pruebas crezca, ayudará a evitar que las pruebas unitarias se conviertan en un cuello de botella en su proceso de construcción.

Con respecto a la generación de una clase Java (es) de WSDL Apache Axis tiene algo llamado WSDL2Java, que genera los stubs del cliente que mencioné anteriormente. Este tipo de utilidad es común en los marcos del servicio web, pero puede haber sido reemplazado ahora desde que existe el servicio web EJB3 javax.xml.rpc.ServiceFactory.

Hay un tutorial sobre servicios web EJB3 y clientes aquí (http://www.theregister.co.uk/2007/01/23/ejb_web_services/).

Cuestiones relacionadas