Gatling腳本編寫技巧篇(二)

腳本示例:
import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class BaiduSimulation extends Simulation { //讀取配置文件 val conf = ConfigFactory.load() //實例化請求方法 val httpProtocol = http.baseUrl(conf.getString("baseUrl")) //包裝請求接口 val rootEndPointUsers = scenario("信貸重構")      .exec(http("信貸重構-授信申請")            .post("/apply")            .header("Content-Type", "application/json")   .header("Accept-Encoding", "gzip")   .body(RawFileBody("computerdatabase/recordedsimulation/0001_request.json"))            .check(status.is(200)                   .saveAs("myresponse")            )            .check(bodyString.saveAs("Get_bodys")))            .exec{ session => println("這就是傳說的值傳遞"+session("Get_bodys").as[String] )            session                  } } 
配置文件(application.properties): 
#新信貸通用接口 baseUrl = http://172.16.3.179:7800 
腳本編寫:  
Gatling腳本的編寫主要包含三個步驟: 1. http head配置 2. Scenario 執行細節 3. setUp 組裝 
編寫實例:
//配置文件地址src/galting/resource/application.properties //使用的時候 初始化配置文件的讀 val conf = ConfigFactory.load() 
報頭定義:  

 

//設置請求的根路徑 val httpConf = http.baseURL(conf.getString("baseUrl")) 

 

這裏須要知道的是報頭也能夠在seniario中定義(有下列兩種方式去設置Json和xml要求的報頭) java

//http(...).get(...).asJSON等同於: http(...).get(...) .header(HttpHeaderNames.ContentType,HttpHeaderValues.ApplicationJson) .header(HttpHeaderNames.accept,HttpHeaderValues.ApplicationJson) //http(...).get(...).asXML等同於 http(...).get(...) .header(HttpHeaderNames.ContentType,HttpHeaderValues.ApplicationXml) .header(HttpHeaderNames.accept,HttpHeaderValues.ApplicationXml) 
場景定義:  
val rootEndPointUsers = scenario("信貸重構").exec(http("信貸重構-授信申請").post("/apply")) 

 場景的定義要有名稱,緣由是同一個模擬器中能夠 定義多個場景,場景一般被存儲在Scala的變量中 json

場景的基本機構有兩種session

 

 exec :用來描述行動,一般是發送到待測應用的一個請求 pause: 用來模擬連續請求的用戶思考時間 

 

模擬器的定義:
//設置線程數 setUp(rootEndPointUsers.inject(atOnceUsers(10)).protocols(httpConf)) 
模擬器的參數: 
setUp( rootEndPointUsers.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) ) 

 

函數 解釋
nothingFor(4 seconds)  等待一個指定的時間
 atOnceUsers(10) 一次性注入指定數量的用戶
ampUsers(10) over(5 seconds) 在指定的時間內,以線性增加的方式注入指定數量的用戶
constantUsersPerSec(20) during(15 seconds) 在指定的時間內,以固定頻率注入用戶,以每秒的多少用戶的方式。固定時間間隔
constantUsersPerSec(20) during(15 seconds) randomized 在指定時間段內,用固定的頻率注入用戶,以每秒多少個用戶的方式定義。用戶以隨機間隔注
ampUsersPerSec(10) to 20 during(10 minutes) 在指定時間段內,從起始頻率到目標頻率注入用戶,以每秒多少個用戶的方式定義。用戶以固定間隔注入
rampUsersPerSec(10) to 20 during(10 minutes) randomized  在指定時間段內,從起始頻率到目標頻率注入用戶,以每秒多少個用戶的方式定義。用戶以隨機間隔注入 
splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds) 在指定時間內,重複執行定義好的 注入步驟,間隔指定時間,直到達到最大用戶數nbUsers
 splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy atOnceUsers(30) 在指定時間內,重複執行定義好的 第一個注入步驟,間隔定義好的 第二個注入步驟,直到達到最大用戶數nbUsers
設置場景屬性的時候 須要注意如下兩點:
開放的負載: 封閉系統,您能夠控制併發的使用數量 封閉系統是併發用戶數量有上限的系統。在滿負荷運行時,新用戶只能在另外一個用戶退出時纔能有效地進入系統 封閉的負載: 開放系統,您能夠控制用戶的到達率 相反,開放系統沒法控制併發用戶的數量:即便應用程序沒法爲用戶提供服務,用戶也會不斷地到達。大多數網站都是這樣的 
重點注意:  
若是您但願根據每秒請求數而不是併發用戶數進行推理,那麼能夠考慮使用constantUsersPerSec()來設置用戶的到達率,從而設置請求數,而不須要進行節流,由於在大多數狀況下這是多餘的

技巧篇: 

 

 

對於測試中的數據構造 每每是咱們比較痛苦的地方 雖然Gatling中提供了參數生成 可是並不能知足咱們的測試需求 ,憑藉以前對其餘工具的理解 同時Gatling
也是運行在java虛擬機中這兩點 我嘗試了將本身的java工具類放到Gatling中調用 從而進行參數的構造。併發

 

下面開始介紹個人作法:
一、在Gatling 工程中的resource 目錄下建立一個lib 目錄

  

 
二、將本身生成的工具類jar包放到lib目錄下
 

 

 
三、將jar包載入System Library庫中

 

 

四、引入工具類

 

 

 

五、測試工具類 方法調用

 

 

這裏要注意的是Feeder這個函數,在加載參數的時候或者經過我這種方法,函數調用的外部jar包 都只會生效一次。所以要想靈活運用外部jar包工具類還須要在工程中再次加工,例如:我會調用jar包工具類一次性生成3000個數據,app

而後在調用封裝的方法便可dom

  

 

一、須要注意的是feed在整個請求過程當中只加載一次傳遞參數的文件 也就是誰全部的傳遞的參數須要提早構造好 而後一次性加載到場景中 
二、建立一個構造數據的腳本 
實現兩個功能:
     隨機生成的參數保存到本地 
     留做備用定位問題使用 隨機生成的參數傳遞到Array中

  

 

 

相關文章
相關標籤/搜索