Apache JMeter でのセッション/Cookie 管理
-
21-09-2019 - |
質問
アプリケーションには簡単なパフォーマンス テスト フローがあります。
- ログインします
- いくつかの条件に基づいて検索する
- 異なるパラメータに対して検索を繰り返します。
Jmeter を使用してパフォーマンス テストを行っています。これをスケーラブルな方法でテストするには、複数のスレッドを実行する必要があります。
現在、これを整理する方法は次のとおりです。
-Test Plan
- Thread Group
- Cookie Manager
- Login To application
- Search on param 1
- Search on param 2
- results summary table
- Summary report
したがって、基本的には、要約リターン テーブルとレポートがプラン レベルで存在し、Cookie マネージャーがスレッド グループ レベルで存在します。
1 つのスレッドに対して実行すると、問題なく実行され、正常に完了します。複数のスレッドにスケールすると、次のスレッドが開始されるとすぐに、最後のスレッドのセッションが無効になります。これにより、新しく生成されたスレッドが原因で、すでに実行中のすべてのスレッドに障害が発生します。
私は観察してこの結果に到達しました。
1.複数のスレッドを実行すると、結果概要ツリーに有効な応答が得られるのは最後のスレッドだけです
2.立ち上がり期間を 10 秒として 2 つのスレッドを実行すると、つまり各スレッドが終了するまでの時間が得られ、両方とも正常に実行されます。
私の理解によると、各スレッドはアプリケーションにログインし、Cookieマネージャーはスレッドレベルにあるため、値は各スレッドのセッションIDにそれぞれ維持されますか?しかし、スレッド間でセッション ID 値がオーバーライドされる原因は何でしょうか?
ご協力をよろしくお願いいたします。
解決
JMeterのドキュメントからコピーされます:
最後の要素はHTTPクッキーです マネージャー。 Aクッキーマネージャはする必要があります そうでない場合 - すべてのWebテストに追加 JMeterはクッキーを無視します。 を追加することにより、 そのスレッドグループレベルでは、我々 すべてのHTTPの意志を要求していることを確認 同じクッキーを共有しています。の
の "4.2.2ロジックコントローラ" の章から http://jmeter.apache.org/ usermanual / test_plan.htmlするます。
編集:私はあなたが HTTPを使用する必要がありますね:// jmeter.apache.org/usermanual/component_reference.html#Simple_Controllerは、クッキーマネージャを使用して要求をグループにします。
他のヒント
私はアンドレイの答えは助けることができないと思います。彼は、各要求は、同じクッキーを使用することを引用するが、マニュアルのJMeterに従ってます:
各JMeterのスレッドは、独自の "クッキーの記憶領域を" 持っています。
私の知る限りは質問を理解して、あなたはそれぞれのスレッドが同じセッションIDのクッキーを共有したいです。だから、あなたが2つのスレッド・グループを持っており、連続してそれらを実行する必要があるように思えます。 (実行一度だけその単一のスレッドで)最初のスレッドグループは、グローバルパラメータ(おそらくあなたはJMeterののスクリプト機能を使用する必要があります)へのセッションCookieの値をログインして保存してください。 その後、設定、第2スレッドグループのクッキーマネージャでクッキー。
希望に役立ちます。
時間までランプを高めるようにしてください。私はタイムアップランプは、私がスレッドごとに3秒に増加し、それが罰金を走った後、1秒程度であった同じ問題に遭遇しました。
これを試してみてください
オープンuser.propertiesはJMeterののbinフォルダに存在します。
編集これと次の行を追加します:
CookieManager.check.cookies=false
それスクリプトを保存して実行します。私はそれはあなたの問題を解決することを願っています。
最初ににあなたのコードを変更します:
jmeter.properties
CookieManager.save.cookies=true
CookieManager.name.prefix=mycookie_
次に、あなたのJavaのサンプラーと同じスレッドグループ内のHTTPクッキーマネージャを追加します。
次に、あなたのJavaのサンプラーの追加でます:
JMeterVariables jmv = JMeterContextService.getContext().getVariables();
Iterator<Map.Entry<String,Object>> it = jmv.getIterator();
while(it.hasNext()){
Map.Entry<String,Object> v = it.next();
System.out.println("name: " + v.getKey() + " value: " + v.getValue());
}