2

私はこのようなウェブリクエストを持っています

    Loop Controller(3)
      moreSamples=true
      startIndex=0
      While Controller(${__javaScript(${moreSamples}==true)})
       SOAP/XML-RPC Request(index=${startIndex})
       Regular Expression Extractor(startIndex=newIndex,moreSamples=samples)

今の問題は、ループで moreSamples と startIndex を初期化できないことです。私は2つのオプションを試しました:

  1. ユーザー定義変数として moreSamples と startIndex を作成します。これで、Regular Expression Extractor を使用して値を変更できますが、次のように BeanShell PostProcessor を使用して外側のループで値を再初期化することはできません。

    vars.put("moreSamples","false")
    vars.put("startIndex","0")
    
  2. while ループのプリプロセッサで moreSamples と startIndex をユーザー パラメータとして作成しますが、正規表現エクストラクタを使用して値を割り当てることができません。

間違いや、適合する新しい構造を提案してください。

スクリーンショット:

ここに画像の説明を入力

4

3 に答える 3

4

@bpsingh、

次のことができますか。

  1. テスト計画の上に UserDefinedVariables を追加し、2 つの変数を定義します: moreSamples、startIndex (@ant が既に提案したように)

  2. Download - PersistentSyncScope Sampler の下には、いくつかの値を抽出し、上記の 2 つの変数に配置する正規表現エクストラクタが 2 つあります。Download - PersistentSyncScope Sampler の下に BeanShellPostProcessor を追加します。

  3. BeanShellPostProcessor に次のコードを追加します。

vars.put("moreSamples","${REGEX_EXTRACT1}");
vars.put("startIndex","${REGEX_EXTRACT2}");

これら 2 つ (moreSamples、startIndex) はグローバル変数であり、それらの変更はループの外側で表示される必要があります。

于 2012-07-09T20:25:20.460 に答える
1

ループからそれらを初期化する必要がありますか?それらを追加してみUser Defined Variablesませんか?

ここに画像の説明を入力してください

または、ループからも実行できます。これが機能しない理由は;、式の後にセミコロンを付けるのを忘れたためです。

vars.put("moreSamples","false"); // ; <- was missing
vars.put("startIndex","0"); // ; <- was missing

私は使用BSF Samplerしましたが、うまくいきました(これを使用する場合は、言語-> Beanshellを選択することを忘れないでください)。これが私のデバッグサンプラー(関連部分)です:

START.HMS=101818
START.MS=1341821898080
START.YMD=20120709
TESTSTART.MS=1341822195274
moreSamples=false
startIndex=0

アップデート:

BSF Samplerとユーザー定義変数の両方を使用する必要はありません。どちらも使用できますが、ユーザー定義変数がもっとあるので、その必要はありません。テストの開始時にそれらの1つを持っています。私はあなたの問題が何であるか、そしてあなたが何を達成しようとしているのかまだはっきりしていません。

于 2012-07-09T08:17:56.087 に答える
0

ここで実際に問題になるのは、2 つのループを使用していて、すべての回答でこれが適切に考慮されていないことです。

プリ/ポスト プロセッサはループではなくサンプラーにのみ適用されるため、whileループの前に変数を再初期化する方法はありません。したがって、プリプロセッサに初期化ステートメントを追加すると、ループが無限に実行され、ポストプロセッサにある場合は実行されません。初期化する唯一の方法は while ループの前に BSF サンプラーを追加することですが、このサンプラーはリスナーによっても記録されるため、レポートが台無しになります。

したがって、私が見つけた唯一の解決策は、Download - PersistentSyncScope Samplerを1回実行し、次のスクリプトでBSFプリプロセッサを追加することです

vars.put("moreSamples","false");
vars.put("startIndex","0");

while ループを追加し、Download - PersistentSyncScope Sampler をその子として追加します。

それが今までの唯一の解決策です。問題を理解するのを手伝ってくれてありがとう。

于 2012-07-10T09:36:49.547 に答える