轉載: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測試腳本
下面是我自己寫的一個測試腳本:
- import com.excilys.ebi.gatling.core.Predef._
- import com.excilys.ebi.gatling.http.Predef._
- import com.excilys.ebi.gatling.jdbc.Predef._
- import com.excilys.ebi.gatling.http.Headers.Names._
- import akka.util.duration._
- import bootstrap._
- class MySimulation extends Simulation {
- val httpConf = httpConfig
- .baseURL("http://www.bfsstudios.com.au")
- .acceptCharsetHeader("ISO-8859-1,utf-8;q=0.7,*;q=0.7")
- .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
- .acceptEncodingHeader("gzip, deflate")
- .acceptLanguageHeader("fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3")
- .disableFollowRedirect
- val headers_1 = Map(
- "Keep-Alive" -> "115")
- val scn = scenario("Scenario name")
- .exec(
- http("main page")
- .get("/")
- .headers(headers_1)
- .check(status.is(200)))
- .pause(0 milliseconds, 100 milliseconds)
- .feed(csv("worker_id.csv").circular)
- .exec(
- http("Worker page")
- .get("/worker/${worker_id}")
- .check(status.is(200)))
- setUp(scn.users(10).ramp(10).protocolConfig(httpConf))
- }
- 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經驗的同志使用起來也不會有任何問題。