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:
- ¿Cómo pruebo el servidor iniciado sin lanzar excepciones?
- ¿Cómo pruebo si el servidor todavía responde y no ha muerto (debido a las pruebas de estrés)?
- ¿Cómo cierro el servidor y me aseguro de que no se lanzaron excepciones o que nada impidió un apagado correcto?