domingo, febrero 12, 2006

Performance Testing con JUnitPerf

Una forma muy recomendable de probar la performance de nuestra aplicación es comprobar la performance de los mismos componentes a los cuales les generamos un test unitario (generalmente con JUnit). Si además estas pruebas son también junits, podremos agregarlas al conjunto de pruebas que hacemos continuamente en nuestra aplicación, ya sea manualmente al desarrollar o mediante un continuous build server (por ejemplo CruiseControl).
Todo esto lo podremos lograr con JUnitPerf, una colección de decoradores para medir la performance de tests JUnit.

Por ejemplo, si tenemos un JUnit SimpleTest con el método testAnything:
public class SimpleTest extends TestCase {
...
public void testAnything() throws Exception {
...
}
}
podemos hacer una clase de test que pruebe la performance del método testAnything creando un nuevo JUnit y utilizando los decoradores de JUnitPerf:
public class SimpleResponseTimeTest {
public static Test suite() {
long maxTime = 500;
Test test = new SimpleTest("testAnything");
Test timedTest = new TimedTest(test, maxTime);
return timedTest;
}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}
En este caso el test fallará si dura mas de 0,5 segundos.

También podemos medir la performance simulando una carga de usuarios concurrentes, como en este ejemplo:
public class SimpleLoadTest {
public static Test suite() {
long maxTime = 500;
int concurrentUsers = 5;
Test test = new SimpleTest("testAnything");
Test timedTest = new TimedTest(test, maxTime);
Test loadTest = new LoadTest(timedTest, concurrentUsers);
return loadTest;
}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}
A las clases LoadTest y TimerTest se le puede pasar también una instancia de RepeatedTest, para medir no sólo una ejecución del test sinó varias, por ejemplo:
public class SimpleLoadTest {
public static Test suite() {
int users = 10;
int iterations = 20;
Timer timer = new ConstantTimer(500);
Test test = new SimpleTest("testAnything");
Test repeatedTest = new RepeatedTest(test, iterations);
Test loadTest = new LoadTest(repeatedTest, users, timer);
return loadTest;
}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}
Para mas opciones sobre la herramienta, no queda mas que visitar la web de JUnitPerf, o este otro artículo: Continuous Performance Testing With JUnitPerf.

2 comentarios:

Luces dijo...

pues quería devolverte la visita y poner un comentario agradable, pero Niko, esto me suena a chino.
besos

Anónimo dijo...

Saludos

No se donde poner esto. He estado buscando por muchos sitios y no encuentro nada y tengo una duda me gustaría saber como puedo hacer imagino que será con java lo típico q sale en muchas páginas de enviar noticia a un amigo si me pudieras ayudar.
Gracias de antemano