使用Python的requests庫進行介面測試——session物件的妙用
阿新 • • 發佈:2019-02-03
在進行介面測試的時候,我們會呼叫多個介面發出多個請求,在這些請求中有時候需要保持一些共用的資料,例如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