Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Γεια σου, Χαμπρ! Αυτή είναι η συνέχεια της δικής μου προηγούμενη δημοσίευση, στο οποίο θα μιλήσω για επιλογές για την τοποθέτηση μηνυμάτων σε ουρές χρησιμοποιώντας το JMeter.

Κατασκευάζουμε ένα δίαυλο δεδομένων για μια μεγάλη ομοσπονδιακή εταιρεία. Διάφορες μορφές αιτημάτων, μετασχηματισμοί, περίπλοκη δρομολόγηση. Για δοκιμή, πρέπει να στείλετε πολλά μηνύματα στην ουρά. Το χειροκίνητο είναι ένας πόνος που δεν μπορεί να χειριστεί κάθε χειροπράκτης.

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Εισαγωγή

Αν και έπρεπε στην αρχή να αντέξω αυτόν τον πόνο. Όλα ξεκίνησαν με το RFHUtil. Ισχυρό, αλλά δύστροπο και τρομακτικό: Λοιπόν, ξέρεις τον Rus.

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Απαραίτητο σε ορισμένες περιπτώσεις, αλλά μειώνεται σταθερά σε περίπτωση ενεργητικής χρήσης.
Η βολική δοκιμή είναι αδύνατη με αυτό.

Με το JMeter όλα έχουν γίνει πιο εύκολα. Μετά το πρώτο στάδιο του mastering και της εξοικείωσης, άρχισε να ξημερώνει η ελπίδα για χαρούμενες δοκιμές.

Χρησιμοποιώ ενεργά τους δειγματολήπτες JMS Publisher και JMS Subscriber. Σε αντίθεση με το JMS Point-to-Point, αυτό το ζεύγος φαινόταν πιο βολικό στη χρήση. Για παράδειγμα, με το Subscriber στο JMS Selector μπορείτε να καθορίσετε μια μεταβλητή, αλλά με το Point-to-Point δεν μπορείτε (ή αυτή η μέθοδος δεν είναι πολύ προφανής).

Προετοιμασία δειγματοληπτών

Εκδότης JMS

  • Ρύθμιση - Κάθε δείγμα. Απάχης συνιστά χρησιμοποιήστε αυτήν την επιλογή εάν οι ουρές/θέματα καθορίζονται μέσω μεταβλητών.
  • Λήξη (ms) = 120000. Σε περίπτωση αποτυχίας, τα αιτήματα δοκιμής θα εξαφανιστούν από την ουρά μετά από 2 λεπτά.
  • Χρήση μη μόνιμης λειτουργίας παράδοσης; - αλήθεια. IBM αξιώσειςΑυτή η επίμονη λειτουργία εξασφαλίζει αξιόπιστη διατήρηση των μεταδιδόμενων μηνυμάτων σε περίπτωση ξαφνικής αποτυχίας. Και ταχύτερη ανταλλαγή σε μη επίμονη λειτουργία. Για λόγους δοκιμής, η ταχύτητα είναι πιο σημαντική.

Σε κάθε Publisher ορίζω μια ιδιότητα jms που θα χρησιμοποιεί ο Συνδρομητής στον Επιλογέα JMS. Για κάθε υποβολή, δημιουργείται μια τυχαία τιμή στο στοιχείο του σχεδίου δοκιμής παραμέτρων χρήστη:

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Με αυτόν τον τρόπο μπορείτε να είστε βέβαιοι ότι έχει διαβαστεί το σωστό μήνυμα.

Το τελικό "κενό" ενός προδιαμορφωμένου JMS Publisher:

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Συνδρομητής JMS

  • Ρύθμιση - Κάθε δείγμα. Λοιπόν, καταλαβαίνεις.
  • Λήξη χρονικού ορίου (ms) = 100000. Εάν το αίτημα δεν φτάσει στην ουρά μετά από 100 δευτερόλεπτα αναμονής, τότε κάτι πήγε στραβά.
  • Διακοπή μεταξύ δειγμάτων; - αλήθεια.

