domingo, diciembre 10, 2017

Como crear un plugin en JMeter (III)

En esta ocasión vamos a mostrar como enviamos datos desde JMeter a nuestros preprocesadores o posprocesadores, tanto en un sentido como en otro.

En anteriores entregas mostramos como crear el entorno en eclipse para poder crear los plugins y como añadir dos plugins sencillos a JMeter.


En esta entrega, cuando hablemos de "plugin", hablaremos siempre del preprocesador o posprocesador creados en java.

Si sois usuarios habituales de JMeter sabréis que se pueden crear variables para posteriormente utilizarlas en las diferentes ejecuciones de las pruebas, o incluso, se pueden obtener datos de ficheros.

Estas variables pueden. enviarse a los plugins y ser utilizados en nuestro código java, y también pueden ser modificadas por los plugins para posteriormente utilizarlas directamente en la ejecución de las pruebas de JMeter.

Imaginemos que tenemos un preprocesador. Como vimos en el anterior capítulo, el código es muy simple:

import org.apache.jmeter.processor.PreProcessor;
import org.apache.jmeter.testelement.AbstractTestElement;

public class PrimerPreprocesador extends AbstractTestElement implements PreProcessor
{
 public PrimerPreprocesador() 
 {
  super();
 }
 
 @Override
 public void process() 
 {
  // TODO Auto-generated method stub
 }
}

En este caso he creado una clase en la cual se recogen las variables definidas en JMeter a través del contexto. Por ejemplo, en este caso hemos definido en JMeter las variables:
  • estado
  • tipoDocumento
  • documento
  • letraDocumento

Para manejar estas variables creamos una clase en java. Suelo llamarle por el mismo nombre de JMeter a las variables en Java.

  • En el constructor de la clase, se obtienen los datos que envía JMeter con un método llamado getObject.
  • Hay un método denominado datosFinalesJMeter. Este método será el encargado de modificar las variables de JMeter y se le pasan tres parámetros:
    • La variable de JMeter en la cual se enviarán nuestros datos.
    • El nombre de la variable de JMeter.
    • El valor asignado a esa variable.
  • Hay que añadir los getters y setters de las variables definidas en la clase para manejar internamente esas variables.

import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.jmeter.util.JMeterUtils;


public class DatosInicialesJMeter
{
 private String estado;
 private String tipoDocumento;
 private String documento;
 private String letraDocumento;

 public DatosInicialesJMeter(JMeterVariables vars)
 {  
  JMeterContextService.getContext().setVariables(vars);

  this.estado = (String)vars.getObject("estado");
  this.tipoDocumento = (String)vars.getObject("tipoDocumento");
  this.documento = (String)vars.getObject("documento");
  this.letraDocumento = (String)vars.getObject("letraDocumento");
 }

 public void datosFinalesJMeter(JMeterVariables vars, String nombre, String valor)
 {
  vars.put(nombre, valor);
 }
 public String getEstado()
 {
  return estado;
 }
 public void setEstado(String estado)
 {
  this.estado = estado;
 }
}

Después de crear esta clase, ya podemos trabajar con los datos de JMeter en java. Para ello basta con crear un objeto de nuestra clase DatosInicialesJMeter. Por ejemplo:


import org.apache.jmeter.processor.PreProcessor;
import org.apache.jmeter.testelement.AbstractTestElement;
import DatosInicialesJMeter; //si es necesario

public class PrimerPreprocesador extends AbstractTestElement implements PreProcessor
{
 public PrimerPreprocesador() 
 {
  super();
 }
 
 @Override
 public void process() 
 {
  DatosInicialesJMeter diJMeter = new DatosInicialesJMeter(JMeterContextService.getContext().getVariables());
  String miEstado = diJMeter.getEstado();

  //modificamos la variable miEstado y al final la devolvemos con el nuevo valor
  miEstado = 1;

  diJMeter.datosFinalesJMeter(JMeterContextService.getContext().getVariables(), "estado", miEstado);
 }
}

Con el cambio realizado en nuestro código, la variable estado de JMeter ya no tendrá el valor 0 que tenía inicialmente sino que tendrá el valor 1.

Con este sencillo código podremos comunicar variables desde JMeter a nuestro plugin en java y al revés.

No hay comentarios: