接口測(cè)試作為集成測(cè)試的一部分,通過(guò)直接調(diào)用被測(cè)試的接口來(lái)確定系統(tǒng)在功能性、可靠性、安全性和性能方面是否能達(dá)到預(yù)期,有些情況是功能測(cè)試無(wú)法覆蓋的,所以接口測(cè)試是非常必要的。
接口測(cè)試分為兩種,一種是webservice接口,走soap協(xié)議通過(guò)http傳輸,請(qǐng)求報(bào)文和返回報(bào)文都是xml格式的,測(cè)試時(shí)通過(guò)工具soapUI進(jìn)行測(cè)試。使用情況比較少;另一種http api接口,走h(yuǎn)ttp傳輸協(xié)議,通過(guò)路徑來(lái)區(qū)分調(diào)用的方法,最常用的是get和post請(qǐng)求。
上面說(shuō)過(guò),get和post請(qǐng)求是通過(guò)路徑來(lái)區(qū)分的,get請(qǐng)求的請(qǐng)求參數(shù)都是寫在URL里的,格式為:http://url?param1¶m2。而post的請(qǐng)求一般都是寫在body里的,可能是key-value格式,或者json串格式,也可能是上傳一個(gè)文件。。。那么問(wèn)題來(lái)了,get請(qǐng)求和post請(qǐng)求的區(qū)別在哪里呢?我們百度時(shí),大多數(shù)的答案是這樣的:
1、get請(qǐng)求可以在瀏覽器中請(qǐng)求到,post請(qǐng)求的測(cè)試需要借助工具
2、get請(qǐng)求使用url和cookie傳參,post的數(shù)據(jù)放在body中
3、post比get更安全,因?yàn)閭鬟f的參數(shù)在url上是看不到的
4、get請(qǐng)求的url會(huì)有限制,而post請(qǐng)求的數(shù)據(jù)可以非常大
5、一般get請(qǐng)求是來(lái)獲取數(shù)據(jù),post請(qǐng)求是傳遞數(shù)據(jù)的
其實(shí),對(duì)于現(xiàn)在飛速發(fā)展的互聯(lián)網(wǎng)來(lái)說(shuō),上面的說(shuō)法已經(jīng)不嚴(yán)謹(jǐn)了。首先,post請(qǐng)求的參數(shù)也可以寫在url里,但是這種情況不多見(jiàn);其次表面上看起來(lái),post利用body傳參,比get的url傳參安全,但其實(shí)只要用抓包工具(fiddler,Charles等),post的參數(shù)也是一覽無(wú)余;再次,現(xiàn)在的瀏覽器非常強(qiáng)大,可以輸入支持很長(zhǎng)的URL,所以也不再有限制一說(shuō)了。這么說(shuō)來(lái),種種區(qū)別只有最后一條是最根本的了。
怎么來(lái)測(cè)試接口呢?根據(jù)什么來(lái)測(cè)呢?這就需要開發(fā)提供的接口文檔了,接口文檔和功能測(cè)試的需求說(shuō)明書的功能是一樣的。包括:接口說(shuō)明、調(diào)用的url,請(qǐng)求方式(get or post),請(qǐng)求參數(shù)、參數(shù)類型、請(qǐng)求參數(shù)說(shuō)明,返回結(jié)果說(shuō)明。有了接口文檔后,我們就可以設(shè)計(jì)用例了,一般接口測(cè)試的用例分為以下幾種:
1、通過(guò)性驗(yàn)證,說(shuō)白了就是傳遞正確的參數(shù),是否返回正常的結(jié)果
2、參數(shù)組合,因?yàn)閰?shù)有必傳和非必傳,參數(shù)的類型和長(zhǎng)度,以及傳遞時(shí)可能業(yè)務(wù)上的一些限制,所以在設(shè)計(jì)用例時(shí),就要排列組合這些情況,保證所有情況都能覆蓋到
3、接口的安全性,這個(gè)又分為幾種情況:
1)繞過(guò)驗(yàn)證,比如提交訂單時(shí),在傳遞商品價(jià)格參數(shù)時(shí),修改商品價(jià)格,就要看后端有沒(méi)有驗(yàn)證了?;蛘呶抑Ц稌r(shí),抓個(gè)包將訂單金額一改,如果能以我改后的金額支付,那這個(gè)借口就有問(wèn)題了。
2)繞過(guò)身份驗(yàn)證,就是某個(gè)功能只有有特殊權(quán)限的用戶才能操作,那我傳遞一個(gè)普通的用戶,是不是也能操作呢
3)參數(shù)是否加密,這個(gè)關(guān)系到一些賬戶的安全,比如我們?cè)诘卿浺恍┚W(wǎng)站時(shí),它要將我們的登錄信息進(jìn)行加密,如果不加密我們的信息就會(huì)暴露,危害性極大。
4) 密碼安全規(guī)則,設(shè)置密碼時(shí)復(fù)雜程度的校驗(yàn)。
4、根據(jù)業(yè)務(wù)邏輯來(lái)設(shè)計(jì)用例
用例設(shè)計(jì)完了,用什么來(lái)測(cè)試接口呢?我們可以借助一些工具,比如postman和jmeter。postman使用比較簡(jiǎn)單,可以在列表中選擇請(qǐng)求方式,在輸入框中輸入U(xiǎn)RL,如果是get請(qǐng)求,直接點(diǎn)擊send就可以看返回結(jié)果了。
如果是post請(qǐng)求,會(huì)涉及到幾種參數(shù)的上傳方式和添加請(qǐng)求頭、權(quán)限驗(yàn)證還有添加cookie等操作。在標(biāo)紅的地方基本都能完成。
還有一種測(cè)試接口的工具是jmeter,用途比較廣泛,不但能測(cè)接口的功能,還能對(duì)接口進(jìn)行壓力測(cè)試。自帶的一些功能,比如參數(shù)化、數(shù)據(jù)關(guān)聯(lián)更符合自動(dòng)化測(cè)試的思想。而且還能操作數(shù)據(jù)庫(kù)。在jmeter中需要?jiǎng)?chuàng)建線程組,線程組的循環(huán)次數(shù)和線程數(shù)決定了并發(fā)量,也可以設(shè)置持續(xù)時(shí)間或者啟動(dòng)結(jié)束時(shí)間來(lái)決定請(qǐng)求的運(yùn)行時(shí)間。如圖:
然后在線程組下面添加http請(qǐng)求,將接口的url、路徑、參數(shù)、請(qǐng)求方法寫好,再添加察看結(jié)果樹來(lái)看請(qǐng)求返回結(jié)果,如果壓測(cè)接口的化,需要添加聚合報(bào)告。
在jmeter中post請(qǐng)求添加請(qǐng)求頭、cookie或者授權(quán)等,都需要添加相應(yīng)的功能,比如標(biāo)紅部分,操作起來(lái)也比較簡(jiǎn)單。
使用jemeter時(shí),可以對(duì)傳遞的參數(shù)進(jìn)行參數(shù)化,有個(gè)函數(shù)生成器這樣的小工具,舉一個(gè)小小的例子,比如你想要生成一個(gè)隨機(jī)數(shù),只有打開函數(shù)生成器,輸入最小值和最大值,再點(diǎn)擊生成,就可以使用這個(gè)函數(shù)了,創(chuàng)建一個(gè)用戶定義的變量,起一個(gè)變量名,變量值輸入生成的函數(shù),這樣每次用到的時(shí)候,寫成$(variable)就可以了。
jmeter關(guān)聯(lián)的意思是,上一個(gè)接口的返回結(jié)果,作為下一個(gè)接口的請(qǐng)求參數(shù),很多場(chǎng)景都會(huì)用到,如果壓測(cè)這種場(chǎng)景的接口,關(guān)聯(lián)是非常好用的。
以上便是使用jmeter做接口測(cè)試的一些基本用法。
|
|
來(lái)自: huowufenghuang > 《測(cè)試》