¿Cómo hacer pruebas de carga de una clase Java con JMeter?

JMeter es una herramienta muy potente para hacer pruebas de rendimiento sobre peticiones HTTP.

También puede usarse para hacer pruebas de carga sobre clases Java, en este tutorial veremos cómo hacer pruebas de carga directamente sobre una clases Java (que luego podrá invocar a un Servicio externo por ejemplo).

Para eso:

1. Creamos un proyecto Maven con el archetype maven-archetype-simple

mvn archetype:create -DgroupId=com.lmgracia.examples.jmeter -DartifactId=jmeter-testingclass

2. Una vez creado vamos a añadir al proyecto las dependencias a JMeter para poder usar el interfaz JavaSamplerClient.

Para esto se necesitan los JARS ApacheJMeter_core y ApacheJMeter_java.

Para localizarlos puedo usar mvnrepository.com (http://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core ) que me darán:

Y luego en mi pom.xml meteré:

<dependency>

<groupId>org.apache.jmeter</groupId>

<artifactId>ApacheJMeter_core</artifactId>

<version>2.13</version>

<exclusions>

<exclusion>

<groupId>commons-math3</groupId>

<artifactId>commons-math3</artifactId>

</exclusion>

<exclusion>

<groupId>commons-pool2</groupId>

<artifactId>commons-pool2</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.apache.jmeter</groupId>

<artifactId>ApacheJMeter_java</artifactId>

<version>2.13</version>

<exclusions>

<exclusion>

<groupId>commons-math3</groupId>

<artifactId>commons-math3</artifactId>

</exclusion>

<exclusion>

<groupId>commons-pool2</groupId>

<artifactId>commons-pool2</artifactId>

</exclusion>

</exclusions>

</dependency>

Importante lo del exclude!

3. Genero el proyecto Eclipse con mvn eclipse:eclipse

4. Creo la clase que quiero lanzar desde JMeter. En lugar de implementar el interfaz JavaSamplesClient heredaré la clase abstracta AbstractJavaSamplerClient que ya implementa la mayoría de los métodos.

Implementaré los métodos getDefaultParameters() y runTest(JavaSamplerContext context)

5. En el método getDefaultParameters()configuro los parámetros que quiero usar por defecto. En mi caso:

@Override

public Arguments getDefaultParameters() {

Arguments defaultParameters = new Arguments();

defaultParameters.addArgument("SOFIA2_URL", "http://sofia2.com/sib-api/api/v1/alarmaes");

defaultParameters.addArgument("TOKEN", "<Poner token aqui>");

return defaultParameters;

}

6. En el método lanzaré el Test runTest(JavaSamplerContext context) que tendrá este aspecto:

@Override

public SampleResult runTest(JavaSamplerContext context) {

String urlString = context.getParameter( "SOFIA2_URL" );

String token = context.getParameter( "TOKEN" );

SampleResult result = new SampleResult();

result.sampleStart();

try {

java.net.URL url = new java.net.URL(urlString);

java.net.HttpURLConnection connection = (java.net.HttpURLConnection)url.openConnection();

connection.setRequestMethod("GET");

connection.connect();

result.sampleEnd();

result.setSuccessful( true );

result.setResponseMessage( "Invocación correcta al API" );

result.setResponseCodeOK(); // 200 code

} catch (Exception e) {

result.sampleEnd();

result.setSuccessful( false );

result.setResponseMessage( "Exception: " + e );

java.io.StringWriter stringWriter = new java.io.StringWriter();

e.printStackTrace( new java.io.PrintWriter( stringWriter ) );

result.setResponseMessage(stringWriter.toString() );

result.setDataType( org.apache.jmeter.samplers.SampleResult.TEXT );

result.setResponseCode( "500" );

}

return result;

}

NOTA:es recommendable testar el código antes de meterlo en JMeter 😀

7. Genero el JAR de la clase Sampler bien desde Eclipse, bien desde Maven y la dejo en la carpeta /lib/ext de %JMETER_HOME%

8. Lanzo el JMeter, selecciono y creo un Test Plan, dentro de Thread Group pongo 10 hilos y en Muestreador Java Request:

Directamente me aparecerá: mi Sampler:

Añado un Summary Report

9. Y ejecuto mi Java Request que ejecuta sin problema:

Si voy a View Results Tree veo:

¿Fácil verdad? 🙂

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: