引言
在使用Python進行接口自動化測試時,實現接口請求構建主要是使用Requests模塊。Requests庫是python的第三方模塊,requests模塊在python內置模塊的基礎上進行了高度的封裝,從而使得python進行網絡請求時,變得更加簡潔和人性化,以下介紹python Requests模塊的主要操作和應用。
一、模塊說明
Requests模塊是第三方模塊,需要預先安裝,requests模塊在python內置模塊的基礎上進行了高度的封裝,從而使得python進行網絡請求時,變得更加簡潔和人性化。它幾乎完全用python編寫,比urllib2模塊更易方便構建請求。Requests模塊支持HTTP連接保持和連接池,支持使用cookie保持會話,支持文件上傳,支持自動響應內容的編碼,支持國際化的URL和POST數據自動編碼等功能特性。具體的功能特性介紹,可以學習requests中文文檔,傳送門:https://2.python-requests.org/zh_CN/latest/index.html,requests模塊同時支持python2和python3相關的版本。中文在線文檔總結的模塊特性:
安裝requests模塊:
要安裝 Requests,打開cmd,直接pip安裝,或pycharm中搜索requests 安裝即可
1.Pip安裝:pip install requests
2.Pycharm 中搜索 requests 安裝
二、Requests模塊快速入門
開始導入requests模塊,然後即可使用該模塊下所有高度封裝的方法或者類。
1 發送簡單的請求
使用requests發送網絡請求,如訪問百度,我們只需按如下方式發送請求即可。
可以這樣:
r = requests.get("https://www.baidu.com/")
也可以這樣:
url = 'https://www.baidu.com/'
r = requests.get(url=url)
其他的請求方式大體都是這樣:
2 發送帶參數的請求
我們在構建url發送請求時往往會傳遞一些數據,這些數據往往會以鍵/值對的接在url中,接在一個問號後面,編輯如下代碼如請求百度服務器地址,查詢:requests,那這個請求的url就像這樣:
import requests
url = 'https://www.baidu.com/'
data = {'wd':'requests'}
r = requests.get(url=url,params=data)
print(r.url)
打印出請求的url,r.url是獲取發送請求的url:
https://www.baidu.com/?wd=requests
一般發送get請求是將需要傳遞的參數傳遞到params中即可,上面實例params傳遞的是字典類型數據,當然也可以將一個列表作爲值傳入:
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.url)
輸出url:
http://httpbin.org/get?key1=value1&key2=value2&key2=value3
3 定製header頭和cookie
在發送請求時,往往需要爲請求添加http請求頭,requests庫也可以簡單構建傳遞請求頭,只要一個dict傳遞給請求的headers參數即可:
headers = {
"Accept": "application/json, text/plain, */*",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}
r = requests.get(url=url,params=data,headers=headers)
有時有些請求需要攜帶cookie信息,在發送請求時也只要傳遞給請求的cookie參數即可:
4 響應內容
使用requests方法後,會返回一個response對象,其存儲了服務器響應的內容。在發送請求後,有時我們需要獲取發送請求的目標服務的返回信息,如返回狀態碼、返回數據體等,以及以什麼樣的解碼方式返回數據。如下是response對象封裝的方法:
5 發送post請求
HTTP 協議規定 POST 提交的數據必須放在消息主體(entity-body)中,但協議並沒有規定數據必須使用什麼編碼方式,服務端通過是根據請求頭中的Content-Type字段來獲知請求中的消息主體是用何種方式進行編碼,再對消息主體進行解析。一般常用的提交數據方式包括:
1)以form表單提交數據
請求頭中的Content-Type值爲:application/x-www-form-urlencoded,Reqeusts支持以form表單形式發送post請求,只需要將請求的參數構造成一個字典,然後傳給requests.post()的data參數即可。
實例:
2)以json形式發送post請求
請求頭中的Content-Type值爲:application/json,Reqeusts支持以json串形式發送post請求,只需要將一個python字典類型的數據轉換成json格式,然後傳給requests.post()的data參數即可。
實例:
3)以multipart/form-data形式上傳文件
經常用到的是上傳文件用的表單,請求頭中的Content-Type值爲:multipart/form-data,Requests支持以multipart形式發送post請求,只需將一文件傳給requests.post()的files參數即可。
實例:
6 超時和代理
Requests也支持方便構建請求超時和代理設置,只需分別將請求數據傳遞給timeout和proxies即可,代碼實例:
三、Requests實際應用
1. 網頁數據爬蟲,Requests能方便的構建和發送基於HTTP協議的網絡請求,因此可以基於Requests來編寫爬蟲腳本,爬取互聯網上目標網站的網頁,提取網頁源代碼中的圖片、文本、視頻等數據,並可以將爬取的海量大數據應用於數據分析
2. 在軟件測試項目中,可以用來構建接口測試,完成不同接口測試腳本和執行。