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
...