0

Gatling を使用して API をテストする例を考えてみましょう。いくつかの奇妙な要件のために、各ユーザーのシナリオを取得する必要がありました

var scenarioList // This is of type mutable list

リクエスト本文はユーザーごとに異なる必要があるか、リクエストが処理されないため、このリストには多くのシナリオが追加されています。この個々のシナリオには、現時点で次のガトリング シミュレーションが構成されています。

Ex: scenarioList += scenario1. inject(rampUsers(1) over (1 minutes)
    scenarioList += scenario2. inject(rampUsers(1) over (1 minutes)
    scenarioList += scenario3. inject(rampUsers(1) over (1 minutes)
    .
    .
    .
    so on

これらすべてのシナリオを呼び出しながら、以下のようにグローバル設定で

setUp(scenarioList: _*).assertions(
    forAll.successfulRequests.percent.gte(90)
  )

1000 人のユーザー (scenarioListサイズは 1000) がいるとします。ここでの問題は、1000 人のユーザー全員が同時に開始することですが、これらのユーザーを増やしたいと考えています。したがって、シナリオを並行して実行するのではなく、シナリオを増やしていくことが問題になります。

これは可能ですか?そうでない場合、従うべき他のアプローチはありますか?リクエストの本文が変化するため、複数のユーザーで同じシナリオを実行する余裕はありません。私にお知らせください。

4

1 に答える 1

0

シナリオ内で使用することでこの問題を解決できたfeedersので、複数のシナリオを作成する必要はありません。

ガトリングを使用feedersすると、任意の http 要求の要求本文をパラメーター化するオプションが提供されます。

コード例:

  var randomSession = Iterator.continually(Map("randsession" -> ( req.replace("0000000000", randomStringGenerator.randomString(10)))))

  val httpConf = http
    .baseURL("http://localhost:5000")
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .userAgentHeader("Mozilla/4.0(compatible;IE;GACv10. 0. 0. 1)")

  val scn = scenario("Activate")
    .feed(randomSession)
    .exec(http("activate request")
    .post("/login/activate")
    .body(StringBody("""${randsession}"""))
    .check(status.is(200)))
    .pause(5)

  setUp(
    scn.inject(atOnceUsers(5))
  ).protocols(httpConf)
}
于 2018-05-24T14:39:31.230 に答える