Ich habe mehrere JMeter-Testpläne, die in verschiedenen Umgebungen ausgeführt werden sollen, z. B. Dev, Test, UAT, Live. In jedem Testplan möchte ich eine einfache Möglichkeit haben, anzugeben, welche Umgebung verwendet werden soll. Jede Umgebung hat viele Konfigurationsmöglichkeiten wie Hostname, Port, SSL-Zertifikat, Benutzername, Passwort, Kontonummern und andere Testdaten.
Eine Sache, die ich erreichen möchte, ist die einfache Umschaltung von Umgebungen während der Verwendung von JMeter GUI oder das Ausführen von Szenarien aus Build-Skripten.
Eine meiner Ideen ist, den "Include Controller" zu verwenden, um eine andere jmx-Datei mit einer Liste von benutzerdefinierten Variablen und anderen Konfigurationselementen aufzunehmen. JMeter unterstützt jedoch keine Variablen im eingeschlossenen Dateinamen, daher kann ich das Szenario nicht anhand eines Umgebungsnamens parametrisieren. Include Controller unterstützt den JMeter-Parameter "includecontroller.prefix", ist jedoch nicht sehr flexibel, z. Ich kann es nicht von JMeter GUI ändern, ich sollte JMeter Konfigurationsdateien ändern und neu starten.
Ich habe versucht, Switch Controller zu verwenden, aber kein Glück, es schaltet keine Konfigurationselemente, nur Sampler.
Was ist die beste Vorgehensweise, um eine umgebungsspezifische Konfiguration aus Testszenarien zu externalisieren und sie zwischen verschiedenen Szenarien zu teilen?
Ich würde vorschlagen, alle umgebungsspezifischen Variablen oder Werte durch JMeter-Eigenschaften zu ersetzen. Siehe folgende Funktionen als Referenz:
Sie können zum Beispiel eine Eigenschaft namens hostname
entweder in der Datei jmeter.properties oder als JMeter-Befehlszeilenargument wie folgt definieren
und verweisen Sie in Ihrem Skript als:
${__P(hostname,)}
Weitere Informationen finden Sie im Apache JMeter-Handbuch zur Anpassung von Eigenschaften .
Wie der Manish Sapariya erwähnt wurde, Parametrisierter Controller ist sehr nützlich, um die Konfiguration für mehr als eine Umgebung vorzubereiten. Ich habe es an dem vorherigen Platz benutzt, an dem ich gearbeitet habe, und habe die Konfiguration jetzt an einem neuen Ort begonnen. Es ist ein bisschen Arbeit am Anfang, aber später ist es einfach in der Wartung. Es gibt ein bisschen Tutorial in dem oben angegebenen Link, aber es wird nicht berücksichtigt, dass Sie nur ein Env gleichzeitig ausführen möchten. Ich werde es unten etwas beschreiben, vielleicht wird es nützlich sein. Also, langsam Schritt für Schritt:
Das Wichtigste ist, dass ich sie in diesem Moment durch Präfixe in Variablennamen getrennt habe, also in einem UDV-Element Variablen wie dev.serverIP, dev.serverPort, preprod.serverIP und so weiter (zweiter Screenshot), die mit Werten gefüllt sind, die für diese Umgebung relevant sind. Außerdem habe ich in einer dieser UDVs die Variable environmentType (siehe oben) mit dem Standardwert 'dev' (die Sie hier manuell ändern oder einen anderen Wert beim Start über die Befehlszeile / CI oder was auch immer angeben können)
Jetzt im Env Profiler habe ich If Controller (Nr. 4 auf dem ersten Screenshot). Für dev env habe ich (Nr. 5 auf dem ersten Bildschirm):
"$ {environmentType}" == "dev"
Für jedes env (falls Controller) müssen Sie eine entsprechende Bedingung wie oben angeben.
Und das ist es ziemlich genau. Jetzt beibehalten:
Ich weiß, es ist eine Menge zu tun, wenn Sie anfangen, aber es ist später nicht so schlimm, wenn Sie nur ein paar Sachen hinzufügen - wahrscheinlich der einfachste Weg, es trotzdem zu tun.
Als aktuelle Lösung verwende ich den JSR223-Sampler mit benutzerdefiniertem JavaScript-Code, um Variablen aus externen Eigenschaften-Dateien einzurichten. So ähnlich:
%Vor% Jetzt muss ich nur diesen Code als ersten Sampler in einem Testplan hinzufügen und den Umgebungsspezifischen Pfad als Sampler-Parameter args[0]
übergeben. Er lädt Variablen aus der Datei und legt sie als JMeter-Variablen ab.
Ich habe mich selbst nicht benutzt, aber dieses jmeter-pluing kann Ihnen helfen. Hier ist ein Auszug aus der Dokumentation
%Vor%Ich habe das gleiche Problem. Mein derzeitiger Ansatz besteht darin, mehrere anwenderdefinierte variable (UDV) -Elemente zu haben, z. B. DevVariables, TestVariables usw. Für jede dieser Variablen sind dieselben Variablen definiert (Hostname, Port usw.). Dann deaktiviere ich manuell die UDV-Elemente, die nicht verwendet werden.
Bearbeiten:
Das JMeter-Benutzerhandbuch gibt an - "Mit dem Element Benutzerdefinierte Variablen können Sie eine erste Gruppe von Variablen definieren, genau wie im Testplan. Beachten Sie, dass alle UDV-Elemente in einem Testplan - egal wo sie sind - am Anfang verarbeitet werden." Ich bin mir nicht sicher, welches Ereignis den "Start" darstellt, aber es klingt so, als ob man UDVs nicht bedingungslos hinzufügen kann, zumindest nicht über Controller.
Sie können möglicherweise einen einzelnen UDV pro Testplan erstellen, in dem Sie die verschiedenen Variablen (Host usw.) festlegen. Vielleicht können Sie den Wert jeder Variablen mit einer hässlichen JavaScript-Funktion festlegen, die von einem übergebenen Eigenschaftswert abhebt.
Sie können versuchen, die Frage in der Apache JMeter-Benutzer-Mailingliste zu stellen. Es muss eine Möglichkeit geben, das zu tun, was du willst.