剛接觸接口測試的同學(xué)會很困惑,不是叫接口測試嗎怎么又叫Web API呢,很多人對Web接口測試這一方面概念非常的模糊好多名詞搞混淆了,我們第一件事就是要搞清楚一些名詞的概念,省的交流的時候產(chǎn)生很多困惑。
很多同學(xué)聽過下面這些術(shù)語,比如:
紛亂的術(shù)語
- 接口
- Web服務(wù)(Web Service)
- API
- Web API
- REST API
- SOAP
凡是接觸到接口測試這一塊的大家會把這些名詞的概念經(jīng)常的搞混,我們今天有必要把這些名詞給大家梳理一下,不然在以后接口測試的時候他說一個名詞你說一個名詞的互相交流起來對名詞理解上有障礙
什么是接口測試
要理解什么是接口測試,首先我們需要理解什么是“接口”,接口的英文是“interface”,接口是某個對象和外界交互的部分,拿應(yīng)用程序來說,它可能有很多接口。比如一個軟件產(chǎn)品,可能有如下幾種和外界交互的部分:
提供用戶界面給用戶使用
這個用戶界面稱之為用戶接口UI,是應(yīng)用和用戶交互的部分??赡苁菆D形化的界面,叫做圖形用戶接口(英文名成為GUI),也可能是非圖形的命令行接口,這個也是用戶接口UI,可以叫command UI,這些接口測試一般是人手工操作。提供消息交互接口和其他應(yīng)用程序交互
比如diameter,radius(比如電信鑒權(quán)網(wǎng)關(guān)),基于SOAP的Web Service(比如股價查詢服務(wù)器),Rest API(比如阿里云對象存儲服務(wù)OSS API)這些接口的測試一般是開發(fā)測試工具,收發(fā)相應(yīng)的消息。提供編程接口,供開發(fā)者的程序調(diào)用
比如:為了更方便的使用阿里云OSS,他們提供了開發(fā)包,對其OSS接口封裝了編程語言庫。其他
對賬系統(tǒng):他們有的是提供了文件接口,直接把文件放在一個固定的ftp服務(wù)器上給別的系統(tǒng)來取。數(shù)據(jù)服務(wù)產(chǎn)品:比如一些數(shù)據(jù)庫、緩存、消息隊列服務(wù):他們直接提供的對外接口是Socket、共享內(nèi)存、管道等,這些測試,也需要開發(fā)測試工具。
綜上可知:上面的所有和外界交互的部分都是接口,對上述接口的測試都可以稱之為接口測試。其泛義上理解的話,所有的測試都可以稱之為接口測試,UI測試是UI接口;消息測試是測試消息接口;編程庫的開發(fā)包測試是測試編程接口。實際上我們很多人經(jīng)常掛在嘴邊的說的“接口測試”,或者“API”測試,其實是第二種里面Web服務(wù)器提供訪問的接口,簡稱Web服務(wù)接口。
-從接口測試說起
- 應(yīng)用程序可能有很多接口
- 消息交互接口
- diameter,radius -socket tcp(比較底層一點,直接是基于tcp協(xié)議)
基于HTTP目前使用最多的、最主流的就是下面兩種 - 基于SOAP的Web Service - HTTP
- REST API - HTTP
- diameter,radius -socket tcp(比較底層一點,直接是基于tcp協(xié)議)
- 消息交互接口
Web服務(wù)接口
- 互聯(lián)網(wǎng)產(chǎn)品對外提供的服務(wù)接口,我們稱之為:Web服務(wù)接口、Web service接口、Web API,這三個詞是一個概念,所以經(jīng)常說的“接口測試”、“API測試”就是對Web服務(wù)接口的測試,包括APP服務(wù)端接口。所以我們這里說的呢就是基于HTTP的Web API接口,有的人會有疑問既然是Web API,是不是就是網(wǎng)站上的才是Web啊,不一定的只要是基于Web技術(shù)的都可以,比如移動應(yīng)用就是手機(jī)上的應(yīng)用這個接口也可以稱為Web API接口,只要是基于Web的HTTP這種通長也叫作Web API這個大家了解下,注意手機(jī)上不是所有的游戲有一些就不是,大部分都是通過HTTP的Web API。
目前來說Web API接口主要有兩種類型的規(guī)范目前比較多一種是基于SOAP的Web Service另一種是REST 接口。
基于SOPA的Web Service是之前的相對比較老舊的技術(shù),目前已經(jīng)用的越來越少了,大家看到更多的是基于REST API的接口,我們要知道基本上目前的REST類型的接口基本上都是基于HTTP協(xié)議的。
API測試的特點
- 測試方法
- 使用市場上現(xiàn)有的工具軟件
- 使用變成語言進(jìn)行開發(fā)
- Web API測試和Web UI測試的區(qū)別
UI測試他通常是人直接操作這個軟件系統(tǒng)就可以了,比如直接操作瀏覽器直接操作手機(jī)啊,不需要額外的工具。但是Web API接口測試是需要工具的,沒有工具是沒有辦法發(fā)送消息的。
有一個問題,我們拿到一個產(chǎn)品比如一個網(wǎng)站,網(wǎng)站有客戶端(手機(jī))和瀏覽器,可以通過手機(jī)對這個系統(tǒng)進(jìn)行操作也可以通過瀏覽器,那我們做測試的時候要做哪些測試呢,UI測試肯定要做的,還一個問題手機(jī)和瀏覽器作為客戶端和系統(tǒng)的服務(wù)器之間他們之間的接口就是我們所說的Web API接口,那這個接口我們要不要對他就行測試呢,對于我們測試人員來說需不需要對這個接口進(jìn)行測試,有一個原則可以確定,這個接口是不是暴露給外部系統(tǒng)的,是不是外部接口,如果是外部接口就需要測試,內(nèi)部就不需要。假如這個接口不是暴露給外部的他就是一個純的內(nèi)部接口公司的總監(jiān)讓你測試,照理說你是沒有義務(wù)去測試內(nèi)部接口,如果你測就相當(dāng)于幫開發(fā)人員測,幫他去做接口的聯(lián)調(diào)了,舉個簡單的例子你就發(fā)現(xiàn)測試內(nèi)部接口會有什么問題:比如我們舉個簡單的用戶注冊的用例,用戶注冊要輸入用戶名,輸入用戶名系統(tǒng)明文規(guī)定了輸入用戶名的長度最長不許超過20個字符,你繞過前端對接口進(jìn)行測試,輸入21個字符的用戶名進(jìn)行注冊,服務(wù)端沒有進(jìn)行檢查注冊成功了,我們就要報bug了,開發(fā)人員就來懟你了,你這個bug就不應(yīng)該提因為我們前端人員進(jìn)行了限制,你只要在手機(jī)里輸入在瀏覽器里輸入前端就會限制掉,你為什么直接繞過前端進(jìn)行測試?這樣就不好了。
HTTP協(xié)議簡介
雖然REST和SOAP Web Service 并沒有一定說接口消息用HTTP協(xié)議傳輸,但實際上,幾乎所有號稱RESTful的系統(tǒng)和SOPA Web Service 都是基于HTTP的,所以,要進(jìn)行Web接口測試首先大家了解HTTP協(xié)議。
是什么?有什么用
Http全稱Hypertext Transfer Protocol超文本傳輸協(xié)議。最初發(fā)明它是用來在瀏覽器和web服務(wù)器之間傳輸超文本信息的,泛義上屬于應(yīng)用層的協(xié)議。由于現(xiàn)在傳輸層和網(wǎng)際層基本都是TCP、IP協(xié)議,所以其示意圖可以如下:

