對(duì)于如何使用Jmeter測(cè)試http接口,大家都已經(jīng)比較熟悉,網(wǎng)上相關(guān)的知識(shí)也很多。但隨著微服務(wù)越來(lái)越流行,僅僅會(huì)測(cè)試http接口已經(jīng)遠(yuǎn)遠(yuǎn)不夠。Dubbo作為當(dāng)下非常流行的RPC接口,學(xué)習(xí)如何測(cè)試Dubbo接口已經(jīng)成為了測(cè)試人員進(jìn)階的必備知識(shí)之一。
對(duì)于Dubbo接口的測(cè)試,可以通過(guò)編寫代碼的方式、使用工具的方式,今天我們先講如何通過(guò)Jmeter Dubbo插件來(lái)測(cè)試Dubbo接口。
一、插件下載
插件下載地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases
下載jmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jar版本,此包中已含必要的依賴,推薦使用with-dependencies.jar包,下載后放到JMeter安裝目錄中的lib/ext路徑下。
使用的Jmeter的版本:5.4.3
插一句:如何修改Jmeter背景色為白色,我是真的用不習(xí)慣黑色的那個(gè)背景:
二、環(huán)境接口
開發(fā)環(huán)境ZK地址:zookeeper://devzk1.xx.com:2181?backup=devzk2.xx.com:2181,devzk3.xx.com:2181
dubbo直連服務(wù)器, 服務(wù)器:xx.xx.xx.xx:20880 , 20880是dubbo的服務(wù)端口
dubbo接口:com.xxxx.test.sdk.api.DubboServiceTestYY方法名:yyTestDubbo入?yún)?span id="aw82h8y" class="wpcom_tag_link">類型:自定義的POJO對(duì)象:com.xxxx.test.sdk.para.Param參數(shù)值:{“name”:“test”,“age”:1,“address”:“中國(guó)”}
三、Dubbo Sample 直連Dubbo配置
取樣器選擇Dubbo Sampler,直連的方式配置:
1、 Registry Center(注冊(cè)設(shè)置) 區(qū)域填寫內(nèi)容:由于是用直連的方式,所以Protocol選none。Address填寫直連服務(wù)器的信息:xx.xx.xx.xx:20880
2、Consumer&Service Settings(消費(fèi)者和服務(wù)者設(shè)置):Timeout:設(shè)置請(qǐng)求接口超時(shí)時(shí)間,默認(rèn)1000ms, 就用默認(rèn)的就行,如果實(shí)際接口響應(yīng)比較慢,也可以改大點(diǎn),比如改成5000
Version:版本,一般無(wú)需填寫。Dubbo不同版本之間差異較大,不同版本之間不能互相調(diào)用。注意:默認(rèn)這里填的是1.0,現(xiàn)在dubbo的版本都是2.xx了,因此直接刪掉版本號(hào),就讓這里為空,不然用默認(rèn)的1.0會(huì)調(diào)不通。最開始我沒有管這個(gè)值,結(jié)果發(fā)現(xiàn)調(diào)不通,刪了version的值就成功調(diào)通了。
后面其他的幾項(xiàng)指標(biāo)都不管,保持默認(rèn)就行。
3、Get Provider List按鈕:根據(jù)Address填寫的地址,獲取服務(wù)提供者的服務(wù)列表。直連的方式下,點(diǎn)這個(gè)按鈕沒用,會(huì)提示讓你把Protocol選為zookeepr or nacos or redis, 但是直連的時(shí)候Protocol要選none, 所以直連的時(shí)候就手動(dòng)在下面去填interface和method,不用 Get Provider List按鈕來(lái)獲取。
4、 Interface 填 dubbo的接口:com.xxxx.test.sdk.api.DubboServiceTestYYMethod填方法名:yyTestDubbo
5、 Args:接口入?yún)?,輸入?duì)應(yīng)的參數(shù)類型和參數(shù)值paramType:參數(shù)支持任何類型,可以直接使用java.lang下的包裝類,如:int、float、shot、double、long、byte、boolean、char、String等。類型也可以是自定義對(duì)象POJO,需使用類的完全名稱。我們這里接口是要用自定義對(duì)象: com.xxxx.test.sdk.para.Param?!aramValue:填寫需要的參數(shù)值,例如:int為1,boolean為true等,自定義類與List或者M(jìn)ap等使用Json格式數(shù)據(jù)。我們這里接口是要用Json格式數(shù)據(jù):{“name”:“test”,“age”:1,“address”:“中國(guó)”} 注意:有個(gè)小坑,paramValue填完值之后,如果馬上填運(yùn)行按鈕調(diào)接口,會(huì)發(fā)現(xiàn)paramValue值消失了,沒保存上。所以要再點(diǎn)一下增加按鈕添加一行空白行,再刪掉這行空白行,這樣就保存上了。
執(zhí)行接口調(diào)用,調(diào)用成功:
四、Dubbo Sample ZK方式配置
1、 Registry Center(注冊(cè)設(shè)置) 區(qū)域填寫內(nèi)容:由于是用ZK的方式,所以Protocol選zookeeper。Address填寫直連服務(wù)器的信息:zookeeper://devzk1.xx.com:2181?backup=devzk2.xx.com:2181,devzk3.xx.com:2181
其他項(xiàng)填寫,和直連的方式一樣。
注意:實(shí)際測(cè)試中發(fā)現(xiàn)即使是用的ZK的方式,Get Provider List按鈕也獲取不到服務(wù)提供者的服務(wù)列表,點(diǎn)擊之后會(huì)先出現(xiàn)提示信息:
意思是:獲取所有提供者的服務(wù)列表,可能會(huì)導(dǎo)致 JMeter 停止響應(yīng)幾秒鐘。你要繼續(xù)嗎?點(diǎn)擊是,理論上正常的話會(huì)停頓一會(huì)兒,然后彈窗提示獲取提供者列表成功!
如果10秒中都沒有出現(xiàn)如上彈框,證明列表獲取失敗,可能是zookeeper地址填寫錯(cuò)誤,也可能是服務(wù)有問題了。而此時(shí)JMeter界面是卡死狀態(tài),需要強(qiáng)制關(guān)閉掉JMeter,因?yàn)榈仍匍L(zhǎng)時(shí)間也沒有意義了。
而實(shí)際測(cè)試的時(shí)候,發(fā)現(xiàn)我的ZK是對(duì)的,服務(wù)器也是正常運(yùn)行的,也沒有出現(xiàn)彈窗,Jmeter也會(huì)卡死。因此建議還是直接在下面手動(dòng)輸入Interface和Method吧。
執(zhí)行接口調(diào)用,調(diào)用成功: