Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Bonjour Habr! C'est une suite du mien publication précédente, dans lequel je parlerai des options permettant de placer des messages dans les files d'attente à l'aide de JMeter.

Nous réalisons un bus de données pour une grande entreprise fédérale. Divers formats de requêtes, transformations, routage complexe. Pour les tests, vous devez envoyer de nombreux messages dans la file d'attente. La douleur manuelle est une douleur que tous les chiropracteurs ne peuvent pas gérer.

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

introduction

Même si j'ai dû supporter cette douleur au début. Tout a commencé avec RFHUtil. Puissant, mais maladroit et effrayant : Eh bien, vous connaissez Rus.

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Indispensable dans certains cas, mais en baisse constante en cas d'utilisation active.
Des tests pratiques sont impossibles avec cela.

Avec JMeter, tout est devenu plus simple. Après la première étape de maîtrise et d’adaptation, l’espoir a commencé à poindre pour des tests heureux.

J'utilise activement les échantillonneurs JMS Publisher et JMS Subscriber. Contrairement à JMS Point-to-Point, cette paire semblait plus pratique à utiliser. Par exemple, avec Subscriber dans JMS Selector, vous pouvez spécifier une variable, mais avec Point-to-Point, vous ne pouvez pas (ou cette méthode n'est pas très évidente).

Préparation des échantillonneurs

Éditeur JMS

  • Configuration - Chaque échantillon. Apache recommande utilisez cette option si les files d'attente/sujets sont spécifiés via des variables.
  • Expiration (ms) = 120000. En cas d'échec, les demandes de tests disparaîtront de la file d'attente au bout de 2 minutes.
  • Utiliser le mode de livraison non persistant ? - vrai. IBM prétentionsce mode persistant garantit une conservation fiable des messages transmis en cas de panne soudaine. Et un échange plus rapide en mode non persistant. À des fins de test, la vitesse est plus importante.

Dans chaque éditeur, je définis une propriété jms que l'abonné utilisera dans le sélecteur JMS. Pour chaque soumission, une valeur aléatoire est générée dans l'élément du plan de test Paramètres utilisateur :

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

De cette façon, vous pouvez être sûr que le message correct est lu.

Le dernier « blanc » d’un éditeur JMS préconfiguré :

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Abonné JMS

  • Configuration - Chaque échantillon. Eh bien, vous comprenez.
  • Timeout (ms) = 100000 100. Si la requête n'arrive pas dans la file d'attente après XNUMX secondes d'attente, alors quelque chose s'est mal passé.
  • Arrêter entre les échantillons ? - vrai.

Sélecteur JMS - très pratique chose. Abonné JMS final :

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Comment gérer l'alphabet cyrillique dans les messages transmis. Dans JMeter, par défaut, après relecture, il s'affiche de travers. Pour éviter cela et profiter du grand et du puissant toujours et partout, vous devez :

  1. Ajoutez un argument JVM au « lanceur » de JMeter :
    -Dfile.encoding=UTF-8
  2. Ajoutez le postprocesseur JSR223 à l'abonné avec la ligne groovy :
    prev.setDataEncoding("UTF-8")

Envoyer un texte

L'option la plus paresseuse. Convient pour déboguer des tests fraîchement écrits. Ou pour les cas où vous devez envoyer au moins quelque chose de petit. Sélectionnez une option Source du message - Zone de texte et placez le corps du message dans un bloc de texte :

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Transfert de fichiers

L'option la plus courante. Convient à la plupart des scénarios. Sélectionnez une option Source du message - À partir du fichier et indiquez le chemin d'accès au message dans le champ Fichier - Nom du fichier :

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Transférer un fichier vers un champ de texte

L'option la plus polyvalente. Convient à la plupart des scénarios + peut être utilisé dans JMS point à point où il n'y a pas de deuxième option d'envoi :

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Passer un tableau d'octets

L'option la plus difficile. Convient pour vérifier la transmission infaillible des requêtes jusqu'à l'octet près, sans distorsion, SMS et perturbation. Vous ne pourrez pas le faire dans le JMeter par défaut. ici On m'en a certainement parlé.

J'ai donc dû télécharger code source et modifier code Abonné JMS.

Remplacé dans la méthode extractContent(..) doubler:

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

à:

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);
}

et reconstruit JMeter.

Il ne reste plus qu'à ajouter quelques samplers JSR223. La première se situe avant la paire Éditeur/Abonné pour créer un fichier DAT contenant des octets aléatoires :

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");
        }

La seconde - à la fin du script, supprime le fichier :

import java.io.File;

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

Et n'oubliez pas d'ajouter le chemin du fichier dans Publisher :

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Et également une vérification dans l'assertion JSR223 pour l'abonné - comparez les octets sources avec ceux qui arrivent dans la file d'attente du destinataire :

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;
	}

Conclusion

J'ai décrit quatre façons d'envoyer des messages aux files d'attente, que j'utilise quotidiennement dans la pratique. J'espère que ces informations vous faciliteront la vie. Dans la suite, je prévois de parler de mon expérience de test d'un échange où il y a une file d'attente à une extrémité et une base de données ou un système de fichiers à l'autre.

Économisez votre temps. Et merci pour votre attention.

Files d'attente et JMeter : partage avec l'éditeur et l'abonné

Source: habr.com

Ajouter un commentaire