前面2篇文章已經(jīng)簡(jiǎn)單的介紹接口測(cè)試相關(guān)概念和HTTP協(xié)議基礎(chǔ),本篇文章主要就“使用python實(shí)現(xiàn)接口測(cè)試基礎(chǔ)知識(shí)”進(jìn)行展開(kāi)講解,包括使用requests庫(kù)構(gòu)建相應(yīng)的HTTP請(qǐng)求、傳遞URL參數(shù)健蕊、定制請(qǐng)求頭厦瓢、請(qǐng)求消息體以及獲取響應(yīng)內(nèi)容等。希望感興趣的小伙伴可以堅(jiān)持看下去同時(shí)歡迎提出寶貴的意見(jiàn)讓我們一起進(jìn)步楚里!
01:構(gòu)建相應(yīng)的HTTP請(qǐng)求準(zhǔn)備工作
1)構(gòu)建相應(yīng)的HTTP請(qǐng)求可選擇的庫(kù):本次主要使用requests庫(kù)。
①內(nèi)置的庫(kù):httplib、urllib2
②第三方庫(kù):urllib3眷篇、requests冒萄、pyCurl
2)安裝requests庫(kù):pip install requests
02:構(gòu)建各種HTTP請(qǐng)求方法
1)G E T請(qǐng)求:r=requests.get('http://localhost/xxx/')
2)POST請(qǐng)求:r=requests.post('http://localhost/xxx/')
3)P U T請(qǐng)求:r=requests.put('http://localhost/xxx/')
4)DELETE請(qǐng)求:r=requests.delete('http://localhost/xxx/')
import requests
(1)構(gòu)建GET請(qǐng)求
res=requests.get('http://localhost/api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20')
(2)構(gòu)建POST請(qǐng)求
res = requests.post('http://localhost/api/mgr/sq_mgr/')
(3)構(gòu)建PUT請(qǐng)求
res=requests.put('http://localhost/api/mgr/sq_mgr/')
(4)構(gòu)建DELETE請(qǐng)求
res=requests.delete('http://localhost/api/mgr/sq_mgr/')
03:傳遞URL參數(shù)(params)
1)概述:如果手工構(gòu)建 URL,那么數(shù)據(jù)會(huì)以鍵/值對(duì)的形式置于 URL 中,跟在一個(gè)問(wèn)號(hào)的后面臊岸。
2)關(guān)鍵字:params
接口文檔URL參數(shù)如下:
(1)請(qǐng)求語(yǔ)法:GET /api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20 HTTP/1.1
(2)url請(qǐng)求參數(shù):
action 填寫(xiě)list_course,表明是要列出所有課程信息
pagenum 表示當(dāng)前要顯示的是第幾頁(yè)尊流,目前固定填寫(xiě)1
pagesize 表示一頁(yè)最多顯示多少條課程信息帅戒,目前固定填寫(xiě)20
(3)python代碼實(shí)現(xiàn)傳遞URL參數(shù):
res=requests.get('http://localhost/api/mgr/sq_mgr/',
#傳遞URL請(qǐng)求參數(shù):params
params={
'action': 'list_course',
'pagenum': '1',
'pagesize': '20',
})
pprint.pprint(res.json())
04:定制請(qǐng)求頭(headers)
1)概述:如果為請(qǐng)求添加 HTTP 頭部,只要簡(jiǎn)單地傳遞一個(gè) dict給headers參數(shù)就可以。
2)關(guān)鍵字:headers
接口文檔URL參數(shù)如下:
(1)請(qǐng)求語(yǔ)法:POST/api/mgr/sq_mgr/ HTTP/1.1
(2)請(qǐng) 求 頭:Content-Type: application/x-www-form-urlencoded
(3)python代碼實(shí)現(xiàn)傳遞HTTP請(qǐng)求頭:
res=requests.post('http://localhost/api/mgr/sq_mgr/',
#傳遞HTTP請(qǐng)求頭:headers
headers={
'Content-Type': 'application/x-www-form-urlencoded',
})
05:定制請(qǐng)求消息體(data崖技、json)
1)請(qǐng)求體類(lèi)型為“Content-Type: application/x-www-form-urlencoded”或“xml”
①實(shí)現(xiàn)方式:只需簡(jiǎn)單地傳遞一個(gè)字典給 data 參數(shù)逻住。
②關(guān)鍵字:data
2)請(qǐng)求體類(lèi)型為“Content-Type: application/json”
①實(shí)現(xiàn)方式:只需簡(jiǎn)單地將字典直接傳遞給json參數(shù)钟哥。
②關(guān)鍵字:json
③請(qǐng)注意:如果消息體內(nèi)容是json則傳遞的是一個(gè)數(shù)據(jù)對(duì)象,會(huì)自動(dòng)把數(shù)據(jù)對(duì)象轉(zhuǎn)換為json格式的字符串。
接口文檔請(qǐng)求體內(nèi)容如下:
(1)請(qǐng)求語(yǔ)法:POST /api/mgr/sq_mgr/ HTTP/1.1
(2)請(qǐng)求體類(lèi)型:Content-Type: application/x-www-form-urlencoded
(3)請(qǐng)求體內(nèi)容:
action 必填 填寫(xiě)add_course瞎访,表明是為了創(chuàng)建課程
data 必填 存儲(chǔ)創(chuàng)建課程的信息腻贰,包括名稱(chēng)、描述扒秸、顯示次序播演。為json格式。例如:
{
"name":"python",
"desc":"python基礎(chǔ)課程",
"display_idx":"4"
}
(4)python代碼實(shí)現(xiàn)傳遞HTTP消息體:
res = requests.post('http://localhost/api/mgr/sq_mgr/',
#傳遞HTTP消息體:data
data={
'action':'add_course',
'data':'''
{
"name":"selenium",
"desc":"selenium基礎(chǔ)課程",
"display_idx":"1"
}'''},
#傳遞HTTP消息體:json(直接傳遞)
json = {
"action": "add_course_json",
"data" : {
"name" :"初中政治",
"desc" :"初中政治基礎(chǔ)",
"display_idx" :"2"}
})
06:獲取響應(yīng)內(nèi)容
1)獲取響應(yīng)狀態(tài)碼:res.status_code
2)獲取響應(yīng)消息頭:res.headers
3)獲取響應(yīng)消息頭部分字段:res.headers['Content-Type']
4)獲取JSON響應(yīng)消息體內(nèi)容:res.json()
5)獲取原始響應(yīng)消息體內(nèi)容:res.text