1. 程式人生 > >介面測試 requests中Cookie和會話物件session處理

介面測試 requests中Cookie和會話物件session處理

要知道為什麼會有cookie和session,需要先理解http的特點:http協議是無狀態的協議。因此,cookie和session存在的作用是進行狀態管理

Cookie和Session的簡單理解

我從哪裡來,我在哪裡,我到哪裡去

  • Cookie是由服務端生成,儲存在響應頭中,返回給客戶端,客戶端會將cookie儲存下來

  • Session是由服務端生成,儲存在伺服器端的記憶體、快取、資料庫等地方

  • 在客戶端傳送請求時,user-agent會自動獲取本地儲存的cookie,將cookie資訊儲存在請求頭中,傳送給服務端

  • 請求都是由客戶端發起的,當服務端生成了session,客戶端怎麼會知道呢?客戶端怎麼能對上這個session暗號?


    1)、在客戶端給服務端傳送請求後,服務端會根據請求資訊生成session,同時生成一個session_id,通過cookie返回給客戶端;


    2)、客戶端再次向服務端傳送請求時,會通過cookie將這個session_id傳送給服務端,這樣就對上了session的暗號。

  • cookie可以作為管理session的一種方式,當cookie被禁用時,可以通過表單或重寫url傳送session_id

requests實現cookie操作

  • cookie包含在響應中,要獲取響應中的cookie資訊,可以用r.cookies.get_dict()獲取到響應的cookies資訊,並傳遞給後續請求。

  • 找一個不會被進行驗證的網站進行練習,從輸出資訊中,可以看到,第2個請求使用了第一個請求響應頭中的cookies資訊,保持了連線


    cookies.png

  • 在已知cookie資訊時,需要構造成對應的cookie物件傳遞給請求時,可以採用Cookie 的返回物件為RequestsCookieJar或者採用字典構造。

  • RequestsCookieJar構造cookies是已知登入響應返回的cookies資訊,通過建立物件,設定對應的值進行構造傳遞。


    RequestsCookieJar.png

  • 採用字典構造cookies資訊,將構造方式更改為:

# 構造cookies

cookies = dict(zentaosid = '5qm86pvshjm3s8u729cmc0mb15')

會話物件session

會話物件讓你能夠跨請求保持某些引數。它也會在同一個 Session 例項發出的所有請求之間保持 cookie。所以如果你向同一主機發送多個請求,底層的 TCP 連線將會被重用,從而帶來顯著的效能提升。

  • session會自動管理cookie,一個session物件會保持同一個會話中的所有請求之間的cookie資訊。


session.png

總結

  • 會話物件session比cookies更方便管理請求的cookie資訊

  • 伺服器返回的cookie資訊通常在響應頭中

  • 如果需要將響應體中的部分資訊傳遞給後續請求的cookie,可以構造cookie資訊並傳遞