首先,什么是接口呢?
接口一般來說有兩種,一種是程序內(nèi)部的接口,一種是系統(tǒng)對外的接口。
系統(tǒng)對外的接口:比如你要從別的網(wǎng)站或服務(wù)器上獲取資源或信息,別人肯定不會把數(shù)據(jù)庫共享給你,他只能給你提供一個他們寫好的方法來獲取數(shù)據(jù),你引用他提供的接口就能使用他寫好的方法,從而達(dá)到數(shù)據(jù)共享的目的,比如說咱們用的app、網(wǎng)址這些它在進(jìn)行數(shù)據(jù)處理的時候都是通過接口來進(jìn)行調(diào)用的。
程序內(nèi)部的接口:方法與方法之間,模塊與模塊之間的交互,程序內(nèi)部拋出的接口,比如bbs系統(tǒng),有登錄模塊、發(fā)帖模塊等等,那你要發(fā)帖就必須先登錄,要發(fā)帖就得登錄,那么這兩個模塊就得有交互,它就會拋出一個接口,供內(nèi)部系統(tǒng)進(jìn)行調(diào)用。
一、常見接口:
1、webService接口:是走soap協(xié)議通過http傳輸,請求報文和返回報文都是xml格式的,我們在測試的時候都用通過工具才能進(jìn)行調(diào)用,測試??梢允褂玫墓ぞ哂蠸oapUI、jmeter、loadrunner等;
2、http api接口:是走h(yuǎn)ttp協(xié)議,通過路徑來區(qū)分調(diào)用的方法,請求報文都是key-value形式的,返回報文一般都是json串,有g(shù)et和post等方法,這也是最常用的兩種請求方式??梢允褂玫墓ぞ哂衟ostman、RESTClient、jmeter、loadrunner等;
二、前端和后端:
在說接口測試之前,我們先來搞清楚這兩個概念,前端和后端。
前端是什么呢,對于web端來說,咱們使用的網(wǎng)頁,打開的網(wǎng)站,這都是前端,這些都是html、css寫的;對于app端來說呢,它就是咱們用的app,android或者object-C(開發(fā)ios上的app)開發(fā)的,它的作用就是顯示頁面,讓我們看到漂亮的頁面,以及做一些簡單的校驗,比如說非空校驗,咱們在頁面上操作的時候,這些業(yè)務(wù)邏輯、功能,比如說你購物,發(fā)微博這些功能是由后端來實現(xiàn)的,后端去控制你購物的時候扣你的余額,發(fā)微博發(fā)到哪個賬號下面,那前端和后端是怎么交互的呢,就是通過接口。
前面說的你可能不好理解,你只需記住:前端負(fù)責(zé)貌美如花,后端負(fù)責(zé)掙錢養(yǎng)家。
三、什么是接口測試:
接口測試是測試系統(tǒng)組件間接口的一種測試。接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點。測試的重點是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。
OK,上面是百度百科上說的,下面才是我說的
其實我覺得接口測試很簡單,比一般的功能測試還簡單(這話我先這樣說,以后可能會刪O( _ )O哈?。F(xiàn)在找工作好多公司都要求有接口測試經(jīng)驗,也有好多人問我(也就兩三個人)什么是接口測試,本著不懂也要裝懂的態(tài)度,我會說:所謂接口測試就是通過測試不同情況下的入?yún)⑴c之相應(yīng)的出參信息來判斷接口是否符合或滿足相應(yīng)的功能性、安全性要求。
我為啥說接口測試比功能測試簡單呢,因為功能測試是從頁面輸入值,然后通過點擊按鈕或鏈接等傳值給后端,而且功能測試還要測UI、前端交互等功能,但接口測試沒有頁面,它是通過接口規(guī)范文檔上的調(diào)用地址、請求參數(shù),拼接報文,然后發(fā)送請求,檢查返回結(jié)果,所以它只需測入?yún)⒑统鰠⒕托辛?,相對來說簡單了不少。
四、接口組成
接口都有那些部分組成呢?
首先,接口文檔應(yīng)該包含以下內(nèi)容:
1、接口說明
2、調(diào)用url
3、請求方法(getpost)
4、請求參數(shù)、參數(shù)類型、請求參數(shù)說明
5、返回參數(shù)說明
由接口文檔可知,接口至少應(yīng)有請求地址、請求方法、請求參數(shù)(入?yún)⒑统鰠ⅲ┙M成,部分接口有請求頭header。
標(biāo)頭 (header):是服務(wù)器以HTTP協(xié)議傳HTML資料到瀏覽器前所送出的字串,在標(biāo)頭與 HTML 文件之間尚需空一行分隔,一般存放cookie、token等信息
有同學(xué)問我header和入?yún)⒂惺裁搓P(guān)系?它們不都是發(fā)送到服務(wù)器的參數(shù)嗎?
OK,首先,它們確實都是發(fā)送到服務(wù)器里的參數(shù),但它們是有區(qū)別的,header里存放的參數(shù)一般存放的是一些校驗信息,比如cookie,它是為了校驗這個請求是否有權(quán)限請求服務(wù)器,如果有,它才能請求服務(wù)器,然后把請求地址連同入?yún)⒁黄鸢l(fā)送到服務(wù)器,然后服務(wù)器會根據(jù)地址和入?yún)矸祷爻鰠ⅰR簿褪钦f,服務(wù)器是先接受header信息進(jìn)行判斷該請求是否有權(quán)限請求,判斷有權(quán)限后,才會接受請求地址和入?yún)⒌摹?/p>
五、為什么要做接口測試:
大家都知道,接口其實就是前端頁面或APP等調(diào)用與后端做交互用的,所以好多人都會問,我功能測試都測好了,為什么還要測接口呢?OK,在回答這個問題之前,先舉個栗子:
比如測試用戶注冊功能,規(guī)定用戶名為6~18個字符,包含字母(區(qū)分大小寫)、數(shù)字、下劃線。首先功能測試時肯定會對用戶名規(guī)則進(jìn)行測試時,比如輸入20個字符、輸入特殊字符等,但這些可能只是在前端做了校驗,后端可能沒做校驗,如果有人通過抓包繞過前端校驗直接發(fā)送到后端怎么辦呢?試想一下,如果用戶名和密碼未在后端做校驗,而有人又繞過前端校驗的話,那用戶名和密碼不就可以隨便輸了嗎?如果是登錄可能會通過SQL注入等手段來隨意登錄,甚至可以獲取管理員權(quán)限,那這樣不是很恐怖?
所以,接口測試的必要性就體現(xiàn)出來了:
①、可以發(fā)現(xiàn)很多在頁面上操作發(fā)現(xiàn)不了的bug
②、檢查系統(tǒng)的異常處理能力
③、檢查系統(tǒng)的安全性、穩(wěn)定性
④、前端隨便變,接口測好了,后端不用變
常用的接口測試工具主要有以下幾種:
Postman: 簡單方便的接口調(diào)試工具,便于分享和協(xié)作。具有接口調(diào)試,接口集管理,環(huán)境配置,參數(shù)化,斷言,批量執(zhí)行,錄制接口,Mock Server, 接口文檔, 接口監(jiān)控等功能;
JMeter: 開源接口測試及壓測工具,支持Linux及無界面運(yùn)行;
LR: 商業(yè)版接口性能測試工具,簡單易用,功能強(qiáng)大;
SoupUI: 開源,WebService接口常用測試工具,也可以測試Rest接口及接口安全。
本章主要介紹如何使用postman做接口測試。
一 、postman 界面功能介紹
1、工具欄
New: 新建,可以新建Request請求,Collection請求集,環(huán)境等等
Import: 導(dǎo)入,可以導(dǎo)入別人導(dǎo)出的請求集
Runner: 運(yùn)行一個請求集(批量執(zhí)行)
Invite: 邀請(需要注冊,邀請進(jìn)行協(xié)作)
同步圖標(biāo):(需要注冊,同步你的項目到云端)
抓包圖標(biāo):抓包/捕獲請求,用于開啟Postman代理, 手動設(shè)置代理(或手機(jī)代理)后可抓包/錄制請求
設(shè)置圖標(biāo):Postman設(shè)置功能
消息圖標(biāo):官方及協(xié)助消息
收藏圖標(biāo):我的收藏(需要注冊)
云端圖標(biāo):用戶云端數(shù)據(jù)(需要注冊)
2、接口管理區(qū)
History: 請求歷史記錄,可以查詢到之前的請求記錄
Collections: 接口集,相當(dāng)于一個接口項目或測試計劃,接口集中可以建立無限極子文件夾,用于對接口進(jìn)行分組管理
3、環(huán)境管理區(qū)
什么是環(huán)境
環(huán)境切換:用于切換環(huán)境
環(huán)境預(yù)覽:用于快速預(yù)覽環(huán)境中的所有變量
環(huán)境管理:用于添加修改環(huán)境及環(huán)境變量,以及全局變量
4、接口設(shè)計區(qū)
接口設(shè)計區(qū)可以通過上方tab邊上的+號,新建多個請求。接口設(shè)計區(qū)從上到下分為請求區(qū)和響應(yīng)區(qū)
①請求區(qū)
請求地址行:可以選擇請求方法(GET/POST/…),填寫請求地址,發(fā)送請求和保存請求到測試集
請求數(shù)據(jù)區(qū):分為授權(quán),請求頭,請求數(shù)據(jù),請求發(fā)送前執(zhí)行的腳本(用于準(zhǔn)備數(shù)據(jù)),請求結(jié)束后執(zhí)行的腳本(用于斷言)
②響應(yīng)區(qū):
響應(yīng)內(nèi)容(body):可以查看Pretty(美化格式),Raw(原始格式),Preview(HTML預(yù)覽格式)
響應(yīng)Cookie
響應(yīng)頭(headers)
測試結(jié)果(Test Results):對應(yīng)請求中Tests中設(shè)置的斷言
5、Collection請求集(測試集):
請求集是Postman中接口管理的一個”整體”單位,運(yùn)行、導(dǎo)出、分享等都是基于請求集的
①新建請求集:New按鈕–>Collection 或 直接點擊請求集列表上方的新建請求集按鈕
授權(quán):請求集及其子文件夾下的接口統(tǒng)一使用該授權(quán),不用每個接口再都單獨設(shè)置一遍
請求前腳本:請求集的每個接口公用的請求前腳本
請求后斷言:請求集每個接口公用的請求后腳本
請求集變量:請求集中公用的一些變量
②新建子文件夾:子文件夾的屬性中同樣擁有描述,授權(quán),請求前腳本,和請求后斷言(沒有變量,一個請求集的變量統(tǒng)一管理),實現(xiàn)了不同范圍(Scope)的Fixture功能。
③測試集導(dǎo)出:測試集可以導(dǎo)出并發(fā)送給別人(不攜帶環(huán)境信息),別人通過導(dǎo)入來使用你的接口
④測試集分享:測試集直接分享給別人(雙方都需要注冊)
⑤添加請求:通過測試集add request 添加請求,這個請求包含于這個測試集里。
測試集的功能操作:
6、環(huán)境變量和全局變量
環(huán)境管理中還可以點擊“Global”添加全局變量,環(huán)境變量只有當(dāng)選擇了該環(huán)境時才生效,全局變量在任何環(huán)境中都生效,測試集中的變量只在當(dāng)前測試集生效,當(dāng)測試集變量,環(huán)境變量,
全局變量有重復(fù)的變量名時,優(yōu)先級為:環(huán)境變量>全局變量>測試集變量。
添加環(huán)境變量:設(shè)置-add-環(huán)境變量信息填寫
添加全局變量:設(shè)置-Global-全局變量信息填寫
我們可以環(huán)境中設(shè)置多個變量,以供在請求中使用。
環(huán)境變量使用方法: 選擇環(huán)境,在請求URL或者請求Body里使用{undefined{變量名}}來使用環(huán)境變量,變量可以在請求Body的各種格式中使用,但不能直接在請求前腳本(Pre-request Script)和請求后腳本(Tests)中使用。
Params:
當(dāng)請求URL中參數(shù)很多時,不方便進(jìn)行添加和查看,可以點擊URL輸入框下的Params按鈕,以表格的方式添加變量及值,從表格添加后,變量和值會自動添加到URL中。
7、請求設(shè)計
授權(quán):如果接口需要授權(quán),可以在該頁面設(shè)置授權(quán)方式(type)和授權(quán)信息
Header:請求頭,可以設(shè)置請求類型(Content-Type)和Cookie
Body:請求數(shù)據(jù)
form-data:混合表單,支持上傳文件 ;x-www-form-urlencoded:文本表單;raw:原始格式,支持JSON/XML格式(后面可選擇) ;binary:二進(jìn)制格式,用于發(fā)送二進(jìn)制數(shù)據(jù)流
Pre-request Script:請求前腳本,Javascript語法,用于在發(fā)送請求前生成一些動態(tài)數(shù)據(jù)或做一些處理
Tests:請求后腳本,Javascript語法,用于請求返回后做一些處理或斷言結(jié)果
7.1 Postman發(fā)送各種格式請求數(shù)據(jù)的請求方法(注意:選擇不同的請求可是,會自動在Header中添加Content-Type信息 ):
form-data:混合表單,支持上傳文件 ;
x-www-form-urlencoded:文本表單;
raw:原始格式,支持JSON/XML格式(后面可選擇) ;
binary:二進(jìn)制格式,用于發(fā)送二進(jìn)制數(shù)據(jù)流
form-data混合表單格式傳參示例(上傳文件-選擇file類型,傳文本選擇text類型):
x-www-form-urlencoded(文本表單)傳參示例:
raw:原始格式,支持json和xml格式傳參示例:
7.2 tests斷言示例
二、postman接口測試實例
1、發(fā)送一個get請求的方法:
選擇get請求方式,輸入要請求的url,傳參方式以json為例,選擇raw再選擇JSON,然后將參數(shù)填入請求參數(shù)區(qū),點擊send發(fā)送請求,在響應(yīng)區(qū)即可看到返回結(jié)果。如下
2、發(fā)送一個post請求實例:
選擇post請求方式,輸入要請求的url,傳參方式以混合表單為例,選擇form-data,然后將參數(shù)名稱和對應(yīng)的值填入?yún)?shù)區(qū),點擊send發(fā)送請求,在響應(yīng)區(qū)即可看到返回結(jié)果。如下
3、使用postman批量發(fā)送請求
Runner:批量執(zhí)行測試集
支持設(shè)置迭代次數(shù)
支持加載csv或json、txt類格式測試數(shù)據(jù)
使用實例:
①新建一個Collection,比如課堂練習(xí),新建請求(add requests)如登錄,選擇POST方法,填入URL,請求數(shù)據(jù),URL的host使用配置的環(huán)境變量,請求數(shù)據(jù)使用變量做參數(shù)化,本地新建參數(shù)化文件備用
②設(shè)置斷言
③Runner配置
1、點擊Runner,進(jìn)入測試集批量執(zhí)行設(shè)置頁面
2、選擇測試集下,要批量執(zhí)行的請求,然后選擇本地參數(shù)化的txt文件login.txt,數(shù)據(jù)文件類型選擇text/csv,迭代次數(shù)iteration參數(shù)化數(shù)據(jù)多少個就填多少
3、點擊preview,可以預(yù)覽本地參數(shù)化數(shù)據(jù)
④以上配置完后,點擊Run XXX按鈕,即可批量執(zhí)行用例,得到測試結(jié)果,如圖
希望本文對你有所幫助~~如果對軟件測試、接口測試、自動化測試、面試經(jīng)驗交流感興趣可以私聊我或關(guān)注公眾號“特斯汀軟件測試”。免費領(lǐng)取最新軟件測試大廠面試資料和Python自動化、接口、框架搭建學(xué)習(xí)資料!技術(shù)大牛解惑答疑,同行一起交流。