web-dev-qa-db-ja.com

Apache JMeterでのセッション/ Cookie管理

アプリケーションに簡単なパフォーマンステストフローがあります。

  1. ログインします
  2. いくつかの基準に基づいた検索
  3. 異なるパラメーターの検索を繰り返します。

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 Managerはスレッドレベルにあるため、各スレッドのセッションIDの値はそれぞれ維持されますか?しかし、スレッド間のセッションID値のオーバーライドの原因は何ですか?

どんな助けも大歓迎です。

50
Priyank

Jmeterドキュメントからコピー:

最後の要素はHTTP Cookie Managerです。すべてのWebテストにCookie Managerを追加する必要があります-それ以外の場合、JMeterはCookieを無視します。 スレッドグループレベルで追加することにより、すべてのHTTPリクエストが同じCookieを共有するようにします。

http://jmeter.Apache.org/usermanual/test_plan.html の「4.2.2 Logic Controllers」の章から。

[〜#〜] edit [〜#〜]http://jmeter.Apache.org/usermanualを使用する必要があると思います/component_reference.html#Simple_Controller Cookie Managerを使用してリクエストをグループ化します。

46

アンドレイの答えは役に立たないと思います。彼は、jmeterのマニュアルに従って、各リクエストは同じCookieを使用すると引用しています。

各JMeterスレッドには、独自の「Cookieストレージ領域」があります。

質問を理解している限り、各スレッドで同じセッションID Cookieを共有する必要があります。したがって、2つのスレッドグループを用意し、それらを連続して実行する必要があるように思えます。最初のスレッドグループ(1回だけ実行される単一スレッド)は、ログインしてセッションCookie値をグローバルパラメーターに保存する必要があります(おそらく、jmeterのスクリプト機能を使用する必要があります)。次に、そのCookieを2番目のスレッドグループのCookieマネージャーに設定します。

お役に立てば幸いです。

6
akostadinov

ランプアップ時間を増やしてみてください。ランプアップ時間が約1秒だった同じ問題に遭遇した後、スレッドごとに3秒に増やしたところ、問題なく実行されました。

1
Isaac

最初にコードを次のように変更します。

jmeter.properties
CookieManager.save.cookies=true
CookieManager.name.prefix=mycookie_

次に、Javaサンプラーと同じスレッドグループにHTTP Cookieマネージャーを追加します。

次に、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());
}
0
user2522062

これを試して:

JMeterのbinフォルダーにあるuser.propertiesを開きます

それを編集して、次の行を追加します。

CookieManager.check.cookies=false

保存して、スクリプトを実行します。それがあなたの問題を解決することを願っています。

0
Jigish Chawda