基本語句:
setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
解釋:
setUp(————表示本用例的壓力設置 scn.inject(————表示對用例中哪個場景進行壓力設置,如果你定義了兩個場景,例如官網例子的val users = scenario("Users")和val admins = scenario("Admins"),那么你需要分別對兩個場景的壓力進行設置 atOnceUsers(1)————核心,具體的壓力設置,下面有各種設置的使用說明 ).protocols(httpConf)————表示要測試的數據定義,就是你在用例開始時定義var httpConf )
Gatling提供了多種壓力設置的方法,如下所示:
setUp( scn.inject( nothingFor(4 seconds), // 1 atOnceUsers(10), // 2 rampUsers(10) over(5 seconds), // 3 constantUsersPerSec(20) during(15 seconds), // 4 constantUsersPerSec(20) during(15 seconds) randomized, // 5 rampUsersPerSec(10) to(20) during(10 minutes), // 6 rampUsersPerSec(10) to(20) during(10 minutes) randomized, // 7 splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds), // 8 splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(atOnceUsers(30)), // 9 heavisideUsers(1000) over(20 seconds) // 10 ).protocols(httpConf) )
下面具體說說每種壓力設置后的實際效果
1、nothingFor(duration): 在指定的時間段(duration)內什么都不干
實例:nothingFor(4 seconds)或者nothingFor(1 minutes),(注,下方每種可以設置時間的地方都可以根據實際需要用seconds或者minutes來限制)
實際效果:真的是什么都不干。。。設置之后一直循環sleep,不知道有啥用,估計用於下方的組合壓力設置的吧
2、atOnceUsers(nbUsers): 一次模擬的用戶數量(nbUsers)。
實例:atOnceUsers(10)
實際效果:運行后即時同時10個數據包,如圖
3、rampUsers(nbUsers) over(duration): 在指定的時間段(duration)內逐漸增加用戶數到指定的數量(nbUsers)。
實例:rampUsers(10) over(5 seconds)
實際效果:運行后從1開始逐漸增加每秒並發,直到發了10個包,如圖,注意圖中時間
4、constantUsersPerSec(rate) during(duration): 以固定的速度模擬用戶,指定每秒模擬的用戶數(rate),指定模擬測試時間長度(duration)。
實例:constantUsersPerSec(10) during(10 seconds)
實際效果:運行后每秒並發為10,直到運行了10秒鍾,如圖,這個用來做穩定性測試不錯
5、constantUsersPerSec(rate) during(duration) randomized: 以固定的速度模擬用戶,指定每秒模擬的用戶數(rate),指定模擬時間段(duration)。用戶數將在隨機被隨機模擬(毫秒級別)。數量太少時和上面的效果差不多
實例:constantUsersPerSec(10) during(10 seconds) randomized
實際效果:運行后每秒並發為10左右,直到運行了10秒鍾
6、rampUsersPerSec(rate1) to (rate2) during(duration): 在指定的時間(duration)內,使每秒模擬的用戶從數量1(rate1)逐漸增加到數量2(rate2),速度勻速。
實例:rampUsersPerSec(10) to(20) during(10 minutes)
實際效果:運行后每秒並發為10,然后勻速增加每秒並發,10分鍾后,並發變為20,然后結束
7、rampUsersPerSec(rate1) to (rate2) during(duration) randomized: 在指定的時間(duration)內,使每秒模擬的用戶從數量1(rate1)增加到數量2(rate2),速度隨機。
實例:rampUsersPerSec(10) to(20) during(10 minutes) randomized
實際效果:運行后每秒並發為10,然后隨機增加並發,10分鍾后,並發變為20,然后測試結束
8、splitUsers(nbUsers) into(injectionStep) separatedBy(duration): 反復執行所定義的模擬步驟(injectionStep),每次暫停指定的時間(duration),直到總數達到指定的數量(nbUsers)
實例:splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds)
實際效果:反復執行rampUsers(10) over(10 seconds),每次執行間隔10秒,發了1000個包后,測試結束
9、splitUsers(nbUsers) into(injectionStep1) separatedBy(injectionStep2):反復依次執行所定義的模擬步驟1(injectionStep1)和模擬步驟2(injectionStep2),直到總數達到指定的數量(nbUsers)左右,因為如果設置不好不一定能到達總數,見下方說明。
實例:splitUsers(100) into(rampUsers(10) over(10 seconds)) separatedBy(atOnceUsers(30))
實際效果:先執行rampUsers(10) over(10 seconds),再執行atOnceUsers(30),反復如此,理論上直到發了100個包后,測試結束,這個例子不行,因為10-30-10-30-10這樣循環后就已經90個包了,如果再執行下一個atOnceUsers(30)就超出了,所以發到90的時候測試結束
10、heavisideUsers(nbUsers) over(duration): 在指定的時間(duration)內使用類似單位階躍函數的方法逐漸增加模擬並發的用戶,直到總數達到指定的數量(nbUsers).簡單說就是每秒並發用戶數遞增。
實例:heavisideUsers(1000) over(20 seconds)
實際效果:在20秒內增加並發數,直到發了1000個包左右,測試結束,至於是不是用了單位階躍函數我就沒有細究了,部分抓包結果如圖