次のhttpリクエストサンプラーを使用したJMeterテスト計画があります。
- ログイン
- ログインユーザーが必要な機能を呼び出す
- ログアウト
5 つの並列スレッドでテスト計画を実行すると、一部のスレッドでサンプラー 1 を呼び出す前にサンプラー 2 が呼び出され、応答アサーションが失敗することがわかります。
実行するサンプラーのシーケンスを指定する方法はありますか?
次のhttpリクエストサンプラーを使用したJMeterテスト計画があります。
5 つの並列スレッドでテスト計画を実行すると、一部のスレッドでサンプラー 1 を呼び出す前にサンプラー 2 が呼び出され、応答アサーションが失敗することがわかります。
実行するサンプラーのシーケンスを指定する方法はありますか?
これにより、それらが順次実行されるようになります。
それでは、スレッドグループから始めましょう。
スレッド数 (ユーザー) は 5 です。
したがって、ログインサンプラーのロジックがうまく機能していると仮定します。それに追加のサンプラーを追加するだけです。そのサンプルを右クリックしてAdd > Post Processors > BSF PostProcessor
、このポスト プロセッサの大きなスクリプト スペース内に書き込み${__setProperty(ThreadValue,${__threadNum},)}
ます。
これにより、スレッド番号が というプロパティに保存されますThreadValue
。beanshell
ドロップダウン リストで言語を選択してください。
次に、ログイン サンプラーの後に if コントローラーを追加します。これを条件フィールドに追加します(${JMeterThread.last_sample_ok}==true) && (${__property(ThreadValue,,)} == ${__threadNum})
これが意味することは、->実際のログインが成功し、ログインスレッドが現在のスレッドと一致する場合にのみ、ログインしたものだけを実行することです.
これで、if コントローラー内でのみログイン処理を行うことができます。正しいユーザーをログアウトしたことを確認したい場合は、 if controller を追加してください。
乾杯
考慮する必要があるのは、各スレッドが実際のユーザーのように個別のエンティティであり、独自のセッションがあることですが、JMeter はこれらのスレッドを非同期で実行するように設計されていることです。並行して。View Results Tree リスナーは、論理スレッドの順序に関係なく、発生したすべてのスレッドからのすべてのアクティビティを表示します。1 つのスレッドで 5 回の反復を行いたい場合は、単純にスレッド数を 1 に変更し、5 回のループを使用すると、シーケンスが保持されます (ただし、これは JMeter などの負荷テスト ツールを使用するポイントを無効にします!)。
スレッド カウントを 1 に変更すると、結果ツリーで実際の論理的な実行シーケンスを確認できます。これにより、実行されている各サンプラーが順番にトップダウンで表示されます。
さて、あなたの場合、物事が順不同で実行されているためではなく、サーバーがリクエスト間のセッションコンテキストを失っているために問題があると思われます。これは非常に一般的であり、多くの場合、HTTP Cookie Managerを使用するか、Regular Expression Extractorを使用して問題に対処できます。