程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python+pytest接口自動化之session會話保持的實現

編輯:Python

目錄

前言

一、session(會話)

二、會話保持

三、python進行session會話保持

總結

前言

在接口測試的過程中,經常會遇到有些接口需要在登錄的狀態下才能請求,否則會提示請登錄,那麼怎樣解決呢?我們可以通過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 requestsheaders = { "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模擬登錄成功後請求首頁接口,更新Sh_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).textprint(n_res)# 使用session對象S請求個人信息接口s_url = "https://testerhome.com/setting"s_res = S.get(url=s_url).textprint(s_res)

請求個人信息接口,執行結果如下:

 4、完整代碼如下:

import requestsheaders = { "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模擬登錄成功後請求首頁接口,更新Sh_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).textprint(n_res)# 使用session對象S請求個人信息接口s_url = "https://testerhome.com/setting"s_res = S.get(url=s_url).textprint(s_res)總結

session與cookie是不同的機制。

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

不同點:cookie是存儲在本地客戶端的,而session則存儲在服務端。

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

到此這篇關於python+pytest接口自動化之session會話保持的實現的文章就介紹到這了,更多相關python pytest session會話保持內容請搜索軟件開發網以前的文章或繼續浏覽下面的相關文章希望大家以後多多支持軟件開發網!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved