首頁 > 軟體

python+pytest介面自動化之session對談保持的實現

2022-06-24 14:03:07

前言

在介面測試的過程中,經常會遇到有些介面需要在登入的狀態下才能請求,否則會提示請登入,那麼怎樣解決呢?我們可以通過Cookie繞過登入,其實這就是保持登入狀態的方法之一。那麼今天筆者想講通過session進行對談保持。

一、session(對談)

session,即對談。那麼什麼又是對談?我們來看一下對談的生存週期就能大致明白,如下:

開始:使用者端(通常是瀏覽器)-->傳送第一個請求-->某應用伺服器,彼此成功建立連線,即建立對談;

對談中:使用者端接著請求該應用伺服器的其他資源;

結束:關閉使用者端(通常是瀏覽器)或者對談超時,對談結束。

二、對談保持

對談保持,可以通俗的理解為使同一使用者傳送的相關聯的請求處於同一個對談中不被斷開。比如使用session成功地登入了某個網站,則在再次使用該session物件請求該網站的其他網頁時,都會預設使用該session中之前儲存的cookie等引數去請求,而不需要再次登入。

session對談保持大致原理如下:

  • 使用者端應用第一次請求該應用伺服器時,伺服器會建立一個session,該session物件中會儲存特定的使用者對談所需的屬性及設定資訊(如使用者資訊或登入狀態等),並儲存在伺服器中。
  • 建立session時,會賦予其一個session ID,該session ID會被置於set-cookie中隨著請求返回給使用者端,並儲存在原生的cookie中。
  • 後續,使用者端請求本應用中其他資源時,伺服器就會收到cookie中的session ID,並根據ID在記憶體中查詢之前建立的session物件,如果能找到且未過期,則說明是來自同一戶用的請求。

三、python進行session對談保持

在介面自動化測試中,某些情況下可以使用session對談保持機制來保持登入狀態,這樣就不需要每次清求介面都需要先登入。

接下來,我們以檢視TesterHome網站上個人的通知訊息、個人資訊為例,來說明在python介面自動化測試中怎樣利用session保持登入狀態。

注意:

  • 這裡我先嚐試請求登入介面構造session,然後再利用該session去請求其他介面,仍然提示需先登入,說明該網站此種方式行不通。
  • 因為登陸後跳轉到了首頁,所以這裡我們可以利用請求首頁介面構造session,然後就可以利用該session去請求其他介面了。

1、首先,Fiddler抓包獲取登入成功後請求首頁介面時的cookie

 2、拿到cookie,利用請求首頁介面構造session物件。

import requests
 
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
    "cookie": '如上面截圖所示獲取的cookie,即登入成功後跳轉時,請求首頁介面https://testerhome.com/時的cookie'
}
 
# 構造一個全域性session物件
S = requests.session()
 
# 使用session物件即S模擬登入成功後請求首頁介面,更新S
h_url = "https://testerhome.com/"
h_res = S.get(url=h_url, headers=headers).text

這一步會得到的session物件S中就包含了登入成功後的cookie等資訊了,再使用該session物件去請求其他介面就不需要再次登入了。

3、使用上一步得到的session物件,檢視個人通知訊息、個人資訊介面。

# 使用session物件S請求個人通知訊息介面
n_url = "https://testerhome.com/notifications/personal"
n_res = S.get(url=n_url).text
print(n_res)
 
# 使用session物件S請求個人資訊介面
s_url = "https://testerhome.com/setting"
s_res = S.get(url=s_url).text
print(s_res)

請求個人資訊介面,執行結果如下:

 4、完整程式碼如下:

import requests
 
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
    "cookie": '如上面截圖所示獲取的cookie,即登入成功後跳轉時,請求首頁介面https://testerhome.com/時的cookie'
}
 
# 構造一個全域性session物件
S = requests.session()
 
# 使用session物件即S模擬登入成功後請求首頁介面,更新S
h_url = "https://testerhome.com/"
h_res = S.get(url=h_url, headers=headers).text
 
# 使用session物件S請求個人通知訊息介面
n_url = "https://testerhome.com/notifications/personal"
n_res = S.get(url=n_url).text
print(n_res)
 
# 使用session物件S請求個人資訊介面
s_url = "https://testerhome.com/setting"
s_res = S.get(url=s_url).text
print(s_res)

總結

session與cookie是不同的機制。

相同點:兩者都能記錄使用者的狀態,且都是由伺服器端生成。

不同點:cookie是儲存在本地使用者端的,而session則儲存在伺服器端。

兩者之間存在聯絡:session對談保持機制需要依賴cookie,因為session ID是儲存在cookie中的。

到此這篇關於python+pytest介面自動化之session對談保持的實現的文章就介紹到這了,更多相關python pytest session對談保持內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com