毎回ランダムな正の整数を作成し、GatlingのJson bodyに送信する必要があります。
以下のコードを使用して、ランダムな正の整数を作成しました。
val r = new scala.util.Random;
val OrderRef = r.nextInt(Integer.MAX_VALUE);
しかし、ランダムに生成された値をJSONボディにフィードするにはどうすればよいですか?
私は試した:
.exec(http("OrderCreation")
.post("/abc/orders")
.body(StringBody("""{ "orderReference": "${OrderRef}"}""").asJson)
しかし、これはうまくいかないようです。手がかりをお願いします。
ありがとう!
まず、毎回乱数を生成したいので、OrderRef
は次のようなメソッドでなければなりません:
_def orderRef() = Random.nextInt(Integer.MAX_VALUE)
_
サイドコメント:by Scala規約:名前camelCase、()が最後に_;
_なしで新しい値を生成します。
準備されたメソッドを使用するには、Gatling EL stringは使用できません。構文は非常に限定されており、基本的に_"${OrderRef}"
_はGatlingセッションでOrderRef
という名前の変数を検索します。
正しい方法は、式関数を次のように使用することです:
_.exec(
http("OrderCreation")
.post("/abc/orders")
.body(StringBody(session => s"""{ "orderReference": "${orderRef()}" }""")).asJSON
)
_
ここでは、Gatling Session
を取り、String
を本体として返す匿名関数を作成しています。文字列は、標準のScala文字列補間メカニズムを介して構成され、準備された関数orderRef()
の前に使用します。
もちろん、Scala文字列補間を次のように省略できます。
_.body(StringBody(session => "{ \"orderReference\": " + orderRef() +" }" )).asJSON
_
これは、Scalaを使用する場合にはあまり好ましくないスタイルです。
詳細については、Gatlingのドキュメントの Request Body を参照してください。また、 Galting EL構文 の詳細を参照してください。
別の方法は、フィーダーを定義することです:
_// Define an infinite feeder which calculates random numbers
val orderRefs = Iterator.continually(
// Random number will be accessible in session under variable "OrderRef"
Map("OrderRef" -> Random.nextInt(Integer.MAX_VALUE))
)
val scn = scenario("RandomJsonBody")
.feed(orderRefs) // attaching feeder to session
.exec(
http("OrderCreation")
.post("/abc/orders")
// Accessing variable "OrderRef" from session
.body(StringBody("""{ "orderReference": "${OrderRef}" }""")).asJSON
)
_
ここでは状況が異なります。最初にフィーダーを定義し、それをセッションにアタッチしてから、Gatling EL stringを介してリクエスト本文でその値を使用します。これは、各仮想ユーザーのセッションにアタッチされる前に、ガトリングによってフィーダー値がフィーダーから取得されるときに機能します。フィーダーの詳細については こちら をご覧ください。
推奨事項:シナリオが単純な場合は、最初の解決策から始めてください。より複雑になる場合は、フィーダーについて考えてください。
楽しい