提升測(cè)試效率?有了這些接口測(cè)試用例+工具都不是問(wèn)題
寫(xiě)在前面:在日常開(kāi)發(fā)過(guò)程中,有人做前端開(kāi)發(fā),有人負(fù)責(zé)后端開(kāi)發(fā)。接口的主要作用就是連接前后臺(tái)。但是,由于前端和后端開(kāi)發(fā)的速度可能不一樣,尤其是后端開(kāi)發(fā)好了,但前端還未開(kāi)發(fā)。這種時(shí)候我們需要做接口測(cè)試嗎?
在日常工作中,我們主要測(cè)試的都是功能板塊,如果你想真正了解接口測(cè)試,那么這篇文章或許能給你一定幫助。
1、為什么我們要做接口測(cè)試?
首先,我們先來(lái)看看測(cè)試金字塔(接口測(cè)試是在中間部分,底層是單元測(cè)試,最頂端是界面測(cè)試)。
從三者的面積大小來(lái)看,單元測(cè)試和接口測(cè)試,才是重點(diǎn),而界面測(cè)試真的是太少。這個(gè)面積,你可以理解為代碼覆蓋,也可以理解為測(cè)試的工作量。
這里要提出一個(gè)觀點(diǎn):現(xiàn)在國(guó)內(nèi)公司越來(lái)越重視接口測(cè)試了。之前的幾年,很多測(cè)試資源都放在了界面的測(cè)試,今后會(huì)逐步放在接口測(cè)試功能、性能、自動(dòng)化和穩(wěn)定性測(cè)試上面。
白盒測(cè)試目前還是開(kāi)發(fā)自己測(cè)試,有些大公司,注重軟件產(chǎn)品質(zhì)量,也會(huì)安排一些有代碼能力的測(cè)試人員,去輔助和指導(dǎo)開(kāi)發(fā)人員進(jìn)行單元測(cè)試,共同保證軟件的質(zhì)量。
2、什么是接口測(cè)試?
這部分內(nèi)容可以說(shuō):前人之述備矣,我就不贅述了。(PS:需要的同學(xué)可以回復(fù):接口測(cè)試,查看相關(guān)文章。)
3、接口的分類(lèi)
在開(kāi)始做接口測(cè)試之前,有必要了解一下接口的分類(lèi)。這里的分類(lèi),主要是HTTP請(qǐng)求方法分類(lèi)。下面是我們最常見(jiàn)的GET/POST/PUT/DELETE四種方法。工作中接口用到最多是GET和POST方法。(GET和POST方法的具體區(qū)別,大家可以自行翻閱圖書(shū)查看)
4、設(shè)計(jì)接口測(cè)試用例
接下來(lái),我們就一起來(lái)聊聊進(jìn)行接口測(cè)試的準(zhǔn)備工作。有些同學(xué)很好奇,接口測(cè)試要流程干嘛?不就是拿著接口文檔直接利用接口測(cè)試工具測(cè)試嘛。
其實(shí),如果只是三五個(gè)接口,你可以這么做一個(gè)臨時(shí)的接口測(cè)試。但是,如果是上百個(gè)接口,或者,你們公司的這個(gè)項(xiàng)目,第一次做接口測(cè)試,那么,我們還是很有必要遵守測(cè)試的流程。
1)接口測(cè)試的流程
接口測(cè)試和功能測(cè)試一樣,流程也大致遵守V模型,請(qǐng)看下圖。
一般來(lái)說(shuō),接口測(cè)試左邊的每個(gè)階段,每個(gè)公司可能都側(cè)重點(diǎn)不同,例如有些公司就沒(méi)有需求討論和需求評(píng)審這個(gè)階段。不管如何,用例設(shè)計(jì),這個(gè)是少不了,而且是重點(diǎn),要花時(shí)間的階段。只有覆蓋全面的接口測(cè)試用例,才能有比較好的測(cè)試接口覆蓋率,才會(huì)找出更多的接口的Bug。
2)為什么要寫(xiě)接口測(cè)試用例
功能測(cè)試用例,大家都寫(xiě)過(guò)。接口測(cè)試用例,很多人沒(méi)有寫(xiě)過(guò)。在寫(xiě)之前,我們來(lái)討論下,為什么要寫(xiě)接口用例。
①理清思路,避免漏測(cè)
②提高測(cè)試效率
③跟進(jìn)測(cè)試進(jìn)度
④告訴領(lǐng)導(dǎo)做過(guò)
⑤跟進(jìn)重復(fù)性工作
上面五點(diǎn),結(jié)合自己測(cè)試實(shí)際經(jīng)驗(yàn),應(yīng)該來(lái)說(shuō)是很好理解和認(rèn)同的。有用例,就有思路,避免漏掉測(cè)試點(diǎn)。跟著測(cè)試用例走,一方面,可以避免隨機(jī)測(cè)試那種沒(méi)有目的性的測(cè)試,提高測(cè)試效率;另一方面,這對(duì)領(lǐng)導(dǎo)檢查你的工作、同事詢問(wèn)你的進(jìn)度時(shí)有很多便利,也能夠提高對(duì)接效率。
3)接口用例設(shè)計(jì)
我們?cè)谠O(shè)計(jì)接口用例時(shí),主要可以從這四個(gè)方面來(lái)考慮:功能,邏輯業(yè)務(wù),異常,安全。
①功能:
功能是否正常;功能是否按照接口文檔實(shí)現(xiàn);
舉例:有些添加到購(gòu)物車(chē),需要登錄才能添加。也就是業(yè)務(wù)要求不支持游客添加購(gòu)物車(chē)功能,如果設(shè)計(jì)一個(gè)沒(méi)有登錄的用戶,然后去測(cè)試添加購(gòu)物車(chē)接口,結(jié)果接口能添加到購(gòu)物車(chē),說(shuō)明功能不正常,不符合需求和接口文檔描述。
②邏輯業(yè)務(wù):
是否依賴業(yè)務(wù);
舉例:該接口調(diào)用之前,需要調(diào)用登錄接口,如果不登錄也能請(qǐng)求數(shù)據(jù),不符合業(yè)務(wù)規(guī)則。
③異常:
參數(shù)異常和數(shù)據(jù)異常;
參數(shù)異常:關(guān)鍵字參數(shù),參數(shù)為空,多,少參數(shù),錯(cuò)誤參數(shù);
數(shù)據(jù)異常:關(guān)鍵字?jǐn)?shù)據(jù),數(shù)據(jù)為空,長(zhǎng)度不一致,錯(cuò)誤數(shù)據(jù);
舉例:不管數(shù)據(jù)異常還是參數(shù)異常,測(cè)試點(diǎn)差不多,一個(gè)參數(shù)有key和value,key表示參數(shù),value表示數(shù)據(jù)。
第一,看看參數(shù)和數(shù)據(jù)能不能支持關(guān)鍵字,例如Java中的保留關(guān)鍵字等等;
第二,就是參數(shù)和數(shù)據(jù)都為空,看看是否做了判斷;
第三,參數(shù)多和少,例如有兩個(gè)參數(shù)的接口,你需要設(shè)計(jì)一個(gè)三個(gè)參數(shù)的用例,一個(gè)只有一個(gè)參數(shù)的用例。數(shù)據(jù)那邊長(zhǎng)度不一致,例如設(shè)計(jì)很長(zhǎng)的字符串是否支持,因?yàn)閿?shù)據(jù)庫(kù)創(chuàng)建表過(guò)程都設(shè)置好了每個(gè)字段的長(zhǎng)度。輸入錯(cuò)誤的參數(shù)和數(shù)據(jù),例如故意輸出單詞等等。
④安全測(cè)試用例設(shè)計(jì):
cookie:有cookie才能獲取數(shù)據(jù),如果不帶cookie還有信息返回,說(shuō)明有問(wèn)題
header:正常接口帶header信息,刪除header看是否能夠返回?cái)?shù)據(jù)。
唯一識(shí)別碼:app手機(jī)識(shí)別碼,一般是唯一的。
注:安全測(cè)試主要從上面三點(diǎn)檢查。第三個(gè)是唯一識(shí)別碼,主要是指app上手機(jī)的識(shí)別碼,一般很少用到,除非很?chē)?yán)格的接口測(cè)試,例如銀行app登錄,需要指紋,而指紋來(lái)源手機(jī),一般有一個(gè)手機(jī)識(shí)別碼判斷過(guò)程。
5、接口測(cè)試的工具
目前,市場(chǎng)上有很多支持接口測(cè)試的工具。利用工具進(jìn)行接口測(cè)試,能夠提供測(cè)試效率。例如,加入讓你一天完成100個(gè)接口測(cè)試任務(wù),你覺(jué)得你加班能否完成。如果有工具,但是不是所有工具都能夠支持你完成這個(gè)任務(wù)。下面我們就來(lái)挑選幾個(gè)工具,簡(jiǎn)單介紹一下。
1)fiddler
首先,這是一個(gè)HTTP協(xié)議調(diào)試代理工具,說(shuō)白了就是一個(gè)抓http包的工具。web測(cè)試和手機(jī)測(cè)試都能用到這個(gè)工具。既然是http協(xié)議,這個(gè)工具也能支持接口測(cè)試。稍后文章,我們會(huì)專(zhuān)門(mén)介紹fiddler這個(gè)工具。
2)postman
這是一款google工程師開(kāi)發(fā)的一個(gè)插件,可以安裝到chrome瀏覽器上。支持不同接口測(cè)試請(qǐng)求,能夠管理測(cè)試套件和自動(dòng)化運(yùn)行,弱點(diǎn)在于,自動(dòng)化斷言功能不強(qiáng)大。不能和jenkins和代碼管理庫(kù)進(jìn)行持續(xù)集成測(cè)試。但是,絕對(duì)是一個(gè)很好的半手工,半自動(dòng)化測(cè)試工具,我一般在寫(xiě)自動(dòng)化接口測(cè)試用例,會(huì)打開(kāi)postman進(jìn)行輔助測(cè)試和debug。這個(gè)工具也會(huì)稍后在文章介紹。
3)wireshak
這個(gè)是一款計(jì)算機(jī)上抓包工具,支持抓各種包,TCP,UDP,HTTP都支持。如果做底層網(wǎng)絡(luò)數(shù)據(jù)測(cè)試,一般都需要用到它。作為接口測(cè)試,這個(gè)軟件有點(diǎn)不友好。因?yàn)樗⑿聰?shù)據(jù)太快,不好定位每個(gè)操作對(duì)應(yīng)的接口。所以,我們不會(huì)進(jìn)行過(guò)多介紹這個(gè)工具。
4)soupUI
這個(gè)是一個(gè)開(kāi)源免費(fèi)、企業(yè)版收費(fèi)的軟件。在國(guó)外的接口測(cè)試,使用非常多。這個(gè)工具能夠支持接口自動(dòng)化測(cè)試和接口性能測(cè)試,也能支持和jenkins做持續(xù)集成測(cè)試。了解一下就可以,自己可以下載一個(gè)社區(qū)免費(fèi)版,做一個(gè)demo試試。
5)java代碼做接口測(cè)試
代碼是萬(wàn)能,筆記工具也是代碼開(kāi)發(fā)出來(lái)的。為什么要用代碼做接口自動(dòng)化測(cè)試呢。因?yàn)椋行┕ぞ吖δ苁怯邢拗?,很多公司,需要一些特定的功能,工具不支持,只好用代碼進(jìn)行開(kāi)發(fā)。
一般用Java做自動(dòng)化測(cè)試,主要是利用httpclient.jar這個(gè)包,然后利用junit或者testng這樣的單元測(cè)試工具,進(jìn)行測(cè)試用例的開(kāi)發(fā),然后在jenkins上創(chuàng)建一個(gè)job,進(jìn)行持續(xù)集成測(cè)試。
6)Python代碼做接口測(cè)試
和Java一樣,Python中利用一個(gè)很好,功能強(qiáng)大的第三方庫(kù)requests,能夠方便都創(chuàng)建接口自動(dòng)化用例。python下單元測(cè)試框架,一般采用unittest。生成測(cè)試報(bào)告,一般選擇HTMLTestRunner.py。同樣,可以和jenkins做持續(xù)集成測(cè)試。
7)LoadRunner
不要以為L(zhǎng)R只能做性能測(cè)試,loadrunner同樣可以做接口自動(dòng)化和接口壓力測(cè)試。只是我們很多人,不會(huì)利用LR的函數(shù),進(jìn)行開(kāi)發(fā)接口測(cè)試用例。
8)JMeter
JMeter同loadrunner一樣,都是以性能測(cè)試出名,一般用JMeter也是做接口性能測(cè)試。例如java+Jmeter+ant+jenkins做接口性能監(jiān)聽(tīng)測(cè)試。JMeter如何做接口測(cè)試,大家可以網(wǎng)上查下。
寫(xiě)在最后:上面說(shuō)了這么多工具,基本覆蓋了接口功能測(cè)試,接口自動(dòng)化測(cè)試,接口性能測(cè)試。這里提一下,在Python語(yǔ)言下有一個(gè)性能測(cè)試工具推薦:Locust。自己百度,安裝下,很簡(jiǎn)單的web界面,感覺(jué)很不錯(cuò),作為一個(gè)輕量級(jí)的協(xié)程測(cè)試工具。
