天天看點

Gatling的進階三

check是Gatling非常重要的一個特性,用來判斷是場景否真的執行成功了

.exec(http("request_1")

      .get("/")

      .headers(headers_1)

      .check(status.is(302)) // 我們期望傳回的status是302,是以check

  )

或者

.check(regex("""<td class="number">ACC${account_id}</td>""").exists)

判斷是否在傳回的response中包含正規表達式所比對的字元串

check還能夠在執行過程中将動态的資料儲存下來,例如:

check(

  regex("""<a href="/excilys-bank-web/private/bank/account/(ACC[0-9]*)/operations.html">""")

  .saveAs("acc1")

)

将比對的資料存放到acc1中,以便在下面的場景中進行使用

當模拟器運作時,每個使用者擁有自己獨立的session。我們可以利用session做點有益的活動:

例如上例中,我們使用的account id,每次都需要從feeder的讀取中獲得,而且必須事前指定,不夠動态。實際上,我們可以從過程中直接獲得:

regex("""<td class="number">ACC(\d+)</td>""")

  .saveAs("account_id")

然後就可以在接下來的scenario中使用${account_id}

你可能需要根據不同的狀态執行不同的場景,這時候就需要條件判斷

.doIf("${username}", "user7") {

    exec(

      http("request_9")

        ...

    )

    .pause(0 milliseconds, 100 milliseconds)

    .exec(

      http("request_10")

}

通過doIf,隻有username是user7的模拟使用者,才會執行下面的操作

還可以使用更進階的scala功能:

.doIf(session => session.getAttribute("username") != "user7") {

  exec

    ...