最近一直在用Jmeter做接口測(cè)試的工作,這款工具同時(shí)具備GUI和non-GUI的功能,也就是既可以方便測(cè)試人員用GUI進(jìn)行接口測(cè)試用例的編寫(xiě)和分析,也能很容易的使用non-GUI的方式部署到持續(xù)集成環(huán)境中去,可謂一舉兩得。
要做接口測(cè)試,輸出結(jié)果的斷言是必不可少的。Jmeter提供了很多的斷言方式,如下圖:

這些斷言可以在我們編寫(xiě)case時(shí)很有用,但是并不是能夠很方便的滿足我們對(duì)于測(cè)試的要求,后期維護(hù)起來(lái)也有些麻煩。在測(cè)試用例的開(kāi)發(fā)中,我總結(jié)了幾點(diǎn)對(duì)于我們接口測(cè)試的需求(還在豐滿中):
- 可檢驗(yàn)一個(gè)期待的完整Json結(jié)果數(shù)據(jù)是否完全一致,包括所有的key和value
- 可檢驗(yàn)一個(gè)期待的完整Json結(jié)果數(shù)據(jù)的key是否完全一致
- 在1的基礎(chǔ)上,可排除規(guī)定的key的檢驗(yàn),如serverTime能字段,只檢查key是否存在
目前,在Jmeter里沒(méi)有能滿足以上我們需求的斷言,所以,要是想實(shí)現(xiàn)上面的需求,我們需要構(gòu)造大量的斷言來(lái)實(shí)現(xiàn)接口測(cè)試,性?xún)r(jià)比有些得不償失。
我們?cè)撛趺醋霾拍軆?yōu)化這個(gè)問(wèn)題呢?
答案就是我們自己為Jmeter做插件!
既然有了需求,我們只要在Jmeter的基礎(chǔ)上去加我們實(shí)現(xiàn)需求的功能不就行了。但是問(wèn)題沒(méi)有那么簡(jiǎn)單,我在網(wǎng)上搜了一下,沒(méi)有找到相關(guān)技能的文章可以借鑒。怎么辦?突然想到Jmeter本身是可以裝載插件的,如下圖:

這個(gè)是Jmeter插件下載的官網(wǎng),并且最大的一點(diǎn)是這些插件是開(kāi)源的?。?!所以,我們需要做的不就是下載插件的源碼,然后仿照插件的設(shè)計(jì)去完成我們自己的實(shí)現(xiàn)嗎!
(…此處實(shí)現(xiàn)過(guò)程省略很多字,在研發(fā)過(guò)程中也遇到了各種坑,甚至發(fā)現(xiàn)了官網(wǎng)插件源碼還有一些bug,對(duì)于了解JavaSwing界面設(shè)計(jì)的童鞋會(huì)很好上手)
最后,在完成了插件開(kāi)發(fā),并且將生成的jar放到了Jmeter的lib里面后,我們成功的看到了自己開(kāi)發(fā)的插件 - jp@gc - JSON Content Assertion:

打開(kāi)后界面是這樣的:

里面的功能就是之前需求里面提到的實(shí)現(xiàn),而且用了中文,更加方面測(cè)試人員的使用:)