壓力測試工具——Galting

爲何要寫Gatling呢?網上已經有一些介紹Gatling的好文章了,好比兩位TW同事的文章,能夠看這裏(我知道Gatling也是由於這位做者介紹的),還有這裏。主要是由於最近在使用Gatling作壓力測試,感受這個工具很是好用,因此想結合本身的使用狀況也推薦一下。Gatling是基於scala寫的一個開源的壓力測試工具,它的特色是簡單易用,測試報告簡潔漂亮,api通俗易懂。html

JDK1.7

Gatling是基於jdk1.7開發的,因此還在用jdk1.6的同窗須要先下載jdk1.7,才能夠啓動Gatling。順便說一下,JDK1.7之後確定是會替換JDK1.6的,但因爲歷史緣由(主要是JDK1.6用的人實在太多了,我想也是因爲JDK1.7升級的太晚了)你們都不想升級,我也這也是JAVA走下坡路的緣由。java

Scala

前面講過Gatling是用scala寫的,像scala、groovy和clojuer都是基於jvm開發的一種語言,不只繼承了java衆多成熟的api和穩定的jvm,並且提供了更佳簡潔易用的語法。基於某種語言的內核來從新設計一門新語言的這種作法,如今慢慢多了起來,這種作法的最大好處就是不用本身再從新設計編程語言底層相關的一些東西,並且可使用原有語言大量的成熟api,讓新語言就只專一地實現本身的功能,從而使新的語言性能穩定,易用性更高,甚至能夠吸引一些原有語言的開發人員。git

DSL

看過Galting的api的人就會發現,它的語法很像天然語言,好比測試一個get類型的http請求,它可能會這樣寫:github

demo
1
2
exec(http("demo")  .get("http://www.myweb.com/helloworld") 

是否是很容易懂,這種就是基於DSL來寫的代碼,關於DSL能夠看這本書,這本書我還沒怎麼看,等看完了之後再作分享,DSL不僅僅只是把代碼寫得像天然語言那樣簡單。web

API

要想了解Gatling的各類api,這裏推薦看Gatling源碼裏面的HttpCompileTest這個測試類,這裏包含了http幾乎全部的api使用示例。下面是截取的代碼片斷,所有代碼能夠看這裏編程

demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.group("C'est ici qu'on trouve des Poneys") {  exec(http("Catégorie Poney").post("/")  .param("baz", "${qix}")  .multivaluedParam("foo", Seq("bar")))  .exec(http("Catégorie Poney").post("/").multivaluedParam("foo", "${bar}"))  .exec(http("Catégorie Poney").get("/").queryParam("omg", "foo"))  .exec(http("Catégorie Poney").get("/").queryParam("omg", "${foo}"))  .exec(http("Catégorie Poney").get("/").queryParam("omg", session => "foo"))  .exec(http("Catégorie Poney").get("/").multivaluedQueryParam("omg", List("foo")))  .exec(http("Catégorie Poney").get("/").multivaluedQueryParam("omg", "${foo}"))  .exec(http("Catégorie Poney").get("/").multivaluedQueryParam("omg", List("foo")))  }  .uniformRandomSwitch(exec(http("Catégorie Poney").get("/")), exec(http("Catégorie Licorne").get("/")))  .randomSwitch(  40d -> exec(http("Catégorie Poney").get("/")),  50d -> exec(http("Catégorie Licorne").get("/")))  .randomSwitch(40d -> exec(http("Catégorie Poney").get("/")))  .pause(pause2) 

這裏說下randomSwitch這個方法,這個方法能夠模擬負載均衡,好比上面40d和50d的兩行代碼,會有40%的概率執行上面一行代碼,50%的概率執行下面一行代碼。api

Question

若是看過上面的示例代碼代碼,還不知道具體的api怎麼用,能夠到google group上面的分組提問題,很快就有人回答你的問題。github上面的問題區是讓開發提bug或者feature用的,因此儘可能不要在上面提問題。session

Report

下面是Gatling的報告截圖,界面很漂亮,並且參數很齊全,包括所有的請求數,成功/失敗的請求數,請求的最大/最小/平均響應時間等。負載均衡

Http & JMS

目前Gatling支持的協議很少,畢竟是一個輕量級的測試工具,目前只支持Http和JMS(之前用的時候還只是支持HTTP),隨着Gatling的發展,之後確定會支持更多的協議。如今大部分的系統和應用都是提供http協議的api,因此基於http協議的測試也能知足大部分的測試場景了。dom

相關文章
相關標籤/搜索