網站首頁 編程語言 正文
前言
在接口測試的過程中,經常會遇到有些接口需要在登錄的狀態下才能請求,否則會提示請登錄,那么怎樣解決呢?我們可以通過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中的。
原文鏈接:https://blog.csdn.net/qishuzdh/article/details/125340559
相關推薦
- 2022-09-15 Nginx如何獲取自定義請求header頭和URL參數詳解_nginx
- 2023-06-13 Python的加密模塊之hashlib?與?base64詳解及常用加密方法_python
- 2022-05-28 教你C#將CSV轉為Excel的實現方法_C#教程
- 2022-07-28 Python自動化實戰之接口請求的實現_python
- 2023-02-06 C++11中longlong超長整型和nullptr初始化空指針_C 語言
- 2022-02-17 springBoot自定義場景啟動器starter
- 2022-04-27 Python中的元組(Tuple)操作實例詳解_python
- 2022-03-18 .NET?6開發TodoList應用之使用MediatR實現POST請求_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支