由于HTTP協(xié)議清晰明了,應(yīng)用范圍非常廣泛,很多其他應(yīng)用(比如移動應(yīng)用)都會使用它作為底層的傳輸協(xié)議。HTTP有很多版本:0.9,1.0,1.1,2。目前使用最廣泛的是HTTP/1.1版本。新學(xué)習(xí)web的人經(jīng)?;煜膬蓚€名詞就是HTTP和HTML,都是H開頭的,但是兩個概念完全不同。HTML是一種用來定義網(wǎng)頁的文本語言,會HTML就可以編寫網(wǎng)頁;HTTP是在網(wǎng)絡(luò)上傳輸信息(當(dāng)然也包括HTML)的協(xié)議,通常用于瀏覽器和服務(wù)器通信。
舉個例子,我們到京東買手機(jī),手機(jī)需要包裝到快遞紙盒中,然后一路送到我們手里。手機(jī)實際的內(nèi)容相當(dāng)于HTML。包裝且運輸?shù)姆椒ㄏ喈?dāng)于HTTP。web瀏覽器和web服務(wù)器之間是通過HTTP協(xié)議進(jìn)行交互的,而瀏覽器和服務(wù)器之間的交互,都是通過N次和HTTP事務(wù)(transaction)進(jìn)行的。一次HTTP事務(wù)包括瀏覽器發(fā)出的http請求(request)和服務(wù)器回應(yīng)的http響應(yīng)(response)組成。
HTTP請求格式
http通長是一種事務(wù)型協(xié)議,所謂事務(wù)型的協(xié)議就是有請求有響應(yīng),就是一個請求對應(yīng)一個響應(yīng),請求是由客戶端發(fā)起HTTP請求給服務(wù)端的,服務(wù)端返回一個HTTP響應(yīng),通常這個稱之為一次HTTP的事務(wù)。
首先我們來看請求消息

