2012-06-22 14 views
7

次のhttpリクエストサンプラーでJMeterテスト計画を立てています。私は5つの並列スレッドでテスト計画を実行すると、私はサンプラー2を呼び出す前に呼び出されていることがわかり、ユーザー jMeterスレッドシーケンス

  • ログインログアウト
  • を必要と

    1. ログイン
    2. コールいくつかの機能サンプラー1は、いくつかのスレッドでは、応答アサーションに失敗します。

      実行するサンプラーのシーケンスを指定する方法はありますか?

    +0

    サンプラー2がサンプラー1よりも先に実行されると思われる理由は何ですか?リクエストは順番に、トップダウンで実行されますが、これは失敗する可能性は低いので、結果をどのように解釈しているかに問題があるかもしれません。 –

    +0

    ビューの結果ツリーでは、5つの並列スレッドで開始すると4回呼び出され、もう1つのページではアサーションに失敗してログアウトボタンが表示されることがわかります。 – rangalo

    +0

    "結果ツリーの表示"はスレッドごとのシーケンスを反映していませんが、信頼できるソースではありません(一部のスレッドは他のスレッドより高速に実行できるため)。 –

    答えて

    10

    これは、彼らが順次実行されていることを確認する必要があります

    enter image description here

    それでは、スレッドグループから始めましょう。スレッドの

    数(ユーザーが)ですから、ロジックがログインサンプラーのためにうまく持っていると仮定5.

    です。サンプラーを追加するだけです。だから、このサンプルのAdd > Post Processors > BSF PostProcessorを右クリックし、このポストプロセッサの大きなスクリプトスペースの中に${__setProperty(ThreadValue,${__threadNum},)}と書いてください。

    これは、ThreadValueというプロパティにスレッド番号を保存します。ドロップダウンリストでbeanshellという言語を選択してください。

    ログインサンプラーの後にifコントローラーを追加します。ことでこれが何を意味するのか条件フィールド(${JMeterThread.last_sample_ok}==true) && (${__property(ThreadValue,,)} == ${__threadNum})

    にこれを追加 - 。実際のログインに成功すると、ログインスレッドがスレッドに一致した場合、あなたが現在いる間だけのものにログインしない>

    をそれはあなたにそれをですあなたのログインはifコントローラの中でのみ行います。あなたが正しいユーザーをログアウトすることを確認したい場合は、コントローラがそれをarroundしている場合は追加してください。あなたが考慮する必要がありますどのような

    乾杯

    +0

    ここでレスポンスコードに基づいてログインが成功したかどうかを確認できますか? – zillani

    2

    は、各スレッドは、実際のユーザーのような独立したエンティティであり、そしてそれが自分のセッションだが、JMeterのはつまり、非同期これらのスレッドを実行するように設計されているいることということです。並行して。ビュー結果ツリーリスナーは、すべてのスレッドからすべてのアクティビティを表示します。これは、論理スレッドの順序に関係なく、になります。むしろスレッドを5回作成してスレッド数を1に変更し、5のループを使用すると、シーケンスが保持されます(ただし、これはJMeterのような負荷テストツールを使用する点を凌駕します)。

    スレッド数を1に変更すると、結果ツリーに実際の論理的な実行順序が表示されます。これにより、実行されている各サンプラーが順に上に表示されます。

    あなたの問題では、状況が順不同で実行されているのではなく、サーバーがリクエスト間でセッションコンテキストを失っているためです。これは非常に一般的であり、HTTP Cookie Managerを使用するか、Regular Expression Extractorを使用して問題に対処することができます。