Επιλογέας JMS - αρκετά βολικός πράγμα. Τελικός συνδρομητής JMS:

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Πώς να αντιμετωπίσετε το κυριλλικό αλφάβητο στα μεταδιδόμενα μηνύματα. Στο JMeter, από προεπιλογή, μετά τη διόρθωση, εμφανίζεται στραβά. Για να το αποφύγετε αυτό και να απολαμβάνετε τα μεγάλα και δυνατά πάντα και παντού, πρέπει:

  1. Προσθέστε ένα όρισμα JVM στον "εκκινητήρα" του JMeter:
    -Dfile.encoding=UTF-8
  2. Προσθήκη JSR223 PostProcessor σε συνδρομητή με γραμμή groovy:
    prev.setDataEncoding("UTF-8")

Στείλε μήνυμα

Η πιο νωχελική επιλογή. Κατάλληλο για εντοπισμό σφαλμάτων πρόσφατα γραπτών δοκιμών. Ή για περιπτώσεις που πρέπει να στείλετε τουλάχιστον κάτι μικρό. Επιλέξτε επιλογή Πηγή μηνύματος - Textarea και τοποθετήστε το σώμα του μηνύματος σε ένα μπλοκ κειμένου:

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Μεταφορά αρχείων

Η πιο συνηθισμένη επιλογή. Κατάλληλο για τα περισσότερα σενάρια. Επιλέξτε επιλογή Πηγή μηνύματος - Από αρχείο και υποδείξτε τη διαδρομή προς το μήνυμα στο πεδίο Αρχείο - Όνομα αρχείου:

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Μεταφορά αρχείου σε πεδίο κειμένου

Η πιο ευέλικτη επιλογή. Κατάλληλο για τα περισσότερα σενάρια + μπορεί να χρησιμοποιηθεί στο JMS Point-to-Point όπου δεν υπάρχει δεύτερη επιλογή αποστολής:

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Διαβίβαση πίνακα byte

Η πιο δύσκολη επιλογή. Κατάλληλο για τον έλεγχο της αλάνθαστα ακριβής μετάδοσης των αιτημάτων μέχρι το byte, χωρίς παραμόρφωση, SMS και διαταραχές. Δεν θα μπορείτε να το κάνετε αυτό στο προεπιλεγμένο JMeter. εδώ Μου είπαν σίγουρα για αυτό.

Έπρεπε λοιπόν να κατεβάσω πηγές και τροποποιήστε κώδικας Συνδρομητής JMS.

Αντικαταστάθηκε στη μέθοδο extractContent(..) γραμμή:

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

και ξαναχτίστηκε το JMeter.

Το μόνο που μένει είναι να προσθέσουμε μερικά JSR223 Samplers. Η πρώτη είναι πριν από το ζεύγος Publisher/Subscriber να δημιουργήσετε ένα αρχείο DAT που περιέχει τυχαία byte:

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

Το δεύτερο - στο τέλος του σεναρίου, διαγράφει το αρχείο:

import java.io.File;

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

Και μην ξεχάσετε να προσθέσετε τη διαδρομή στο αρχείο στον Publisher:

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Και επίσης ένας έλεγχος στο JSR223 Assertion for Subscriber - συγκρίνετε τα byte πηγής με αυτά που φτάνουν στην ουρά του παραλήπτη:

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

Συμπέρασμα

Περιέγραψα τέσσερις τρόπους αποστολής μηνυμάτων σε ουρές, τους οποίους χρησιμοποιώ καθημερινά στην πράξη. Ελπίζω αυτές οι πληροφορίες να κάνουν τη ζωή σας πιο εύκολη. Στη συνέχεια, σκοπεύω να μιλήσω για την εμπειρία μου από τη δοκιμή μιας ανταλλαγής όπου υπάρχει μια ουρά στη μια άκρη και μια βάση δεδομένων ή σύστημα αρχείων στην άλλη.

Εξοικονομήστε χρόνο. Και ευχαριστώ για την προσοχή σας.

Ουρές και JMeter: κοινή χρήση με Publisher και Subscriber

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο