前言
在接口測試的過程中,經(jīng)常會遇到有些接口需要在登錄的狀態(tài)下才能請求,否則會提示請登錄,那么怎樣解決呢?我們可以通過Cookie繞過登錄,其實(shí)這就是保持登錄狀態(tài)的方法之一。那么今天筆者想講通過session進(jìn)行會話保持。
一、session(會話)
session,即會話。那么什么又是會話?我們來看一下會話的生存周期就能大致明白,如下:
開始:客戶端(通常是瀏覽器)–>發(fā)送第一個(gè)請求–>某應(yīng)用服務(wù)器,彼此成功建立連接,即創(chuàng)建會話;
會話中:客戶端接著請求該應(yīng)用服務(wù)器的其他資源;
結(jié)束:關(guān)閉客戶端(通常是瀏覽器)或者會話超時(shí),會話結(jié)束。
二、會話保持
會話保持,可以通俗的理解為使同一用戶發(fā)送的相關(guān)聯(lián)的請求處于同一個(gè)會話中不被斷開。比如使用session成功地登錄了某個(gè)網(wǎng)站,則在再次使用該session對象請求該網(wǎng)站的其他網(wǎng)頁時(shí),都會默認(rèn)使用該session中之前保存的cookie等參數(shù)去請求,而不需要再次登錄。
session會話保持大致原理如下:
三、python進(jìn)行session會話保持
在接口自動化測試中,某些情況下可以使用session會話保持機(jī)制來保持登錄狀態(tài),這樣就不需要每次清求接口都需要先登錄。
接下來,我們以查看TesterHome網(wǎng)站上個(gè)人的通知消息、個(gè)人信息為例,來說明在python接口自動化測試中怎樣利用session保持登錄狀態(tài)。
注意:
- 這里我先嘗試請求登錄接口構(gòu)造session,然后再利用該session去請求其他接口,仍然提示需先登錄,說明該網(wǎng)站此種方式行不通。
- 因?yàn)榈顷懞筇D(zhuǎn)到了首頁,所以這里我們可以利用請求首頁接口構(gòu)造session,然后就可以利用該session去請求其他接口了。
1、首先,F(xiàn)iddler抓包獲取登錄成功后請求首頁接口時(shí)的cookie
2、拿到cookie,利用請求首頁接口構(gòu)造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,即登錄成功后跳轉(zhuǎn)時(shí),請求首頁接口https://testerhome.com/時(shí)的cookie’}# 構(gòu)造一個(gè)全局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對象,查看個(gè)人通知消息、個(gè)人信息接口。
# 使用session對象S請求個(gè)人通知消息接口n_url = “https://testerhome.com/notifications/personal”n_res = S.get(url=n_url).textprint(n_res)# 使用session對象S請求個(gè)人信息接口s_url = “https://testerhome.com/setting”s_res = S.get(url=s_url).textprint(s_res)
請求個(gè)人信息接口,執(zhí)行結(jié)果如下:
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,即登錄成功后跳轉(zhuǎn)時(shí),請求首頁接口https://testerhome.com/時(shí)的cookie’}# 構(gòu)造一個(gè)全局session對象S = requests.session()# 使用session對象即S模擬登錄成功后請求首頁接口,更新Sh_url = “https://testerhome.com/”h_res = S.get(url=h_url, headers=headers).text# 使用session對象S請求個(gè)人通知消息接口n_url = “https://testerhome.com/notifications/personal”n_res = S.get(url=n_url).textprint(n_res)# 使用session對象S請求個(gè)人信息接口s_url = “https://testerhome.com/setting”s_res = S.get(url=s_url).textprint(s_res)
總結(jié)
session與cookie是不同的機(jī)制。
相同點(diǎn):兩者都能記錄用戶的狀態(tài),且都是由服務(wù)端生成。
不同點(diǎn):cookie是存儲在本地客戶端的,而session則存儲在服務(wù)端。
兩者之間存在聯(lián)系:session會話保持機(jī)制需要依賴cookie,因?yàn)閟ession ID是存儲在cookie中的。
最后喜歡的小伙伴的可以點(diǎn)贊收藏加關(guān)注喲,?( ???` )比心。