使用Gatling進行性能測試(四)模擬設置(Simulation Setup)

引言

Gatling的實際行爲就是模擬用戶操作被測系統,那麼如何控制用戶訪問系統的方式、行爲,就是simulation所做的事情。被測系統一般分爲兩種模式,開放模式和關閉模式,本文將介紹如何根據系統模式設置。也可以在simulation進行一些全局判斷,也就是assertion所做的事情。

Open System

open system是指你可以控制用戶訪問系統的速度,而當前在系統的用戶隨時間的不同而不同。控制用戶達到/訪問系統的速度的方法有:

  1. nothingFor(duration): 給定時間內無用戶訪問。
  2. atOnceUsers(nbUsers): 多用戶同一時刻訪問系統。
  3. rampUsers(nbUsers) during(duration): 在給定時間內用戶訪問量線性上升;
  4. constantUsersPerSec(rate) during(duration):在給定時間內,以恆定速率(每秒用戶數)增加用戶,增加用戶的時間間隔恆定;
  5. constantUsersPerSec(rate) during(duration) randomized: 在給定時間內,以恆定速率(每秒用戶數)增加用戶,增加用戶的時間間隔隨機;
  6. rampUsersPerSec(rate1) to (rate2) during(duration): 在給定時間內,用戶注入速率(每秒用戶數)從rate1上升到rate2,增加用戶的時間間隔恆定;
  7. rampUsersPerSec(rate1) to(rate2) during(duration) randomized: 在給定時間內,用戶注入速率(每秒用戶數)從rate1上升到rate2,增加用戶的時間間隔隨機。

在我們的場景裏,可以試一下constantUsersPerSec(rate) during(duration):

setUp(scn.inject(constantUsersPerSec(2)during(10))).protocols(httpProtocol)

即在10s內以2個/s的速率勻速增加用戶訪問量,運行之後,可以看到報告圖如下:
在這裏插入圖片描述

Closed System

closed system是指你可以控制正在訪問被測系統的用戶數量。控制當前用戶數的方法有:

  1. constantConcurrentUsers(nbUsers) during(duration): 在給定時間內,系統中的併發用戶數恆定;
  2. rampConcurrentUsers(fromNbUsers) to(toNbUsers) during(duration): 在給定時間內,系統內的併發用戶數從數字1增加到數字2。

我們可以試一下constantConcurrentUsers(nbUsers) during(duration):

setUp(scn.inject(constantConcurrentUsers(10)during(20))).protocols(httpProtocol)

報告結果如下圖:
在這裏插入圖片描述

Assertion

在simulation setup裏面還可以對整個測試的行爲做一下判斷,比如響應時間、請求成功率等,通過assertion來實現。assertion的寫法主要分爲以下四個步驟:

  1. 確定判斷的範圍,可以是:
    (1)global:針對所有請求的所有統計信息;
    (2)forAll: 針對每一個請求的所有統計信息;
    (3)details(path):針對一個/一組請求的,path表示請求名或一組請求裏的某一個請求名,需指定路徑,用“/”分隔。
  2. 選擇統計指標,可以是:
    (1)responseTime: 響應時間;
    (2)allRequests: 請求數量;
    (3)failedRequests:失敗請求數;
    (4)successfulRequests: 成功請求數;
    (5)requestsPerSec: 每秒請求速率。
  3. 選擇度量
    (1)min: 最小值;
    (2)max: 最大值;
    (3)mean: 平均值;
    (4)stdDev: 標準偏差;
    (5)percentile1、percentile2、percentile3、percentile4:在第1/2/3/4個百分位上斷言,這裏的第幾個百分位在gatling.config文件裏有配置;在這裏插入圖片描述
    (6)percentile(value: Double): 自己指定在某一百分比時斷言;
    (7)percent:請求成功/失敗的百分比;
    (8)count:請求成功/失敗/其他的數量。
  4. 定義判斷條件,方法有:
    (1)lt(threshold): 判斷選擇的指標的值小於threshold;
    (2)lte(threshold): 判斷選擇的指標的值小於等於threshold;
    (3)gt(threshold): 判斷選擇的指標的值大於等於threshold;
    (4)gte(threshold): 判斷選擇的指標的值大於等於threshold;
    (5)between(thresholdMin, thresholdMax): 判斷選擇的指標值在thresholdMin和thresholdMax之間;
    (6)between(thresholdMin, thresholdMax, inclusive = false): 與5一樣,但不包含邊界
    (7)is(value): 判斷選擇的指標的值等於給定的值;
    (8)in(sequence): 判斷選擇的指標的值是順序排列的。

基於以上四個步驟,我們將其連起來,寫幾個判斷:

  1. 所有的請求的最大響應時間小於120s
  2. 每一個請求的失敗率小於5%
setUp(scn.inject(constantConcurrentUsers(10) during (20))).protocols(httpProtocol)
    .assertions(global.responseTime.max.lt(120))
    .assertions(forAll.failedRequests.percent.lte(5))

以上就是simulation的配置,具體可參考源碼:https://github.com/qycai/computerDatabase.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章