0

したがって、基本的には、最初の http 要求のヘッダー応答から認証トークンを抽出し、抽出したデータを 2 番目 (およびそれ以降のすべて) の http 要求 Cookie で使用する必要があります。

ここでの問題は、コントローラー全体に Cookie マネージャーを設定し、実際のデータを取得する代わりに、Cookie の変数名「.authToken=${auth}」を取得することです。

その理由は、テストが Cookie マネージャーに到達したときに変数が宣言されていないためだと推測していますが、jmeter は、正規表現抽出プログラムに到達したときに変数を宣言するのに十分スマートであると期待しています。

構造

  • スレッド
    • キャッシュマネージャー
    • Cookie マネージャー (Cookie ポリシー:互換性; 実装:HC3)
    • コントローラ
      • HTTP リクエスト
        • 正規表現エクストラクタ
      • HTTP リクエスト (ここでリクエスト Cookie で抽出した値を使用する必要があります)
      • HTTP リクエスト (ここでは Request Cookie で同じ値を使用する必要があります)
      • HTTP リクエスト (ここでは Request Cookie で同じ値を使用する必要があります)
      • .....

詳細:

すべての http リクエストは実装 HttpClient3.1 で記録されます

非常に特殊なケースで機能するため、変数名、正規表現のようにすべてが正しく構成されていることを確認してください。

正しく動作しているように見えたのは、http リクエスト内に Cookie マネージャーがあり、「メイン」の Cookie マネージャー (コントローラー全体用のもの) を無効にしたときだけでした。その後、正しく抽出されましたが、それはそのような基本的な要件の非常にばかげた回避策であり、抽出された値を使用する必要がある多くの http 要求 (100 以上) もあります。

Jmeter は、正規表現エクストラクタによって宣言される前に変数を使用する必要はありません。ドメインが正しく、抽出された後に初めて使用されることを確認しました。

私が考えた別の回避策は、個別のスレッドを作成し、それらをリンクしてそれらの間で変数を送信し、データが抽出されたら次のスレッドを起動することですが、それは少し極端すぎるようです。

私が試したこと:

  • http リクエストを 2 つの異なるコントローラーに分割し、2 つの異なる Cookie マネージャーを使用する - 一部の値の代わりに「${auth}」を取得する
  • コントローラーの上にユーザー変数を定義してから、「適用先: Jmeter 変数」オプションを使用すると、値の代わりに文字列「${auth}」が再び取得されます。
  • Cookie マネージャーを、抽出に使用される http 要求の後の位置に移動します - 値の代わりに再び「${auth}」
  • 異なる Cookie ポリシーの設定 (すべてではありませんが、少数)
  • jmeter.properties で "CookieManager.save.cookies=true" を設定します (まだ true になっています)

どんな助け/アイデアも大歓迎です。私はこれを約1時間理解しようとしてきましたが、非常に単純なものが欠けているに違いないと思います.

4

1 に答える 1

0

よし、約2時間後にようやく解決した。

この記事のおかげで、必要なことを行うことができました https://capacitas.wordpress.com/2013/06/11/thats-the-way-the-cookie-crumbles-jmeter-style-part-2/

簡単に言うと、beanshell プリプロセッサを使用し、Cookie を手動で追加する必要があります。サイトが停止した場合の beanshell スクリプトは次のとおりです。

import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.Cookie;
CookieManager manager = sampler.getCookieManager();
Cookie cookie = new Cookie("CookieName", vars.get("YourExtractedVariable"), "Domain", "Path", false, 0);
manager.add(cookie);
于 2015-08-14T12:06:39.607 に答える