Μεταβλητές Pass JMeter μεταξύ ομάδων νημάτων

Σε αυτό το σεμινάριο JMeter, εξετάζουμε πώς μπορούμε να μοιραστούμε και να μεταβιβάσουμε μεταβλητές μεταξύ ομάδων νημάτων.

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

Ένα καλό παράδειγμα αυτού είναι όταν πρέπει να πιστοποιήσουμε τους χρήστες με τα Διακριτικά Bearer. Μια ομάδα νήματος κάνει τον έλεγχο ταυτότητας και αποθηκεύει το διακριτικό. Μια άλλη ομάδα νήματος πρέπει να έχει πρόσβαση σε αυτό το διακριτικό και να το χρησιμοποιήσει σε άλλο αίτημα.


Επομένως, χρειαζόμαστε έναν μηχανισμό για τη μετάδοση μεταβλητών μεταξύ ομάδων νημάτων.



Περάστε μεταβλητές μεταξύ ομάδων νημάτων στο JMeter

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


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

Έτσι φαίνεται το αίτημά μας για JMeter:

Το αποτέλεσμα του παραπάνω αιτήματος παράγει την ακόλουθη απάντηση σε μορφή JSON:


και το JSONPath μας για εξαγωγή του πρώτου url μοιάζει με:

Η τιμή του ερωτήματος JSONPath αποθηκεύεται ως first_url. Αυτή η μεταβλητή είναι προσβάσιμη μόνο στην ίδια ομάδα νήματος και μπορούμε να πάρουμε την αξία της χρησιμοποιώντας ${first_url}. Τώρα, πώς θα κάνουμε αυτήν τη μεταβλητή προσβάσιμη μέσω άλλων ομάδων νήματος;


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

Για να προσθέσετε ένα BeanShell Assertion, κάντε δεξί κλικ στο Test Plan> Add> Assertion> BeanShell Assertion

Στο BeanShell Assertion, μπορούμε να εισαγάγουμε τον ακόλουθο κωδικό

${__setProperty(first_url, ${first_url})};


Τώρα στην ομάδα νήματος 2, μπορούμε να έχουμε πρόσβαση σε αυτήν τη μεταβλητή απευθείας χρησιμοποιώντας το ${__property(first_url)} όπως φαίνεται παρακάτω:

Ή, μπορούμε να χρησιμοποιήσουμε ένα BeanShell PreProcessor για χειρισμό της μεταβλητής:


Στο BeanShell PreProcessor, μπορούμε να αποκτήσουμε πρόσβαση στη μεταβλητή που μεταβιβάστηκε από μια άλλη ομάδα νήματος, χρησιμοποιώντας props.get('name_of_variable'). Μπορούμε στη συνέχεια να εκτελέσουμε κάποιο χειρισμό String και να αποθηκεύσουμε το αποτέλεσμα ως νέα μεταβλητή.

Στο παραπάνω παράδειγμα, καταργούμε το http:// από τη μεταβλητή που πέρασε από το Thread Group 1 και αποθηκεύουμε το αποτέλεσμα ως μεταβλητή host.

Η μεταβλητή host είναι πλέον τοπικό στο Thread Group 2 και απευθείας πρόσβαση σε αυτό χρησιμοποιώντας ${host} όπως φαίνεται παρακάτω: