12

私は、ファイルの場所とファイルのパスをパラメーターとして受け取り、それらに基づいて(テンプレートファイルに基づいて)サービスに投稿するためのjsonファイルを作成するJavaで記述されたカスタムjmeterサンプラーを持っています。スクリプトはさまざまなディレクトリ構造を持つ複数の環境で実行する必要があるため、サンプラーで相対パスを使用して、有効なjsonに変換する必要のあるファイルを指す必要があります。スクリプトが存在するディレクトリをjmeterの変数として取得する方法はありますか?$ {user.dir}を試しましたが、スクリプトが存在するディレクトリではなく、jmeterが起動したディレクトリが返されます。この値を取得するために参照できる別のシステムプロパティはありますか?そうでない場合、誰かがプログラムでこれを達成しましたか?

4

1 に答える 1

35

少し前に、POST 要求の一部として署名ファイルをアップロードしなければならない、同様の状況に遭遇しました。この署名ファイルは、私の JMeter スクリプトが配置されているフォルダー構造に関連して存在していました。

次の BeanShell 式 (システム レベルのプロパティとしてアクセス可能) を使用して、JMeter テスト ケースが配置/実行されている場所からの相対パスを解決してみてください。

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
  • ファイル名を追加するだけで、送信/POSTしたいファイルの名前とともに「リクエストとともにファイルを送信」フィールドにこれを入力できます。

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

  • よりクリーンな実装は、これを変数 (スコープに応じてローカルまたはグローバル) として宣言し、適切なフィールド内でこの変数を使用することです。

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

    ${absolutePath}fileName.sig

注:このアプローチは、JMeter テスト ファイルを Jenkins などの継続的インテグレーション システムにプラグインする場合に非常に役立ちます。テストケースをより保守しやすくします。

于 2013-09-03T10:23:31.687 に答える