一龄砰、接口測(cè)試簡(jiǎn)介
1.1 接口的定義及分類
??接口測(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)間的相互邏輯依賴關(guān)系等
接口分類 | 說(shuō)明 |
---|---|
系統(tǒng)內(nèi)部接口 | 模塊間的相互調(diào)用(灰盒測(cè)試) |
系統(tǒng)外部接口 | 1. 軟件接口: ? 服務(wù)器接口 ??瀏覽器與服務(wù)器的接口桃煎,通過(guò)http協(xié)議來(lái)實(shí)現(xiàn)瀏覽器和服務(wù)器間的數(shù)據(jù)傳遞 ? 外部接口 ??常見(jiàn)的典型例子就是第三方登錄篮幢、第三方支付等,通過(guò)調(diào)用第三方接口并返回當(dāng)前系統(tǒng) 2. 硬件接口 |
目前比較流行的接口測(cè)試是軟件接口測(cè)試
1.2 接口測(cè)試
- 接口測(cè)試屬于黑盒測(cè)試
接口測(cè)試 | 說(shuō)明 |
---|---|
原理 | 通過(guò)測(cè)試程序模擬客戶端向服務(wù)器發(fā)送請(qǐng)求为迈,服務(wù)器收到請(qǐng)求后做出相應(yīng)的處理并將響應(yīng)信息發(fā)送給客戶端三椿,客戶端接收響應(yīng)數(shù)據(jù)的過(guò)程 |
本質(zhì) | 本質(zhì)是基于某種協(xié)議,發(fā)送一個(gè)Request請(qǐng)求給服務(wù)器曲尸,然后服務(wù)器返回一個(gè)Response響應(yīng)數(shù)據(jù)赋续,然后對(duì)響應(yīng)數(shù)據(jù)進(jìn)行分析,判斷是否與我們的預(yù)期是否一致另患,從而驗(yàn)證功能是否正確纽乱,這就是接口測(cè)試 |
1.2.1 網(wǎng)站架構(gòu)的設(shè)計(jì)風(fēng)格
??隨著互聯(lián)網(wǎng)的不斷發(fā)展,網(wǎng)站設(shè)計(jì)風(fēng)格逐漸統(tǒng)一于RESTFUL架構(gòu)風(fēng)格,HTTP就是該風(fēng)格的典型應(yīng)用
REST(表現(xiàn)層狀態(tài)轉(zhuǎn)化)最大特點(diǎn):
- ? 資源
??網(wǎng)絡(luò)上的一個(gè)實(shí)體或者說(shuō)是網(wǎng)絡(luò)上的一個(gè)信息宰睡,它可以是一段文本吨些、一張圖片、一種服務(wù)等
??資源總是通過(guò)某種載體反應(yīng)其內(nèi)容薯嗤,文本可以用txt格式表現(xiàn),也可以用HTML格式纤泵、XML格式骆姐、二進(jìn)制格式等
??JSON是現(xiàn)在最常用的資源表示格式 - ? 統(tǒng)一接口(地址)
??RESTFUL風(fēng)格規(guī)定,數(shù)據(jù)的元操作捏题,即CRUD(create玻褪、read、update公荧、delete)即數(shù)據(jù)的增刪改查操作带射,分別對(duì)應(yīng)于HTTP方法,就統(tǒng)一了數(shù)據(jù)操作的接口
HTTP方法 | 類似于 | 說(shuō)明 |
---|---|---|
GET | SELECT | 用來(lái)獲取資源(一項(xiàng)或多項(xiàng)) |
POST | UPDATE | 用來(lái)新建資源循狰,也可以用來(lái)更新資源 |
PUT | CREATE | 用來(lái)更新資源 |
DELETE | DELETE | 用來(lái)刪除資源 |
- ? URI
統(tǒng)一資源標(biāo)識(shí)符窟社,URL是URI的子集
??可以用一個(gè)URI指向資源券勺,即每一個(gè)URI都對(duì)應(yīng)一個(gè)特定的資源;要想獲取這個(gè)資源灿里,訪問(wèn)它的URI就可以 - ? 無(wú)狀態(tài)
??所有的資源都可以通過(guò)URI定位关炼,而且這個(gè)定位與其他資源無(wú)關(guān),也不會(huì)因?yàn)槠渌Y源的變化而改變
綜上所述:
- 在RESTFUL中一切都認(rèn)為是資源钠四,每個(gè)資源都有對(duì)應(yīng)的URI標(biāo)識(shí)
- 客戶端通過(guò)GET盗扒、POST、PUT缀去、DELETE等http方法對(duì)資源進(jìn)行操縱侣灶,即客戶端通過(guò)http協(xié)議與服務(wù)器通信,并獲取資源信息
二缕碎、HTTP協(xié)議
超文本傳輸協(xié)議
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議
HTTP特點(diǎn) | 說(shuō)明 |
---|---|
支持C/S的模式 | |
簡(jiǎn)單快速 | 客戶向服務(wù)器請(qǐng)求服務(wù)時(shí)褥影,只需傳送請(qǐng)求方法和路徑 請(qǐng)求方法常用的有GET、HEAD咏雌、POST 每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同 由于HTTP協(xié)議簡(jiǎn)單凡怎,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快 |
靈活 | HTTP允許傳輸任意類型的數(shù)據(jù)對(duì)象 正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記 |
無(wú)連接 | 無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求 服務(wù)器處理完客戶的請(qǐng)求赊抖,并收到客戶的應(yīng)答后统倒,即斷開(kāi)連接。采用這種方式可以節(jié)省傳輸時(shí)間 |
無(wú)狀態(tài) | HTTP協(xié)議是無(wú)狀態(tài)協(xié)議 無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力 缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息氛雪,則它必須重傳房匆,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面报亩,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快 |
2.1 URL
格式:http://host[:port][abc_path]
2.2 請(qǐng)求與響應(yīng)
HTTP消息由客戶端到服務(wù)器的請(qǐng)求和服務(wù)器到客戶端的響應(yīng)組成
請(qǐng)求消息和響應(yīng)消息都是由
- 開(kāi)始行
對(duì)于請(qǐng)求消息——請(qǐng)求行浴鸿,對(duì)于響應(yīng)消息——狀態(tài)行 - 消息報(bào)頭(可選)
也稱請(qǐng)求頭
對(duì)于請(qǐng)求消息——請(qǐng)求報(bào)頭,對(duì)于響應(yīng)消息——響應(yīng)報(bào)頭 - 消息正文(可選)
也稱請(qǐng)求實(shí)體或響應(yīng)實(shí)體
對(duì)于請(qǐng)求消息——請(qǐng)求正文弦追,對(duì)于響應(yīng)消息——響應(yīng)正文 - 空行(只有CRLF的行)
2.2.1 消息內(nèi)容說(shuō)明
名稱 | 說(shuō)明 |
---|---|
請(qǐng)求消息 請(qǐng)求行 |
1. 請(qǐng)求方法 2. 請(qǐng)求地址 3. 協(xié)議/協(xié)議版本CRLF eg: GET https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False HTTP/1.1
|
響應(yīng)消息 狀態(tài)行 |
1. 協(xié)議/協(xié)議版本 2. 狀態(tài)碼 3. 狀態(tài)原因 eg: HTTP/1.1 200 OK
|
消息報(bào)頭 | 每一個(gè)報(bào)頭域都是由【名字+:+空格+值】組成岳链,消息報(bào)頭域的名字是大小寫(xiě)無(wú)關(guān)的 |
響應(yīng)消息 請(qǐng)求正文 |
服務(wù)器返回的資源的內(nèi)容 |
- 請(qǐng)求正文與消息報(bào)頭由空行隔開(kāi)
- 響應(yīng)正文與消息報(bào)頭由空行隔開(kāi)
- GET沒(méi)有請(qǐng)求正文信息
提示:
- CRLF 回車(chē)換行(\r\n)
參閱:
2.2.2 響應(yīng)消息狀態(tài)代碼
三位數(shù)字組成掸哑,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取
響應(yīng)的狀態(tài)碼類型 | 說(shuō)明 |
---|---|
1xx | 指示信息–表示請(qǐng)求已接收零远,繼續(xù)處理 |
2xx | 成功苗分,表示請(qǐng)求已被成功接收、理解遍烦、接受 |
3xx | 重定向俭嘁,要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作 |
4xx | 客戶端錯(cuò)誤–請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn) |
5xx | 服務(wù)器端錯(cuò)誤–服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求 |
常見(jiàn)狀態(tài)代碼 | 狀態(tài)描述 | 說(shuō)明 |
---|---|---|
200 | OK |
客戶端請(qǐng)求成功 |
400 | Bad Request |
客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤躺枕,不能被服務(wù)器所理解 |
401 | Unauthorized |
請(qǐng)求未經(jīng)授權(quán)服猪,這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用 |
403 | Forbidden |
服務(wù)器收到請(qǐng)求供填,但是拒絕提供服務(wù) |
404 | Not Found |
請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL |
500 | Internal Server Error |
服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤 |
503 | Server Unavailable |
服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求罢猪,一段時(shí)間后可能恢復(fù)正常 |
eg:
HTTP/1.1 200 OK (CRLF)
2.2.3 消息報(bào)頭
HTTP消息報(bào)頭包括普通報(bào)頭近她、請(qǐng)求報(bào)頭、響應(yīng)報(bào)頭膳帕、實(shí)體報(bào)頭
三粘捎、開(kāi)展接口測(cè)試
3.1 獲取接口文檔
跟開(kāi)發(fā)要接口文檔
eg:
應(yīng)包括異常處理數(shù)據(jù)
提示:
3.2 構(gòu)造測(cè)試數(shù)據(jù),編寫(xiě)測(cè)試用例
- 編號(hào)
- 測(cè)試標(biāo)題
- 輸入
- 與其輸出
3.3 正式開(kāi)展測(cè)試
- 安裝第三方庫(kù)
pip3 install requests
- 演示代碼
- 構(gòu)造接口地址
- 構(gòu)造請(qǐng)求參數(shù)
- 發(fā)送get/post請(qǐng)求
- 獲取響應(yīng)數(shù)據(jù)
# 導(dǎo)包
import requests
from jsonpath_rw import jsonpath, parse
if __name__ == '__main__':
# 構(gòu)造接口地址
qgtq_url = "http://v.juhe.cn/weather/index"
# 構(gòu)造請(qǐng)求參數(shù)
para1 = {"cityname": "蘇州", "key": "6156dedaef9f2"}
# 發(fā)送get請(qǐng)求
r = requests.get(qgtq_url, para1)
print("狀態(tài)碼:", r.status_code)
# 獲取響應(yīng)數(shù)據(jù)(該接口中默認(rèn)JSON)
res = r.json()
print(res, "\n")
# 利用jsonpath_rw處理JSON數(shù)據(jù)危彩,獲取其中的today的數(shù)據(jù)
jsonpath_expr = parse('result[*].today[*]')
mes = [match.value for match in jsonpath_expr.find(res)][0]
for i in mes.items():
print(i[0], ":", i[1])
# print("\n", res["result"])
# print("\n", res["result"]["today"])
# print("\n", res["result"]["today"]["weather"])
3.4 實(shí)戰(zhàn)
3.4.1 配置WebTours網(wǎng)站
平臺(tái) | 下載地址 |
---|---|
官網(wǎng) |
https://marketplace.microfocus.com/appdelivery/content/web-tours-sample-application |
Strawberry Perl | 1. http://strawberryperl.com/releases.html 2. https://www.lanzous.com/i62w99i 云
|
WebTours |
https://www.lanzous.com/i62wehg云
|
參閱:
3.4.2 WebTours
有屬于參數(shù)關(guān)聯(lián)的接口
- 導(dǎo)包
- 構(gòu)造接口地址
- 構(gòu)造請(qǐng)求參數(shù)
- 發(fā)送接口請(qǐng)求
s = requests.session()
s.請(qǐng)求方法(url,params)
- 使用正則表達(dá)式匹配接口響應(yīng)數(shù)據(jù)的內(nèi)容
re.findall()
- 構(gòu)造接口地址
- 構(gòu)造請(qǐng)求參數(shù)
- 發(fā)送接口請(qǐng)求
s.請(qǐng)求方法(url,params)
- 打印結(jié)果
更新中......