Umgebungsspezifische JMeter-Konfiguration

7

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?

    
kan 19.03.2014, 15:04
quelle

5 Antworten

11

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

%Vor%

und verweisen Sie in Ihrem Skript als:

  • %Code% oder
  • ${__P(hostname,)}

Weitere Informationen finden Sie im Apache JMeter-Handbuch zur Anpassung von Eigenschaften .

    
Dmitri T 20.03.2014 12:09
quelle
6

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:

  1. Als Erstes brauchen Sie zwei Thread-Gruppen - eins für Umgebungsprofile (Nr. 1 auf dem ersten Screenshot - Env Profiler) und eins für Ihren Test Fälle , Testpläne usw. (Nr. 2 - API-Anfragen). Letzteres muss deaktiviert werden , da es Container ist, der nicht direkt von hier aus ausgeführt werden soll (rechter Mausklick - & gt; deaktivieren oder Strg + T)
  2. Dann brauchen Sie Ihre Benutzerdefinierte Variablen -Elemente (Nr. 3) - ich verwende drei davon:
    • zuerst zum Definieren, welche Umgebung ausgeführt wird (environmentType var) und Logins / Passwörter, Token etc.
    • Sekunde mit IDs für Elemente, die für Tests benötigt werden
    • Third mit IPs, Ports, Pfadpräfixe und so weiter.

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)

  1. 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.

  1. Jeder IfController enthält den zuvor erwähnten "jp @ gc - Parametrized Controller" (den Sie hier als Teil von herunterladen können ) der Weg). In jedem Param-Controller weisen Sie Variablen zu, die Sie in Testplanvariablen verwenden, die für diese Umgebung spezifisch sind, z. name: serverIP, Wert: $ {dev.serverIP} für dev env (dritter Screenshot)

  1. Und jetzt das letzte - Tests und Pläne, die Sie ausführen möchten.
    • In dieser deaktivierten Thread-Gruppe (API-Anfragen) fügen Sie Einfache Controller hinzu, die Ihre Tests enthalten, oder Include-Controller , die einige Tests aus anderen Dateien importieren.
    • Wenn Sie diese Tests haben, müssen Sie für jeden, den Sie in dieser bestimmten Umgebung ausführen möchten, Modul cotroller innerhalb des parametrisierten Controllers mit Pfad zu diesem Test (Screenshot unten)
    • hinzufügen

Und das ist es ziemlich genau. Jetzt beibehalten:

  • um neue Variable hinzuzufügen, müssen Sie sie in UDV mit Präfixen (dev.newVar, preprod.newVar) hinzufügen und die relevanten Werte füllen, dann fügen Sie den richtigen Eintrag in parametrisierte Controller (diese newVar = $ {dev.newVar}) und das ist es
  • um einen neuen Test aus einem anderen Testplan hinzuzufügen - fügen Sie den Include-Controller mit dem Pfad zu dieser Datei hinzu und fügen Sie den Modul-Controller in jedem parameterisierten Controller hinzu, der sie an den Include-Controller weiterleitet
  • um eine neue Umgebung hinzuzufügen, kopieren Sie einfach die bereits vorhandene, ändern Sie den If-Befehl, den parametrisierten Controller und füllen Sie die Werte in UDVs Das nette Ding hier ist, dass, wenn Sie wollen, sagen wir, dev env mit allen Tests und der andere mit nur ein paar somke Tests können Sie eine Kopie vorbereiten, ändern Wenn Controller einen anderen Wert der env-Variable (wie dev für alle Tests, devsmoke for smoke tests) und fügen Sie einige der Modulsteuerungen in diesem neuen Profil hinzu oder löschen Sie sie. Natürlich können Sie es etwas aufbauen und Sie können verschiedene Threads für verschiedene Teile des Systems für eine einfachere Wartung verwenden, vergessen Sie nicht, diese Threads zu deaktivieren, die als Container arbeiten.

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.

    
Faflok 06.07.2015 14:04
quelle
2

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.

    
kan 26.03.2014 11:25
quelle
1

Ich habe mich selbst nicht benutzt, aber dieses jmeter-pluing kann Ihnen helfen. Hier ist ein Auszug aus der Dokumentation

%Vor%     
Manish Sapariya 20.03.2014 04:32
quelle
0

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.

    
kc2001 21.03.2014 13:01
quelle

Tags und Links