性能測試工具之Gatling


轉載:http://ningandjiao.iteye.com/blog/2004579

Gatling一直是久聞其名但是未得機會運用,正好最近有需求做性能測試,於是趁此機會熟悉了一下,可以說,這是目前最合我胃口的性能測試工具。其主要有以下特點: 

  • 1. 綠色軟件,即下即用。
  • 2. DSL腳本描述測試場景,高端大氣,易讀易維護
  • 3. 測試結果報表很漂亮,可讀性高。
  • 4. 使用Scala的actors和異步IO,資源消耗小,且運行穩定。


最后提一下,其還提供了一個Recorder可以錄制測試場景自動生成代碼,個人不推薦是用這個功能,所有的測試場景最好自己用腳本寫,這樣的腳本更清楚,更易維護,而且,程序員應該喜歡腳本多過UI。 

安裝和運行 
前面說了即下即用,下載地址:https://github.com/excilys/gatling/wiki/Downloads; 解壓后整個軟件的目錄如下:


  • bin目錄下有2個腳本,gatling和recorder, gatling用來運行測試, recorder用來啟動錄制腳本的UI的(不推薦使用),
  • conf目錄是關於Gatling自身的一些配置。
  • lib目錄是Gatling自身依賴的庫文件。
  • results目錄用來存放測試報告的。
  • user-files目錄是用來存放測試腳本的。


當運行gating腳本的時候,其會掃描user-files目錄下的所有文件,列出其中所有的Simulation(一個測試類,里面可以包含任意多個測試場景)。選擇其中一個Simulation,然后填寫Simulation ID和運行描述,這個都是為報告描述服務的。 



測試運行完成后,Gatling會自動把報告生成到results目錄下, 一個測試報告內容非常詳細,界面也非常美觀。 



編寫Gatling測試腳本 

下面是我自己寫的一個測試腳本: 

Scala代碼   收藏代碼
  1. import com.excilys.ebi.gatling.core.Predef._  
  2. import com.excilys.ebi.gatling.http.Predef._  
  3. import com.excilys.ebi.gatling.jdbc.Predef._  
  4. import com.excilys.ebi.gatling.http.Headers.Names._  
  5. import akka.util.duration._  
  6. import bootstrap._  
  7.   
  8. class MySimulation extends Simulation {  
  9.   
  10.         val httpConf = httpConfig  
  11.                 .baseURL("http://www.bfsstudios.com.au")  
  12.                 .acceptCharsetHeader("ISO-8859-1,utf-8;q=0.7,*;q=0.7")  
  13.                 .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")  
  14.                 .acceptEncodingHeader("gzip, deflate")  
  15.                 .acceptLanguageHeader("fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3")  
  16.                 .disableFollowRedirect  
  17.   
  18.         val headers_1 = Map(  
  19.                 "Keep-Alive" -> "115")  
  20.   
  21.         val scn = scenario("Scenario name")  
  22.                 .exec(  
  23.                         http("main page")  
  24.                                 .get("/")  
  25.                                 .headers(headers_1)  
  26.                                 .check(status.is(200)))  
  27.                 .pause(0 milliseconds, 100 milliseconds)  
  28.                 .feed(csv("worker_id.csv").circular)  
  29.                 .exec(  
  30.                            http("Worker page")  
  31.                                 .get("/worker/${worker_id}")  
  32.                                 .check(status.is(200)))  
  33.   
  34.         setUp(scn.users(10).ramp(10).protocolConfig(httpConf))  
  35. }  

 

  • 1. 一個Gatling測試腳本就是一個scala的類,該類必須繼承Simulation類,這樣gatling才能識別其實一個測試集。該代碼的后綴名必須為.scala
  • 2. 測試中可以通過httpConf為http請求做基本的配置。
  • 3. 一個scenario定義了一個測試用例。
  • 4. 一個測試用例可以包含多個http請求,每個http請求可以設置自己的http method ,http header等.
  • 5. 運行完之后,可以同個check檢測每個請求的返回值
  • 6. 可以通過feeder為同一個用例注入不同的參數數據,feeder中的文件默認從user-files目錄下的data文件中查找。
  • 7. 定義完scenario,通過setUp方法指定scenario的運行方式,我例子中的表示用10個用戶並發跑測試,而ramp(10)的意思是10秒鍾逐漸增加到10個用戶,即每秒新起一個用戶運行測試。



我的腳本的運行過程如下: 


DSL 
Gatling提供了為運行性能測試非常完善的DSL,這兒有其支持的所有的命令:http://gatling-tool.org/cheat-sheet/使用Gatling之前,掃一眼所有的命令,對寫腳本非常有幫助,因此雖然Gatling是scala的腳本,沒有scala經驗的同志使用起來也不會有任何問題。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM