2011-10-26 21 views
9

Estoy pensando en automatizar las pruebas de rendimiento, de la misma manera que lo que tenemos actualmente con las pruebas unitarias.¿Cómo automatizar las pruebas de rendimiento e integrar con CI?

Sé cómo ejecutar pruebas de rendimiento con herramientas como jMeter o escribiendo mi propio código para activar partes específicas de la aplicación. Sé cómo usar time, jvisualvm, nmon u otros para recopilar información sobre los recursos que se utilizan.

Me gustaría ir más allá y escribir una prueba de rendimiento, que fallaría si cruza ciertas líneas (tiempo de ejecución, memoria o CPU consumida ...). Luego, haría que mi servidor de CI (Jenkins) realizara las pruebas de forma periódica para garantizar que el rendimiento sea bueno.

Esto es complicado porque el rendimiento depende del hardware, y en la forma actual en que lo hago, se requiere una interpretación humana de los resultados para decidir si esto es satisfactorio o no.

¿Conoces alguna herramienta o marco (si es posible basado en Java) que ayude a automatizar las pruebas de rendimiento de esa manera? Si no, ¿tiene alguna buena práctica para aconsejar?

Gracias.

+0

donde quieres poner tus sensores ... Servidor o Cliente. De cualquier manera, debe establecer sus objetivos específicos para lograr en la prueba. Si haces que los resultados de las pruebas sean interpretables, como el tiempo de respuesta, puedes decidir fácilmente si pasan o si fallan automaticamente ... happy scripting – jpse

+0

Ambos, y a veces ambos al mismo tiempo. Por ejemplo, tengo un caso en el que tenemos un cliente de Windows que se comunica con el servidor. Quiero asegurarme de que no cargue demasiado en el servidor. Entonces eso implicará comenzar muchas instancias del cliente, y medir cosas del lado del servidor como el consumo de CPU, la memoria ... –

Respuesta

2

En el pasado, he usado JUnit para hacer algunas pruebas de rendimiento. Sin embargo, no necesitó la interpretación humana: el algoritmo tomó demasiado tiempo o fue lo suficientemente rápido. En cierto modo, era una prueba de aprobación/rechazo, basada en un umbral de tiempo.

Si necesita pruebas de rendimiento subjetivas hechas automáticamente, me temo que será difícil construirlas.

+0

Así que supongo que mides el tiempo que tarda la pieza de código para ejecutar, y llamas "fail()" si está por encima de algún valor. ¿Qué pasa con el consumo de memoria? –

+0

Eso es correcto. No necesitamos rastrear el consumo de memoria. –

0

puede usar jmeter con ant para ejecutar automáticamente pruebas de perf en un servidor de CI. No estoy seguro de si puede interceptar los tiempos de respuesta que exceden un umbral, pero supongo que debería ser simple hacerlo a través de XSL/shell scripting. Sin duda, puede publicar un informe de rendimiento que puede revisarse manualmente.

3

Si sus pruebas son subjetivas, entonces para automatizarlas, debe sacar algo de la subjetividad "fuera". Con eso quiero decir, establezca algunos umbrales que considere aceptables e inaceptables. Vea si hay una manera de lanzar una bandera o algo que Jenkins pueda ver. Si tiene estos umbrales, tiene más posibilidades de obtener la automatización que desea.

+0

Estoy de acuerdo con eso. Creo que parte de este ejercicio es dejar en claro cuáles son los límites que quiero establecer. –

2

Jenkins tiene un "Plugin de rendimiento" que captura los resultados de JMeter y JUnit. Búsquelo en los "complementos disponibles" en "Complementos" en "Administrar Jenkins"

+0

Gracias. Parece que permite umbrales. Ese será un buen comienzo para mí. –

1

Para pasar o no la prueba automáticamente, debe poder definir los criterios de aprobación/falla en términos de números de booleanos. Este puede ser el tiempo de respuesta promedio o un análisis estadístico ligeramente más avanzado, p. función de tendencia o desviación estándar.

No conozco ninguna herramienta que haga este tipo de cosas tanto para el lado del cliente como del servidor.

Hay un número limitado de herramientas que pueden hacer eso para los resultados del lado del cliente.

Con Jenkins Performance Plugin debe poder pasar/reprobar una compilación, utilizando el umbral de error configurado. Esta es una verificación automática muy básica de los resultados de las pruebas y una forma de aprobar o reprobar la construcción.

Cuando me encontré con un desafío similar, evalué el Plugin de rendimiento y no estaba completamente satisfecho con las funcionalidades que proporciona. De esta forma comencé a trabajar en el proyecto Lightning basado en Java. Le da la capacidad de analizar los resultados de JMeter y pasar la construcción automáticamente, en base a, p.tiempos de respuesta promedio para tipo de transacción particular o desviación estándar.

Cuestiones relacionadas