1. 程式人生 > >使用Python的requests庫進行介面測試——session物件的妙用

使用Python的requests庫進行介面測試——session物件的妙用

在進行介面測試的時候,我們會呼叫多個介面發出多個請求,在這些請求中有時候需要保持一些共用的資料,例如cookies資訊。

妙用1

requests庫的session物件能夠幫我們跨請求保持某些引數,也會在同一個session例項發出的所有請求之間保持cookies。

舉個栗子,跨請求保持cookies,在命令列上輸入下面命令:

# 建立一個session物件
s = requests.Session()
# 用session物件發出get請求,設定cookies
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 用session物件發出另外一個get請求,獲取cookies
r = s.get("http://httpbin.org/cookies")
# 顯示結果
r.text
 '{"cookies": {"sessioncookie": "123456789"}}'

妙用2

requests庫的session物件還能為我們提供請求方法的預設資料,通過設定session物件的屬性來實現。

舉個栗子,設定請求的auth和headers預設的預設引數:

# 建立一個session物件
s = requests.Session()
# 設定session物件的auth屬性,用來作為請求的預設引數
s.auth = ('user', 'pass')
# 設定session的headers屬性,通過update方法,將其餘請求方法中的headers屬性合併起來作為最終的請求方法的headers
s.headers.update({'x-test': 'true'})
# 傳送請求,這裡沒有設定auth會預設使用session物件的auth屬性,這裡的headers屬性會與session物件的headers屬性合併
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
# 檢視傳送請求的請求頭
r.request.headers
得到的請求頭部是這樣的:

{'Authorization': 'Basic dXNlcjpwYXNz', 'x-test': 'false'}

注意1:方法層的引數覆蓋會話的引數,舉個例子:

將上面的請求中加上auth引數:

r = s.get('http://httpbin.org/headers', auth=('user','hah'), headers={'x-test2': 'true'})
獲取該請求的請求頭

{'Authorization': 'Basic dXNlcjpoYWg=', 'x-test': 'false'}

我們發現,請求方法中的Authorization變化了,也就是說方法層的引數覆蓋了session的屬性。

注意2:在request請求中,省略session物件中設定的屬性,只需簡單地在方法層引數中將那個鍵的值設定為 None ,那個鍵就會被自動省略掉。

再舉個例子:

TBD