web-dev-qa-db-ja.com

JmeterのCSVファイルからランダムに選択

CSVデータセットの構成要素で読み取っているURLの非常に大きなCSVファイル(8000以上のアイテム)があります。これは、HTTP要求サンプラーのパスを設定し、whileコントローラーで反復します。

各ユーザー(スレッド)がCSV URLリストからランダムなURLを選択することを除いて、これは問題ありません。不要なのは、各スレッドがCSVアイテムを順番に使用することです。

複数のHTTPリクエストサンプラーを備えたランダムオーダーコントローラーでこれを実現できましたが、8000以上のHTTPサンプラーは実際にjmeterを使用できない状態に陥らせました。これが、HTTP Sampler URLをCSVファイルに入れる理由です。ただし、CSVファイルデータでランダムオーダーコントローラーを使用できるようではありません。では、スレッドごとにランダムなCSVデータ項目を選択するにはどうすればよいですか?

16
Andy Arismendi

これを達成する別の方法があります:

  • 別のスレッドグループを作成する
  • あなたが達成したいことに応じて:
    • (ランダム)ループカウントを追加->これは、作業を行うスレッドグループの開始オフセットを設定します
    • ループカウントまたは永久とタイマーを追加し、他のスレッドグループの実行中にループさせます。このスレッドグループは「疑似」ランダムラインを読み取ります

これは実際にはランダムではなく、ファイルは引き続き順番に読み取られますが、作業スレッドはファイル内でジャンプします。それは私のために働いた;-)

9
Ray

Csvデータを読み取るときのランダム選択機能はありません。その理由は、これを行うには最初にファイル全体をメモリに読み込む必要があるためです。これは、負荷テストツール(任意の負荷テストツール)では悪い考えです。

他の商用ツールは、データを自動的に再処理することでこの問題を解決します。 JMeterでは、任意のフィールドを使用してデータをソートするだけで、同じことを手動で行うことができます。姓で並べ替えると、結果は実質的にランダム分布になります。

注意。デフォルトを保証する場合All ThreadsがCSVデータセット構成に設定されている場合、データはJMeterプロセスのスコープ内で一意になります。

3
Oliver Lloyd

他の答えが述べているように、ランダムに行を選択できないのは、ファイル全体をメモリに読み込まなければならないため、非効率的です。

JMeterにその場で処理させるのではなく、テストを開始する前にファイルの順序自体をランダム化するだけではどうでしょうか。

Perlなどのスクリプト言語は、これを簡単に処理します。

 cat unrandom.csv | Perl -MList::Util=shuffle -e 'print shuffle<STDIN>' > random.csv
1
Andre

BlazeMeterプラグインの新しい Random CSV Data Set Config は、ニーズに完全に適合するはずです。

1
David Le Borgne

これがうまくいくかどうかはわかりませんが、とにかく提案します。

URLを100個の異なるCSVファイルに分割しないでください。次に、各スレッドで乱数を生成し、その番号を使用して、__ CSVRead関数を使用して読み取るCSVファイルを識別します。

CSVRead "> http://jmeter.Apache.org/usermanual/functions.html#_CSVRead

__CSVRead関数が毎回ファイルを開くのか、スレッド間で同じファイルハンドルを共有するのかがわからない部分があります。

試してみてください。調査結果を共有してください。

0
Manish Sapariya

非常に簡単な解決策。 CSVファイルで、列B(たとえばB1)の最初のセルに別の列(たとえばB)apply = Rand()関数を追加します。これにより、ランダムな浮動小数点数が作成されます。セル(たとえばB1)の角をドラッグして、対応するすべてのURLに適用します。ソート列B。URLはランダムにソートされます。列Bを削除します。

0
Jai Singh