1

私のアプリケーションには2つのシナリオがあります。JmeterのBean Shell Post ProcessorでCSV Dataset Configの変数を使用する方法

  • 1.作成:ここではホテルの部屋を予約します。予約後、アプリケーションはトランザクションIDを返します。
  • 2.キャンセル:予約をキャンセルするには、トランザクションIDをアプリケーションに渡す必要があります。
  • 作成コールが行われた後、生成されたトランザクションIDを使用して、それぞれのcreateのキャンセル呼び出しが自動的に呼び出されるように、jmeterでテストしたいと考えています。

私は2つのスレッドグループを作成しました。 1つは作成用APIを作成し、正規表現エクストラクター& Bean Shell Post Processorを使用してトランザクションIDをCSVファイルに保存します。もう1つのスレッドはキャンセル用です。キャンセルAPIを呼び出すCSVデータセットコンフィグ&を使用してトランザクションIDを選択しています。

問題キャンセルAPIを呼び出した後、CSVファイルからそのトランザクションIDを削除したいのですが。私はBean Shell Post Processorがその仕事をすると思います。

enter image description here

はここに私の豆シェルポストプロセッサのコードです:

File inputFile = new File("/home/demo/LocalFolder/CSV/result.csv"); 
File tempFile = new File("/home/demo/LocalFolder/CSV/myTempFile.csv"); 

BufferedReader reader; 
try { 
    reader = new BufferedReader(new FileReader(inputFile)); 

    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); 

    String lineToRemove = vars.get("transactionId"); 
    //String lineToRemove = "${transactionId}"; 
    String currentLine; 

    while((currentLine = reader.readLine()) != null) { 
     // trim newline when comparing with lineToRemove 
     String trimmedLine = currentLine.trim(); 
     if(trimmedLine.equals(lineToRemove)) continue; 
     writer.write(currentLine + System.getProperty("line.separator")); 
    } 
    writer.close(); 
    reader.close(); 
    boolean successful = tempFile.renameTo(inputFile); 
    System.out.println("Completed"); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

しかし、トランザクションIDがファイルから削除取得されませんこれは私のCSVデータ構成の設定です。 vars.get("transactionId")は何も返されていないか、間違った値を返していないと思います。変換IDをハードコードすると、コードは正常に動作します。誰でも助けてくれますか?

+2

負荷テスト中にファイルを操作するアプローチは、スケーラビリティがありません。ファイルに書き込む理由は何ですか?抽出された値を "メモリ内の"次のスレッドに渡すだけで正常に動作します。なぜこれをファイルに書き込んでからそれを削除する必要があるのか​​詳しく教えてください。 –

+0

あなたはコールを作成した後に順番にコールをキャンセルしたいので、2つのスレッドグループを使用するとシナリオが不必要に複雑になると思います。 1つのグループに入れ、トランザクションIDを変数として保存してください。 本当に2つのスレッドグループを使用したい場合は、@ Kranthi Paidiが正しいです。これはスケーラブルな解決策ではありません(同じファイルを読み書きするために多くのスレッドが待ち行列で待機するため)。 FIFOキュー(本質的にスクリプトで達成しようとしているもの)として機能する「スレッド間通信」プラグインを使用します。 –

答えて

0

JMeterの変数を使用すると、JMeterのプロパティ(props代わりのvars)を使用する必要があるのスレッドグループとの間でデータを渡すために、唯一の現在のスレッドグループにローカルです。詳細な説明と使用例については、Knit One Pearl Two: How to Use Variables in Different Thread Groupsの記事を参照してください。

P.S.代わりにHTTP Simple Table Serverを使用する方が簡単でしょうか?

関連する問題