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