首先第一行內(nèi)容,術(shù)語成為請求行,請求行里面主要包含什么信息呢?表示這次要做操作什么資源,比如GET請求是用來獲取信息的,表示從/images目錄下請求logo.gif這個文件,協(xié)議版本是HTTP/1.1
比如我們看一個具體的百度上面,注意瀏覽器去訪問一個服務(wù)的時候按F12就可以打一個開發(fā)者工具欄的一個東西,然后點擊Network,就會把我們訪問網(wǎng)站所搜發(fā)的信息都可以存儲下來,比如我們點擊百度,界面如下


其中紅色框子中的每一行對應(yīng)一次http的transaction,包括請求和響應(yīng)。我們點擊其中第一條記錄,看看其中的內(nèi)容,注意,我們要點擊右邊窗口的headers標(biāo)簽,看到的內(nèi)容如下:

大家注意web瀏覽器和服務(wù)器之間是通過HTTP協(xié)議進(jìn)行交互的。而瀏覽器和服務(wù)器之間的交互,都是通過N次HTTP事務(wù)(transaction)進(jìn)行的,一次HTTP事務(wù)包括瀏覽器發(fā)出的http請求(request)和服務(wù)器回應(yīng)的http響應(yīng)(response)組成。比如我們上圖中General部分顯示的就是這次HTTP事務(wù)的大概信息:瀏覽器發(fā)出http請求,請求的URL是https://www.baidu.com/,表示瀏覽器告訴服務(wù)器,我們想獲取這個url對應(yīng)的網(wǎng)絡(luò)資源的信息,而服務(wù)器,執(zhí)行web服務(wù)器代碼發(fā)現(xiàn)這個url對應(yīng)的是個html的網(wǎng)頁內(nèi)容,于是就將其內(nèi)容在http響應(yīng)中返回給瀏覽器。200 OK表示響應(yīng)成功。我們可以在Request標(biāo)簽中看到html的內(nèi)容。如果我們想查看具體的http請求和響應(yīng)的信息,可以點擊Request Headers和Response Headers邊上的“view source”看到的內(nèi)容如下


請求行有請求的urlRequest URL: https://www.baidu.com/,有請求的方法Request Method: GET這些都是在請求行里面的
下面這部分就是請求頭

這兩行是一個http請求,是一個獲取信息的請求
GET
一個POST請求消息例子如下(注意請求頭和消息體之間的空行)

