接口測試作為集成測試的一部分市埋,通過直接調(diào)用被測試的接口來確定系統(tǒng)在功能性埋泵、可靠性、安全性和性能方面是否能達(dá)到預(yù)期匙铡,有些情況是功能測試無法覆蓋的拧咳,所以接口測試是非常必要的伯顶。
接口測試分為兩種,一種是webservice接口骆膝,走soap協(xié)議通過http傳輸祭衩,請求報文和返回報文都是xml格式的,測試時通過工具soapUI進(jìn)行測試阅签。使用情況比較少汪厨;另一種http api接口,走h(yuǎn)ttp傳輸協(xié)議愉择,通過路徑來區(qū)分調(diào)用的方法,最常用的是get和post請求织中。
上面說過锥涕,get和post請求是通過路徑來區(qū)分的,get請求的請求參數(shù)都是寫在URL里的狭吼,格式為:http://url?param1?m2层坠。而post的請求一般都是寫在body里的,可能是key-value格式刁笙,或者json串格式破花,也可能是上傳一個文件。疲吸。座每。那么問題來了,get請求和post請求的區(qū)別在哪里呢摘悴?我們百度時峭梳,大多數(shù)的答案是這樣的:
1、get請求可以在瀏覽器中請求到蹂喻,post請求的測試需要借助工具
2葱椭、get請求使用url和cookie傳參捂寿,post的數(shù)據(jù)放在body中
3、post比get更安全孵运,因為傳遞的參數(shù)在url上是看不到的
4秦陋、get請求的url會有限制,而post請求的數(shù)據(jù)可以非常大
5治笨、一般get請求是來獲取數(shù)據(jù)驳概,post請求是傳遞數(shù)據(jù)的
其實,對于現(xiàn)在飛速發(fā)展的互聯(lián)網(wǎng)來說大磺,上面的說法已經(jīng)不嚴(yán)謹(jǐn)了抡句。首先,post請求的參數(shù)也可以寫在url里杠愧,但是這種情況不多見待榔;其次表面上看起來,post利用body傳參流济,比get的url傳參安全锐锣,但其實只要用抓包工具(fiddler,Charles等)绳瘟,post的參數(shù)也是一覽無余雕憔;再次,現(xiàn)在的瀏覽器非常強大糖声,可以輸入支持很長的URL斤彼,所以也不再有限制一說了。這么說來蘸泻,種種區(qū)別只有最后一條是最根本的了琉苇。
怎么來測試接口呢?根據(jù)什么來測呢悦施?這就需要開發(fā)提供的接口文檔了并扇,接口文檔和功能測試的需求說明書的功能是一樣的。包括:接口說明抡诞、調(diào)用的url穷蛹,請求方式(get or post),請求參數(shù)昼汗、參數(shù)類型肴熏、請求參數(shù)說明,返回結(jié)果說明乔遮。有了接口文檔后扮超,我們就可以設(shè)計用例了,一般接口測試的用例分為以下幾種:
1、通過性驗證出刷,說白了就是傳遞正確的參數(shù)璧疗,是否返回正常的結(jié)果
2、參數(shù)組合馁龟,因為參數(shù)有必傳和非必傳崩侠,參數(shù)的類型和長度,以及傳遞時可能業(yè)務(wù)上的一些限制坷檩,所以在設(shè)計用例時却音,就要排列組合這些情況,保證所有情況都能覆蓋到
3矢炼、接口的安全性系瓢,這個又分為幾種情況:
1)繞過驗證,比如提交訂單時句灌,在傳遞商品價格參數(shù)時夷陋,修改商品價格,就要看后端有沒有驗證了胰锌∑疲或者我支付時,抓個包將訂單金額一改资昧,如果能以我改后的金額支付酬土,那這個借口就有問題了。
2)繞過身份驗證格带,就是某個功能只有有特殊權(quán)限的用戶才能操作撤缴,那我傳遞一個普通的用戶,是不是也能操作呢
3)參數(shù)是否加密叽唱,這個關(guān)系到一些賬戶的安全腹泌,比如我們在登錄一些網(wǎng)站時,它要將我們的登錄信息進(jìn)行加密尔觉,如果不加密我們的信息就會暴露,危害性極大芥吟。
4) 密碼安全規(guī)則侦铜,設(shè)置密碼時復(fù)雜程度的校驗。
4钟鸵、根據(jù)業(yè)務(wù)邏輯來設(shè)計用例
用例設(shè)計完了钉稍,用什么來測試接口呢?我們可以借助一些工具棺耍,比如postman和jmeter贡未。postman使用比較簡單,可以在列表中選擇請求方式,在輸入框中輸入URL俊卤,如果是get請求嫩挤,直接點擊send就可以看返回結(jié)果了。
如果是post請求消恍,會涉及到幾種參數(shù)的上傳方式和添加請求頭岂昭、權(quán)限驗證還有添加cookie等操作。在標(biāo)紅的地方基本都能完成狠怨。
還有一種測試接口的工具是jmeter约啊,用途比較廣泛,不但能測接口的功能佣赖,還能對接口進(jìn)行壓力測試恰矩。自帶的一些功能,比如參數(shù)化憎蛤、數(shù)據(jù)關(guān)聯(lián)更符合自動化測試的思想外傅。而且還能操作數(shù)據(jù)庫。在jmeter中需要創(chuàng)建線程組蹂午,線程組的循環(huán)次數(shù)和線程數(shù)決定了并發(fā)量栏豺,也可以設(shè)置持續(xù)時間或者啟動結(jié)束時間來決定請求的運行時間。如圖:
然后在線程組下面添加http請求豆胸,將接口的url奥洼、路徑、參數(shù)晚胡、請求方法寫好灵奖,再添加察看結(jié)果樹來看請求返回結(jié)果,如果壓測接口的化估盘,需要添加聚合報告瓷患。
在jmeter中post請求添加請求頭、cookie或者授權(quán)等遣妥,都需要添加相應(yīng)的功能擅编,比如標(biāo)紅部分,操作起來也比較簡單箫踩。
使用jemeter時爱态,可以對傳遞的參數(shù)進(jìn)行參數(shù)化,有個函數(shù)生成器這樣的小工具境钟,舉一個小小的例子锦担,比如你想要生成一個隨機數(shù),只有打開函數(shù)生成器慨削,輸入最小值和最大值洞渔,再點擊生成套媚,就可以使用這個函數(shù)了,創(chuàng)建一個用戶定義的變量磁椒,起一個變量名堤瘤,變量值輸入生成的函數(shù),這樣每次用到的時候衷快,寫成$(variable)就可以了宙橱。
jmeter關(guān)聯(lián)的意思是,上一個接口的返回結(jié)果蘸拔,作為下一個接口的請求參數(shù)师郑,很多場景都會用到,如果壓測這種場景的接口调窍,關(guān)聯(lián)是非常好用的宝冕。
以上便是使用jmeter做接口測試的一些基本用法。