Colas y JMeter: compartir con el editor y el suscriptor

¡Hola Habr! Esta es una secuela de la mía. publicacion anterior, en el que hablaré sobre opciones para colocar mensajes en colas usando JMeter.

Estamos fabricando un bus de datos para una gran empresa federal. Varios formatos de solicitud, transformaciones, enrutamiento complejo. Para realizar pruebas, debe enviar muchos mensajes a la cola. Manualmente es un dolor que no todos los quiroprácticos pueden manejar.

Colas y JMeter: compartir con el editor y el suscriptor

introducción

Aunque al principio tuve que aguantar este dolor. Todo empezó con RFHUtil. Potente, pero incómodo y aterrador: bueno, ya conoces a Rusia.

Colas y JMeter: compartir con el editor y el suscriptor

Indispensable en algunos casos, pero en constante declive en caso de uso activo.
Con él es imposible realizar pruebas cómodas.

Con JMeter todo se ha vuelto más fácil. Después de la primera etapa de dominarlo y acostumbrarse, comenzó a surgir la esperanza de una prueba feliz.

Utilizo activamente los samplers JMS Publisher y JMS Subscriber. A diferencia de JMS Punto a Punto, este par parecía más cómodo de usar. Por ejemplo, con Suscriptor en JMS Selector puede especificar una variable, pero con Punto a Punto no puede (o este método no es muy obvio).

Preparando muestras

Editor JMS

  • Configuración: cada muestra. apache recomienda utilice esta opción si las colas/temas se especifican mediante variables.
  • Caducidad (ms) = 120000. En caso de falla, las solicitudes de prueba desaparecerán de la cola después de 2 minutos.
  • ¿Usar modo de entrega no persistente? - verdadero. IBM reclamacionesese modo persistente garantiza la preservación confiable de los mensajes transmitidos en caso de una falla repentina. Y un intercambio más rápido en modo no persistente. A efectos de prueba, la velocidad es más importante.

En cada publicador configuro una propiedad jms que el suscriptor usará en el selector JMS. Para cada envío, se genera un valor aleatorio en el elemento del plan de prueba de parámetros de usuario:

Colas y JMeter: compartir con el editor y el suscriptor

De esta manera podrá estar seguro de que se lee el mensaje correcto.

El último "espacio en blanco" de un JMS Publisher preconfigurado:

Colas y JMeter: compartir con el editor y el suscriptor

Suscriptor JMS

  • Configuración: cada muestra. Bueno, lo entiendes.
  • Tiempo de espera (ms) = 100000. Si la solicitud no llega a la cola después de 100 segundos de espera, entonces algo salió mal.
  • ¿Parar entre muestras? - verdadero.

Selector JMS: bastante conveniente una pieza. Suscriptor final de JMS:

Colas y JMeter: compartir con el editor y el suscriptor

Cómo lidiar con el alfabeto cirílico en los mensajes transmitidos. En JMeter, de forma predeterminada, después de la revisión, se muestra torcido. Para evitar esto y disfrutar de lo grande y poderoso siempre y en todas partes, es necesario:

  1. Agregue un argumento JVM al “lanzador” de JMeter:
    -Dfile.encoding=UTF-8
  2. Agregue el posprocesador JSR223 al suscriptor con una línea maravillosa:
    prev.setDataEncoding("UTF-8")

Enviar texto

La opción más perezosa. Adecuado para depurar pruebas recién escritas. O para los casos en los que necesitas enviar al menos algo pequeño. Seleccionar opción Fuente del mensaje: área de texto y coloque el cuerpo del mensaje en un bloque de texto:

Colas y JMeter: compartir con el editor y el suscriptor

Transferencia de archivos

La opción más común. Adecuado para la mayoría de escenarios. Seleccionar opción Fuente del mensaje: desde archivo e indique la ruta al mensaje en el campo Archivo - Nombre de archivo:

Colas y JMeter: compartir con el editor y el suscriptor

Transferir un archivo a un campo de texto

La opción más versátil. Adecuado para la mayoría de los escenarios + se puede utilizar en JMS punto a punto donde no hay una segunda opción de envío:

Colas y JMeter: compartir con el editor y el suscriptor

Pasar una matriz de bytes

La opción más difícil. Adecuado para comprobar la transmisión infaliblemente precisa de solicitudes hasta el byte, sin distorsiones, SMS ni perturbaciones. No podrá hacer esto en el JMeter predeterminado. aquí Definitivamente me dijeron sobre esto.

Entonces tuve que descargar fuentes y modificar código Suscriptor JMS.

Reemplazado en el método extractContent(..) línea:

buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");

en:

byte[] bytes = new byte[(int) bytesMessage.getBodyLength()];
bytesMessage.readBytes(bytes);
try {
	buffer.append(new String(bytes, "UTF-8"));
} catch (UnsupportedEncodingException e) {
	throw new RuntimeException(e);
}

y reconstruyó JMeter.

Todo lo que queda es agregar un par de Samplers JSR223. El primero es antes del par Editor/Suscriptor para crear un archivo DAT que contiene bytes aleatorios:

import org.apache.commons.lang3.RandomUtils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

vars.put("PATH_TO_BYTES", "C:temprandomBytes.dat");
File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
byte[] arr = RandomUtils.nextBytes((int)(Math.random()*10000));
        try {
            FileOutputStream fos = new FileOutputStream(RESULT_FILE);
            fos.write(arr);
            fos.close();
        } catch (IOException e) {
            System.out.println("file not found");
        }

El segundo: al final del script, elimina el archivo:

import java.io.File;

File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
RESULT_FILE.delete();

Y no olvide agregar la ruta al archivo en Publisher:

Colas y JMeter: compartir con el editor y el suscriptor

Y también verifique la Aserción JSR223 para el suscriptor: compare los bytes de origen con los que llegan a la cola del destinatario:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

Path path = Paths.get(vars.get("PATH_TO_BYTES"), new String[0]);
byte[] originalArray = Files.readAllBytes(path);
byte[] changedArray = ctx.getPreviousResult().getResponseData();
System.out.println(changedArray.length);

if (Arrays.equals(originalArray, changedArray))
	{
     	SampleResult.setResponseMessage("OK");

	} else {
	   SampleResult.setSuccessful(false);
     	   SampleResult.setResponseMessage("Comparison failed");
	   SampleResult.setResponseData("Bytes have changed","UTF-8");
     	   IsSuccess=false;
	}

Conclusión

Describí cuatro formas de enviar mensajes a colas, que uso todos los días en la práctica. Espero que esta información te haga la vida más fácil. A continuación, planeo hablar sobre mi experiencia al probar un intercambio donde hay una cola en un extremo y una base de datos o sistema de archivos en el otro.

Ahorra tiempo. Y gracias por su atención.

Colas y JMeter: compartir con el editor y el suscriptor

Fuente: habr.com

Añadir un comentario