2012-06-29 17 views
11

Ich habe eine benutzerdefinierte Jmeter Sampler in Java geschrieben, die Datei Speicherort und Dateipfad als Parameter und basierend auf denen erstellt eine JSON-Datei für die Entsendung zu einem Dienst (basierend auf einer Vorlagendatei) . Da mein Skript in mehreren Umgebungen mit unterschiedlichen Verzeichnisstrukturen ausgeführt werden muss, muss ich einen relativen Pfad in meinem Sampler verwenden, um auf die Datei zu verweisen, die ich in gültiges JSON übersetzen muss. Gibt es eine Möglichkeit, das Verzeichnis, in dem mein Skript lebt, als Variable in jmeter zu erhalten? Ich habe $ {user.dir} ausprobiert, aber das gibt das Verzeichnis zurück, in dem jmeter gestartet wurde, nicht das Verzeichnis, in dem mein Skript läuft. Gibt es eine andere Systemeigenschaft, auf die ich verweisen könnte, um diesen Wert zu erhalten? Wenn nicht, hat jemand das programmatisch erreicht?Wie bekomme ich ein Verzeichnis von jmeter Skript in Jmeter

+0

Haben Sie eine der in http://stackoverflow.com/questions/9179463/access-to-jmeter-script-path aufgelisteten Lösungen ausprobiert? – DComte

Antwort

28

Ich stieß vor einiger Zeit auf eine ähnliche Situation, wo ich eine Signaturdatei als Teil einer POST-Anfrage hochladen musste. Diese Signaturdatei wurde relativ zu der Ordnerstruktur verwendet, in der sich meine JMeter-Skripts befanden.

Verwenden Sie den folgenden BeanShell-Ausdruck (auf den als Eigenschaft auf Systemebene zugegriffen werden kann), um den relativen Pfad von dem Ort aufzulösen, an dem sich Ihre JMeter-Testfälle befinden.

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)} 
  • Sie können diese Eingabe mit dem Namen der Datei, die Sie/POST im senden möchten „Dateien senden Mit dem Request“ Feld, indem Sie einfach den Dateinamen angehängt wird.

    ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}fileName.sig

  • Eine sauberere Implementierung würde dies als eine Variable (lokal oder global je nach Umfang) und verwendet diese Variable in den entsprechenden Feldern werden erklären.

    absolutePath = ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}

    ${absolutePath}fileName.sig

HINWEIS: Dieser Ansatz ist super nützlich, wenn Sie Ihre JMeter Testdateien in ein Continuous Integration System wie Jenkins stopfen. Es macht Ihre Testfälle wartungsfreundlicher.

+0

Ermittelt den Pfad der Datei über die angegebene Syntax (Beispiel: C: \ Users \ test.xlsx) und speichert sie in der Variablen. Aber wenn ich die gleiche Variable in Java I/O-Klassen-Dateien (FileInputStream) verwendet, um den Inhalt zu lesen, bekomme ich Fehler. Als ich debuggte, fand ich den umgekehrten Schrägstrich. Konnte die Variable nicht an die FileInputStream-Klasse übergeben. Gibt es eine Möglichkeit, das Dateitrennzeichen in Schrägstrich zu ändern? – Manigandan

+1

str = str.replace ("\\", "/"); ? – stuxnetting

+0

Es funktioniert nicht. – Manigandan