1

私は、ランダムな量のページ (2 から 10 まで) を訪問する JMeter でテスト場所を作成する過程にあり、その URL は CSV データ セットから取得されます。CSV データ セットと正常に動作しているサンプラーを作成しましたが、スレッドごとにデータ セットから読み取られるのは 1 行のみであり、これは必要ではありません。サンプラーが完了した後に新しい行を読み取ってもらいたいのです。 (またはその前に、私は大騒ぎしていません)。

この質問は非常に似ていることがわかりました。解決策は、Raw Data Source Pre-Processor を使用することでした。これは機能しますが、問題のファイルに骨の折れる変更 (各行の前にチャンク サイズを追加する) が必要で、少し面倒です。ファイルの長さが約 500 行の場合。

これを行うために、読み取り時に次の行に進むように CSV データ セットを設定する方法、または beanshell などのポストまたはプリ プロセッサを使用する方法はありますか? 私はCSVReadがこれを行うことができると述べている人を見てきましたが、それはアクセスがスレッドごとであると述べているため、私にとっては良くありません。

補足として-最終的にやりたいのは、HTTPサンプラーに渡されるファイル内のランダムな行にアクセスすることだけです。これを行うためのより簡単またはより良い方法があれば、提案を受け付けています.

4

1 に答える 1

2

BeanShell Sampler / BeanShell PostProcessor / BeanShell PreProcessorから実行されるこの beanshell (= java) コードに使用できる可能性があります。

次のコードは、ファイルからすべての行を読み取り、単一のランダムを選択します。

import java.text.*;
import java.io.*;
import java.util.*;

String [] params = Parameters.split(",");
String csvTest = params[0];
String csvDir = params[0];

ArrayList strList = new ArrayList();     

try {
    File file = new File(System.getProperty("user.dir") + File.separator + csvDir + File.separator + csvTest);

    if (!file.exists()) {
        throw new Exception ("ERROR: file " + csvTest + " not found in " + csvDir + " directory.");
    }

    BufferedReader bufRdr = new BufferedReader(new FileReader(file));
    String line = null;

    while((line = bufRdr.readLine()) != null) {
        strList.add(line);
    }

    bufRdr.close();            

    Random rnd = new java.util.Random();
    vars.put("csvUrl",strList.get(rnd.nextInt(strList.size())));
}
catch (Exception ex) {
    IsSuccess = false; 
    log.error(ex.getMessage());
    System.err.println(ex.getMessage());
}
catch (Throwable thex) {
    System.err.println(thex.getMessage());
}

その後、変数 (この例では ${csvUrl}) を介して、抽出された URL にアクセスできます。

パフォーマンスの観点から、(これをループで実行する必要がある場合) 各反復で完全なファイルを読み取ることが良い解決策であるとは思えません。

于 2012-04-17T17:52:11.583 に答える