unitarias sistema que pruebas las integración integracion función ejemplo cuál java jersey jetty integration-testing dropwizard

java - sistema - pruebas unitarias e integración



Pruebas de integración DropWizard Apps (1)

1.) Creo que te refieres a Excepciones, que matan a la aplicación DW, porque hay algunas Excepciones deseadas, como WebAppExceptions. Entonces solo debes verificar si tu aplicación se está ejecutando. Si hay un problema importante, su aplicación DW no se iniciará y por lo tanto no puede responder a los reuqests.

Aquí algunas ideas adicionales: a.) Si desea probar dependencias externas, las pruebas en jenkins o en su máquina local no son una buena idea. Para probar su aplicación en entorno LIVE, puede crear HealthChecks y verificarla mediante curl o herramientas de cliente http. Deberías obtener algo de json como:

{"deadlocks":{"healthy":true},"database":{"healthy":true}}

Verifique esto desde el exterior, por ejemplo, elimine esta instancia DW de su loadbalancer si healthchecks singles insalubre. Agregue todas las cosas importantes a un Healthcheck, para que pueda estar seguro de si su aplicación es saludable o no.

b.) Realice algunas pruebas de recursos después de iniciar su aplicación. Si obtiene una respuesta, su aplicación DW se está ejecutando. c.) Verifique su registro. Busque el nivel de registro ERROR o WARN. Si hay cero entradas, puede suponer que su aplicación comenzó sin excepciones.

2.) Simplemente haga una solicitud HTTP a su recurso ;-) Respuesta significa que su aplicación se está ejecutando.

3.) Uso ShutdownHooks. Allí verifico todas las cosas importantes, por ejemplo, se cierra la conexión a la base de datos ... Normalmente, se puede cerrar la aplicación correctamente.

Puede agregar el código recortado a su constructor de Servicio.

public YourService(){ ... // In case vm shutdown Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { // what should be closed if forced shudown // .... LOG.info(String.format("--- End of ShutDownHook (%s) ---", APPLICATION_NAME)); } }); ... }

Si esta no es la respuesta deseada, proporcione más información.

Acabo de leer los documentos de prueba de DropWizard, y estoy enamorado de sus capacidades integradas de prueba integrada . TL; DR: permite que tus pruebas JUnit desarrollen instancias en memoria de Jetty y esencialmente sirvan a tus puntos finales API (métodos de recursos) ya que existirán en la naturaleza. Esto le permite llegar a los puntos finales de su API con un cliente (contra el localhost ) y ver cómo lo hacen / realizan. ¡Increíble!

Me pregunto si es posible usar DropWizardAppRule (o algo similar) para iniciar / apagar mi aplicación DropWizard y verificar que no se lanzaron excepciones (prueba de humo); y

La prueba de detección de humo sería útil porque podría haber alguna excepción relacionada con la inicialización que impida que la aplicación se inicie (archivo de configuración incorrecto, etc.), y sería bueno saberlo con antelación. De manera similar, las pruebas de humo al apagar el dispositivo son útiles porque es posible que tengamos algo que no cierre / se rompa con elegancia, y que tenga un hilo colgante que simplemente no muera, etc.

También sería bueno poner a prueba el funcionamiento del servidor en memoria y ver dónde se desplaza (¿quizás lanzando un OOME?).

Entonces, dado el siguiente fragmento de código:

public class IntegrationTest { @ClassRule public static final DropwizardAppRule<TestConfiguration> RULE = new DropwizardAppRule<TestConfiguration>(MyApp.class, resourceFilePath("my-app-config.yaml")); @Test public void shouldStartWithNoExceptions() { // ??? } @Test public void stressTest10kUsers() { // What exceptions could I check for to see if the server pushed over after // 10,000 random endpoints were hit? } @Test public void shouldShutdownGracefully() { // ??? } }

Pregunto:

  1. ¿Cómo pruebo el servidor iniciado sin lanzar excepciones?
  2. ¿Cómo pruebo si el servidor todavía responde y no ha muerto (debido a las pruebas de estrés)?
  3. ¿Cómo cierro el servidor y me aseguro de que no se lanzaron excepciones o que nada impidió un apagado correcto?