他的請求是
POST,POST請求通常是傳遞消息的,他不是要獲取消息而是要提交信息給服務(wù)端,通常http請求除了請求行里面的第一行的信息還有請求頭,就是下面的這些信息
請求頭也包含了請求所帶的一些信息比如我這個請求要訪問的目標(biāo)網(wǎng)站的地址foo.com,請求頭里面還可以包含很多其他類型的請求頭比如Content-Type:請求頭是提供請求一些額外的信息,比如請求消息體有多少個字節(jié)這些
-消息體
請求行和請求頭是必須有的,空行和消息體可能有也可能沒有。假如請求有消息體的話,請求頭和消息體之間會有一個空行,沒有消息體就不用了。
請求行
請求行在第一行,包含:
- 請求的方法
請求的方法常見的有GET、POST、PUT、DELETE、HEAD等
GET:請求獲取Request-URI所標(biāo)識的資源
POST:在Request-URL所標(biāo)識的資源后附加新的數(shù)據(jù)
PUT:請求服務(wù)器存儲一個資源,并用Request-URI作為其標(biāo)識(修改)
DELETE:請求服務(wù)器刪除Request-URI所標(biāo)識的資源
HEAD:請求獲取由Request-URI所標(biāo)識的資源的響應(yīng)消息報頭 - 請求的URL(除去主機(jī)名部分)
這個例子中表示我們要訪問的資源是/index.html - http 協(xié)議版本
這個例子中表示我們使用的HTTP/1.1
請求頭字段
http的請求頭用來表示請求的其他信息。比如Host表示請求發(fā)往的目標(biāo)機(jī)器主機(jī)名或者IP地址。還有Content-Length表示請求消息體的長度。http還有很多其他的請求頭字段,我們后面會相應(yīng)的講解他們的含義。像這種Content-Length、Content-Type都是http協(xié)議標(biāo)準(zhǔn)里面提供的一些請求頭,更多的協(xié)議標(biāo)準(zhǔn)協(xié)議頭https://tools.ietf.org/html/rfc4229
除了這些標(biāo)準(zhǔn)的請求頭之外我們還可以自定義頭,有興趣的可以自己了解下
請求消息體
很多時候,http請求是需要請求消息體的,尤其是POST、PUT等請求,請求消息體中保存了要提交給后臺的數(shù)據(jù)信息。比如我們要上傳一個文件。使用POST方法的HTTP請求發(fā)送文件數(shù)據(jù)。這些文件內(nèi)容數(shù)據(jù)就在請求的消息體中。消息體存放資源信息的。
通常GET請求是沒有消息體的,因為它是用來獲取數(shù)據(jù)的,獲取數(shù)據(jù)他請求本身不需要帶數(shù)據(jù)。所以他沒有消息體。除了POST請求其他請求也可以帶PUT、DELETE、也可以帶消息體,比如PUT修改一些信息,修改的信息修改新的信息是什么呢?比如修改用戶名那新的用戶名是什么呢,通常也可以放在消息體里面。
再比如說用POST上傳一個文件,那可能HTTP消息體里面這個消息體是什么?就是你上傳文件的內(nèi)容了,消息體里面是存放資源信息的。。
請求的消息體有的時候有各種格式,大家記住Content-Type字段,后面的筆記我們會詳細(xì)講解,Content-Type就定義了請求消息體里面的數(shù)據(jù)的格式,我們常見的格式
比如大家看到的www-form-urlencoded格式

還有大家熟悉的XML、Json
HTTP響應(yīng)
HTTP的響應(yīng)消息包含如下內(nèi)容
- 狀態(tài)行
- 響應(yīng)頭
- 空行
- 消息體
狀態(tài)行和響應(yīng)頭是必須要有的。空行和消息體可能有也可能沒有。
HTTP響應(yīng)消息的一個例子如下

這個例子包含里面包含狀態(tài)行和幾個響應(yīng)頭,一個空行和相應(yīng)的消息體(消息體是一個html文檔)
狀態(tài)行:
狀態(tài)行在第一行,包含協(xié)議版本狀態(tài)碼和描述狀態(tài)的短語,比如
HTTP/1.1 200 OK
表示客戶端的請求成功響應(yīng);
狀態(tài)碼的第一個數(shù)字代表當(dāng)前響應(yīng)的類型:
- 1XX 消息——請求已被服務(wù)器接收,繼續(xù)處理
- 2XX 成功——請求已被服務(wù)器接收、理解、并接受
- 3XX 重定向——需要后續(xù)操作才能完成這一請求
- 4XX請求錯誤——請求含有詞法錯誤或者無法被執(zhí)行
- 5XX服務(wù)器錯誤——服務(wù)器在處理某個正確請求是發(fā)生錯誤
響應(yīng)頭字段
http的響應(yīng)頭用來表示響應(yīng)的其他信息,比如Date表示響應(yīng)消息發(fā)送的日期時間,還有Dcontent-Length表示請求消息體的長度,Content-Type響應(yīng)消息的格式,我們例子里面是html,響應(yīng)的消息體就是html格式,http還有很多其他的響應(yīng)頭字段,我們后面會相應(yīng)的講解他們的含義
響應(yīng)消息體
很多時間http響應(yīng)是需要消息體的,比如請求一個網(wǎng)頁的內(nèi)容,那么我們網(wǎng)頁的html內(nèi)容就在響應(yīng)的消息體中給出。再比如,一個REST API請求一個產(chǎn)品的價格信息,那么價格信息通常也是在HTTP響應(yīng)消息的消息體中給出。