測試進階:實現跨請求地保持登入的神器session你get了麼?

前言

在學習自動化或者是去面試自動化相關崗位時,難免會遇到的一個問題是:如何處理自動化請求中的登入資訊?不論是在學習介面自動化還是出去面試

自動化測試

崗位,測試人員遇到的一個問題都是如何處理登入?

測試進階:實現跨請求地保持登入的神器session你get了麼?

舉例一個很簡單的例子:

在做介面自動化測試的時候,肯定會遇到一種測試場景在進行操作的時候會提示使用者進行登入或者直接返回HTTP狀態碼401(未授權)。

例如:我們在進行電商平臺購物時,要建立訂單前都會提示我們先進行登入。 因為HTTP協議是無狀態的,所以在建立訂單時,伺服器不知道哪個使用者在操作。因此,使用者在建立訂單時必須要先進行登入,登入成功後伺服器會返回一個特定的標識,該標識用於識別使用者並跟蹤使用者 。

常見的身份資訊

在進行自動化過程中一般遇到的登入一般會聽到2個名詞:一個是token,一個是cookie。

Cookie 是由 Web 伺服器儲存在使用者

瀏覽器

上的小文字檔案,它包含有關使用者的資訊,一般是服務端建立會話後透過請求的response請求返回給客戶端(瀏覽器或者其他客戶端)。cookie 類似我們用身份證入職一個公司,然後公司給我們一個員工編號,後面工作過程中,我們都是透過員工編號進行工時統計或薪資發放等。

Token則是由應用商透過賬號密碼生成的有時效有許可權的隨機數,token的使用類似是我們出生後有了身份證,後面

生活

的時候直接給看自己身份證。

實戰-自動儲存/獲取cookie

自動獲取cookie的原理

python

有一個非常強大的

介面測試

第三方庫 – requests。很多學習Python的同學們可能都知道requests庫常見用法一般如下兩種:

1。第一種方式:

requests。get(url,params,headers)

requests。post(url,data,headers)

2。第二種方式:

requests。request(url,method。params,headers)

requests。request(url,method。data,headers)

使用上述兩種方法,在遇到介面需要依賴登入資訊時,需要透過手動的方式提取cookie再透過變數傳遞給下一個介面使用。

實際上,除了上述手動獲取cookie方法外,requests還有另外一種用法:requests。session()。session其實是一個會話類,requests的所有請求方法,底層都是呼叫的這個類的物件。

其他方法和session的區別在於:

直接使用requests呼叫請求方法傳送請求,每次都會建立一個新的session(會話物件),所以沒有之前請求的cookies資訊

直接建立一個session會話物件來發請求,那麼每次發請求用的都是同一個會話物件,能夠自動儲存之前的會話資訊(cookies資料),那麼其他介面使用同一個會話時會自動呼叫會話已儲存的cookie資訊。

如果介面依賴cookies,則可使用session自動管理,s=requests。session(),那麼依賴的介面可透過s。get()/s。post()自動關聯cookies了

認識可自動的標識 Set Cookie

大家可能會疑問,什麼樣的情況下session會自動獲取對應的cookie呢?這個時候可以用到Charles抓包工具,Charles這個抓包工具能很清楚地劃分介面的各個資料,包括Response的headers、Set Cookie(儲存登入的cookie資訊)、Text(對應響應資料正文)。

請看下面截圖!

測試進階:實現跨請求地保持登入的神器session你get了麼?

透過上面截圖可知悉,使用者登入成功後,服務端透過登入介面返回的響應資料的set cookie返回對應的使用者的cookie資訊。

如何自動獲取?

從上面原理地介紹我們可以知道,介面請求之前我們先建立會話與服務端建立連線後,就會產生對應的cookie。通俗點地說呢,就好比我們拿身份證去註冊,註冊成功後對方的

資料庫

就會產生一個ID編號,接下來我們都是透過這個編號進行驗證身份。

程式碼實現方法如下:

1。建立會話:s=requests。session()

2。發起登入請求:s。post(url,data,headers) #登入請求一般是post請求

3。檢視訂單詳情頁:s。get(url,params,headers) #檢視資料一般是get請求

注意:進行建立訂單或者查詢訂單詳情等請求必須放在登入請求之後,否則session對應的cookie資訊是空的

其他:檢視儲存的cookie資訊—response。cookies。values()

程式碼片段

測試進階:實現跨請求地保持登入的神器session你get了麼?

測試進階:實現跨請求地保持登入的神器session你get了麼?

執行結果:

測試進階:實現跨請求地保持登入的神器session你get了麼?

總結

Requests的session自動儲存cookie的功能,其實就類似jmeter的cookie管理器,不同的點在於使用jmeter時,我們需要先將登入的cookie手動提取後儲存到管理器內,然後將其他請求放在管理器下,才會預設去呼叫該管理器內的cookie;而透過s=requests。session()的作用是,先發起一次對話,然後進行不同請求直接使用同一個對話,服務端返回cookie後進行自動儲存,其他介面需要cookie是直接透過s。get()或s。post()進行自動獲取。

我是誰?

我是一名從事了多年軟體測試的老測試員,今年年初我花了一個月整理了一份最適合2020年學習的軟體測試學習乾貨,可以送給每一位對軟體測試感興趣的小夥伴,想要獲取的可以

關注我的頭條號並在後臺私信我:【頭條】

,即可免費獲取。