本文版權(quán)歸xmeter.net 所有仑鸥。歡迎轉(zhuǎn)載档押,轉(zhuǎn)載請注明出處酥宴。
摘要##
本文描述了如何使用JMeter對WebSocket應(yīng)用進(jìn)行性能測試。先對WebSocket作了概要介紹绿店,然后以一個簡單的echo的web為例,如何使用第三方提供的插件對其進(jìn)行性能測試庐橙。
WebSocket概述##
WebSocket是在單個的TCP連接上提供了全雙工通信通道的協(xié)議假勿,該協(xié)議于2011年作為RFC6455被正式標(biāo)準(zhǔn)化。WebSocket在Web服務(wù)器和瀏覽器端都需要做實(shí)現(xiàn)态鳖。如果沒有WebSocket转培,為了實(shí)現(xiàn)即時通訊,可以采用的技術(shù)都是輪詢(polling)浆竭。輪詢是在特定的時間間隔(如每1秒)浸须,由瀏覽器對服務(wù)器發(fā)出HTTP請求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器邦泄。這種傳統(tǒng)的HTTP請求的模式帶來很明顯的缺點(diǎn) – 瀏覽器需要不斷的向服務(wù)器發(fā)出請求删窒,然而HTTP請求中頭部會占用一定的開銷,這種方式效率和實(shí)效性都不太好顺囊。而利用WebSocket肌索,瀏覽器和服務(wù)器在基于HTTP協(xié)議完成握手后,在瀏覽器和服務(wù)器之間就形成了一條通信通道特碳,他們之間就直接可以互相傳送數(shù)據(jù)诚亚。在WebSocket 協(xié)議中,為我們實(shí)現(xiàn)即時服務(wù)帶來了兩大好處:
1) 頭信息少午乓,減少了系統(tǒng)的消耗站宗。
2)服務(wù)器端推送,服務(wù)器不再被動的接收到瀏覽器的請求后才返回?cái)?shù)據(jù)益愈,而是在有新數(shù)據(jù)時就主動推送給瀏覽器份乒。
通過這種方式,效率和實(shí)效性都得到了明顯的提高腕唧,現(xiàn)在大部分瀏覽器都已經(jīng)實(shí)現(xiàn)了對WebSocket協(xié)議的支持或辖,當(dāng)然使用WebSocket付出的代價是瀏覽器和服務(wù)器端要保留一個“有狀態(tài)”的連接。
基于輪詢機(jī)制和WebSocket的架構(gòu)在實(shí)際項(xiàng)目中哪一種效率高枣接,很難一概而論颂暇,因?yàn)檫@個跟實(shí)際的業(yè)務(wù)場景有關(guān),最好的方法就是通過模擬實(shí)際的用戶行為但惶,對被測系統(tǒng)進(jìn)行打壓測試耳鸯,然后觀察被測系統(tǒng)的表現(xiàn)湿蛔。采用輪詢機(jī)制的系統(tǒng),因?yàn)榛贖TTP/HTTPS協(xié)議县爬,現(xiàn)在有很多性能測試工具可以實(shí)現(xiàn)對這種系統(tǒng)進(jìn)行測試阳啥。而基于WebSocket的性能測試則需要費(fèi)一番功夫,不過幸運(yùn)的是在開源軟件生態(tài)日益完善的今天财喳,這也不是什么難題 :)
JMeter擴(kuò)展實(shí)現(xiàn)WebSocket性能測試##
JMeter是目前最為流行的開源性能測試工具察迟,JMeter本身提供的基于插件的機(jī)制允許第三方實(shí)現(xiàn)標(biāo)準(zhǔn)JMeter所不支持的協(xié)議,而WebSocket的一個比較好的實(shí)現(xiàn)是WebSocketSampler耳高。利用該插件扎瓶,基本上能完成基于WebSocket協(xié)議的性能測試。
安裝過程###
- 下載JAR包泌枪。該github項(xiàng)目下提供了打包好的JAR包的下載概荷,但是還是需要用戶自己再去找依賴的JAR包,使用起來還是不太方便碌燕。如果想更簡單的話误证,可以到github下載所有打包好的JAR包。
- 把下載下來的JAR包拷貝到$JMETER_HOME/lib/ext目錄下修壕。如果從maciejzaleski項(xiàng)目下載到JAR包雷厂,還需要手工將頁面 里列出的JAR也拷貝到$JMETER_HOME/lib/ext目錄。
- 如果之前開著JMeter叠殷,需要關(guān)閉再次重啟改鲫。如果安裝成功,就應(yīng)該在Sampler那里看到新的“WebSocket Sampler”
如果重啟之后沒有發(fā)現(xiàn)“WebSocket Sampler”林束,請確認(rèn)在$JMETER_HOME/lib/ext是否拷貝了正確的JAR包像棘;如果JAR拷貝正確,如果使用從maciejzaleski下載的JAR包壶冒,請確認(rèn)相關(guān)依賴的JAR包和版本的正確性缕题;如果還是有問題,請打開$JMETER_HOME/bin/jmeter.log胖腾,檢查一下里面的日志是否報(bào)錯烟零,根據(jù)報(bào)錯信息來采取相應(yīng)的操作。
準(zhǔn)備被測應(yīng)用###
為了描述測試過程咸作,這里準(zhǔn)備了一個簡單的Java WebSocket的工程锨阿,該工程下提供了一個叫做echo的WebSocket服務(wù),實(shí)現(xiàn)的邏輯非常簡單记罚,當(dāng)瀏覽器端發(fā)送一條文本消息的時候墅诡,該echo服務(wù)返回: "server echo, " + 瀏覽器發(fā)送的文本。比如瀏覽器發(fā)送”hello"桐智,則服務(wù)器返回 "server echo, hello"末早。
安裝應(yīng)用分成兩步:
1)下載Apache Tomcat 8烟馅,并解壓,啟動Tomcat服務(wù)器然磷;
2)將示例工程的war包拷貝到$TOMCAT_HOME/webapps目錄下
在瀏覽器中打開鏈接郑趁,如下所示,在文本框中輸入”hello”姿搜,點(diǎn)擊“GO”寡润,服務(wù)器端返回”server echo, hello”的話就表示工作正常了。
編寫測試腳本痪欲,開始測試##
如下圖所示,填入相應(yīng)的信息就可以開始進(jìn)行測試攻礼。需要的主要信息有:
1)Server Name or IP:部署WebSocket應(yīng)用所在的服務(wù)器地址
2)Port Number:端口號
3)Timeout:Connection业踢,連接超時,超過此時間未建立連接則測試報(bào)錯礁扮;Response知举,發(fā)送消息后的超時時間。
4)Implementation:現(xiàn)在只支持RFC6455
5)Protocol:ws或者wss太伊。wss指的是加密的web socket雇锡,根據(jù)被測的配置而定
6)Path:所部署WebSocket服務(wù)的路徑
7)Streaming connection:測試期間是否重用連接,如果處于非選中狀態(tài)僚焦,每次得到服務(wù)器端的返回后就會關(guān)閉連接锰提,下次執(zhí)行時會新建連接
8)Request Data:發(fā)送出去的數(shù)據(jù)
9)Response pattern:等待服務(wù)器返回的特定的字符集合;否則等待Response Timeout設(shè)定的超時時間
10)Close Connection Pattern:與8類似芳悲,但是符合條件的時候連接將被關(guān)閉
11)Message Backlog:定義最多留下的返回消息的數(shù)目
在腳本中加入一個“View Results Tree“可以查看連接和發(fā)出數(shù)據(jù)的信息立肘。如下圖所示:
大規(guī)模WebSocket協(xié)議測試 - XMeter幫您提高效率,降低成本##
單臺機(jī)器能夠模擬的WebSocket客戶端是有限的名扛,如果針對大規(guī)模的WebSocket協(xié)議測試谅年,可能需要準(zhǔn)備大量的測試機(jī)器對被測系統(tǒng)進(jìn)行打壓,這個過程需要大量的準(zhǔn)備機(jī)器環(huán)境肮韧,以及管理這些環(huán)境的工作融蹂,導(dǎo)致工作效率比較低、而且容易出錯弄企。XMeter將這些過程遷移至云端超燃,彈性伸縮管理這些壓力機(jī),用戶只要關(guān)注測試腳本的實(shí)現(xiàn)過程拘领,而無需關(guān)心這些測試環(huán)境的管理淋纲,從而大大降低了大規(guī)模性能測試的復(fù)雜度。另外XMeter提供了豐富的測試報(bào)告院究,讓性能問題一目了然洽瞬。
關(guān)于我們##
XMeter成立于2016年本涕,核心團(tuán)隊(duì)都來自于IBM,是一家領(lǐng)先技術(shù)的性能測試持續(xù)集成咨詢與服務(wù)提供商伙窃。我們致力于提供給客戶可靠,簡單,低成本的性能測試解決方案菩颖。