接口測試作為確認測試的一部分,通過直接調用被測試的接口來確定系統在功能性、可靠性、安全性和性能方面是否能達到預期,有些情況是功能測試無法覆蓋的,所以接口測試是非常必要的。
接口測試分為兩種,一種是webservice接口,走soap協議通過http傳輸,請求報文和返回報文都是xml格式的,測試時通過工具soapUI進行測試。使用情況比較少;另一種http api接口,走http傳輸協議,通過路徑來區分調用的方法,最常用的是get和post請求。
get請求和post請求的區別在哪里呢?網上的答案為:
1、get請求可以在瀏覽器中請求到,post請求的測試需要借助工具
2、get請求使用url和cookie傳參,post的數據放在body中
3、post比get更安全,因為傳遞的參數在url上是看不到的
4、get請求的url會有限制,而post請求的數據可以非常大
5、一般get請求是來獲取數據,post請求是傳遞數據的
其實,對于現在飛速發展的 互聯網來說,上面的說法已經不嚴謹了。首先,post請求的參數也可以寫在url里,但是這種情況不多見;其次表面上看起來,post利用body傳參,比get的url傳參安全,但其實只要用抓包工具(fiddler,Charles等),post的參數也是一覽無余;再次,現在的瀏覽器非常強大,可以輸入支持很長的URL,所以也不再有限制一說了。這么說來,種種區別只有最后一條是最根本的了。
怎么來測試接口呢?根據什么來測呢?這就需要開發提供的接口文檔了,接口文檔和功能測試的需求說明書的功能是一樣的。包括:接口說明、調用的url,請求方式(get or post),請求參數、參數類型、請求參數說明,返回結果說明。這里接口文檔生成可以使用apipost接口文檔生成工具。有了接口文檔后,我們就可以設計用例了,一般接口測試的用例分為以下幾種:
1、通過性驗證,說白了就是傳遞正確的參數,是否返回正常的結果
2、參數組合,因為參數有必傳和非必傳,參數的類型和長度,以及傳遞時可能業務上的一些限制,所以在設計用例時,就要排列組合這些情況,保證所有情況都能覆蓋到
3、接口的安全性,這個又分為幾種情況:
1 ) 繞過驗證,比如提交訂單時,在傳遞商品價格參數時,修改商品價格,就要看后端有沒有驗證了。或者我支付時,抓個包將訂單金額一改,如果能以我改后的金額支付,那這個借口就有問題了。
2)繞過身份驗證,就是某個功能只有有特殊權限的用戶才能操作,那我傳遞一個普通的用戶,是不是也能操作呢
3)參數是否加密,這個關系到一些賬戶的安全,比如我們在登錄一些網站時,它要將我們的登錄信息進行加密,如果不加密我們的信息就會暴露,危害性極大。
4 ) 密碼安全規則,設置密碼時復雜程度的校驗。
4、根據業務邏輯來設計用例
用例設計完了,用什么來測試接口呢?我們可以借助一些工具,比如apipost和jmeter。apipost使用比較簡單,可以在列表中選擇請求方式,在輸入框中輸入URL,如果是get請求,直接點擊發送就可以看返回結果了。
如果是post請求,會涉及到幾種參數的上傳方式和添加請求頭、權限驗證還有添加cookie等操作。apipost都可以簡單實現。
還有一種測試接口的工具是jmeter,用途比較廣泛,不但能測接口的功能,還能對接口進行性能測試。比如:壓力測試、負載測試等。