Web Service 效能測試工具比較

來源:互聯網
上載者:User

標籤:url   list   intel   常用   lis   service   管理   example   rand   

背景

希望選擇一款Web Service效能測試工具,能真實類比大量使用者訪問網站時的請求,從而擷取伺服器當前的請求處理能力(請求數/秒)。
以伺服器為例,每個使用者用獨立的登入token,做各種操作,比如刷訊息、發訊息、看朋友圈等。

希望該效能測試工具符合如下要求:

1. 測試指令碼能力,最好是Python/Ruby等最常用的
2. 每個並發執行個體能使用不同參數
3. CLI啟動測試,這對自動化測試很重要
4. Session支援,也就是第一個請求的響應,能用於後續請求的參數。
6. 單個結點的並發數量高。
7. 分布式支援,不受限於單個結點的計算能力。

效能測試工具選手:Gatling

http://gatling.io/

Gatling是一款基於Scala 開發的高效能伺服器效能測試工具,它主要用於對伺服器進行負載等測試,並分析和測量伺服器的各種效能指標。Gatling主要用於測量基於HTTP的伺服器,比如Web應用程式,RESTful服務等,除此之外它擁有以下特點:

  • 支援Akka Actors 和 Async IO,從而能達到很高的效能
  • 支援即時產生Html動態輕量報表,從而使報表更易閱讀和進行資料分析
  • 支援DSL指令碼,從而使測試指令碼更易開發與維護
  • 支援錄製並產生測試指令碼,從而可以方便的產生測試指令碼
  • 支援匯入HAR(Http Archive)並產生測試指令碼
  • 支援Maven,Eclipse,IntelliJ等,以便於開發
  • 支援Jenkins,以便於進行持續整合
  • 支援外掛程式,從而可以擴充其功能,比如可以擴充對其他協議的支援
  • 開源免費

測試情境樣本:
http://gatling.io/docs/2.1.7/advanced_tutorial.html

object Search {  val feeder = csv("search.csv").random // 1, 2  val search = exec(http("Home")    .get("/"))    .pause(1)    .feed(feeder) // 3    .exec(http("Search")    .get("/computers?f=${searchCriterion}") // 4    .check(css("a:contains(‘${searchComputerName}‘)", "href").saveAs("computerURL"))) // 5    .pause(1)    .exec(http("Select")    .get("${computerURL}")) // 6    .pause(1)}

統計圖:

 

 

nGrinder

官網很卡,真的很卡...zzz...

http://naver.github.io/ngrinder/

nGrinder是一個基於 Grinder 開發的一個非常易於管理和使用的效能測試系統。

它是由一個controller和串連它的多個agent組成,使用者可以通過web介面管理和控制測試,以及查看測試報告,controller會把測試分發到一個或多個agent去執行。使用者可以設定使用多個進程和線程來並發的執行該指令碼,而且在同一線程中,來重複不斷的執行測試指令碼,來類比很多並發使用者。

nGrinder的測試是基於一個python的測試指令碼,使用者按照一定規則編寫測試指令碼以後,controller會將指令碼以及需要的其他檔案分發到agent,用Jython執行。並在執行過程中收集運行情況、回應時間、測試目標伺服器的運行情況等。並儲存這些資料產生運行報告,以供以後查看。

nGrinder的一大特點就是非常容易使用,安裝也非常容易,可以做到開箱即用,測試使用者也可以很容易就開始測試工作。當然,如果想執行一些比較複雜情境的效能測試,就需要測試人員對python有一定認識。

測試情境樣本:
http://grinder.sourceforge.net/faq.html#simulating-users

## testRandomise.py#import randomimport stringclass TestRandomise:  def __init__(self, filename):    self._users = []    infile = open(filename, "r")    for line in infile.readlines():      self._users.append(string.split((line),‘,‘))    infile.close()  def getUserInfo(self):    "Pick a random (user, password) from the list."    return random.choice(self._users)## Test script. Originally recorded by the TCPProxy.#from testRandomise import TestRandomisetre = TestRandomise("users.txt")class TestRunner:    def __call__(self):        # Get user for this run.        (user, passwd) = tre.getUserInfo()  # ...  # Use the user details to log in.        tests[2002].POST(‘https://host:443/securityservlet‘,          ( NVPair(‘functionname‘, ‘Login‘),            NVPair(‘pagename‘, ‘Login‘),            NVPair(‘ms_emailAddress‘, user),            NVPair(‘ms_password‘, passwd), ))

統計圖:

 

 

Locust

http://locust.io/

Locust 是一個開源負載測試工具。使用 Python 代碼定義使用者行為,也可以模擬百萬個使用者。

Locust 是非常簡單易用,分布式,使用者負載測試工具。Locust 主要為網站或者其他系統進行負載測試,能測試出一個系統可以並發處理多少使用者。

Locust 是完全基於時間的,因此單個機器支援幾千個並發使用者。相比其他許多事件驅動的應用,Locust 不使用回調,而是使用輕量級的處理方式 gevent。

測試情境樣本:
http://docs.locust.io/en/latest/quickstart.html#example-locustfile-py

from locust import HttpLocust, TaskSetdef login(l):    l.client.post("/login", {"username":"ellen_key", "password":"education"})def index(l):    l.client.get("/")def profile(l):    l.client.get("/profile")class UserBehavior(TaskSet):    tasks = {index:2, profile:1}    def on_start(self):        login(self)class WebsiteUser(HttpLocust):    task_set = UserBehavior    min_wait=5000    max_wait=9000

統計圖:

 

 

其他未參與比較的工具

因為沒有指令碼能力或CLI,所以未加入比較

  • JMeter
  • ApacheBench(ab)
  • Tsung

Locust作者對JMeter和Tsung發的牢騷:

http://my.oschina.net/u/1433482/blog/464092#OSC_h4_3

我們研究了現有的解決方案,都不符合要求。比如Apache JMeter和Tsung。 

JMeter基於UI操作,容易上手,但基本上不具備編程能力。其次JMeter基於線程,要類比數千使用者幾乎不可能。 

Tsung基於Erlang,能類比上千使用者並易於擴充,但它基於XML的DSL,描述情境能力弱,且需要大量的資料處理才知道測試結果。

比較比較科目x工具矩陣

 

 

]

結論

很明顯,首選的全能選手就是 Gatling ,Akka Actor的並行存取模型就是來自於並發語言的鼻祖Erlang。

如果想自己擴充性能測試載入器,那麼Locust這個小而精的工具可以考慮。

nGrinder工具是韓國版Line開源的,並且專門開設了中文論壇,由韓國工程師回答中國開發人員。但有兩個問題,一是官網太卡,其二樣本都是片段不完整。

各位同學參照上面的對比,自己各取所需吧。

 

轉載地址:https://testerhome.com/topics/3003

Web Service 效能測試工具比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.