Stories

Detail Return Return

cookie 時效無限延長方案 - Stories Detail

作者:京東科技 劉清潔

1、痛點(*)

自動化測試有2種形式,接口自動化和UI自動化。而UI自動化經常會被登錄節點堵塞,例如驗證碼、圖形、滑塊等,儘管有些方式可以識別圖形和定位滑塊位置,但成功率都不高,無法真正意義上實現自動化執行;而http接口的自動化測試前置如果依賴cookie,也無法實現自動化執行。

a、怎麼樣才能繞過登錄,實現從前端到後端的自動化執行

b、面對複雜的登錄驗證無法直接自動獲取到cookie,需要人工操作登錄,而cookie又有時效,不能長久使用

本方案將有效解決以上問題,在面對複雜的登錄驗證及有cookie時效的模式下,可以將短暫時效的cookie改為長久有效,真正意義上實現UI自動化和依賴cookie鑑權的接口自動化。

2、什麼是cookie

cookie稱之為會話跟蹤技術,是一個很小的文本文件,是瀏覽器儲存在用户的機器上的。Cookie是純文本,沒有可執行代碼。儲存一些服務器需要的信息,每次請求站點,會發送相應的cookie,這些cookie可以用來辨別用户身份信息等作用

3、過期時間查看方式

打開瀏覽器,並轉到您希望查看 cookie 的網站。

按 F12 鍵打開瀏覽器的開發者工具。

在開發者工具的“調試工具”選項卡中,單擊“存儲”按鈕。

在左側的“網站數據”列表中,單擊“Cookies”。

在右側的“值”列表中,查看每個 cookie 的“Expires”或“Max-Age”字段。這些字段顯示 cookie 的過期時間。

4、cookie機制

客户端發送一個請求到服務器 --》 服務器發送一個HttpResponse響應到客户端,其中包含Set-Cookie的頭部 --》 客户端保存cookie,之後向服務器發送請求時,HttpRequest請求中會包含一個Cookie的頭部 --》服務器返回響應數據

時效限制:每個cookie都有時效,默認的有效期是,會話級別:就是當瀏覽器關閉,那麼cookie立即銷燬,但是我們也可以在存儲的時候手動設置cookie的過期時間

5、cookie時效無限延長方案(*)

5-1、前提

a. 登錄節點有驗證機制,例如短信驗證碼、圖形識別、滑塊等校驗;

b. cookie有時效,超過時效則需要重新登錄;

c. 同一個賬號不會在多個平台退出或登錄

5-2、實現原理

此方案是通過一個微服務提供接口,供自動化調用,通過傳遞賬號,返回永久cookie,將此步嵌入到自動化流程中,替代登錄並獲取cookie的節點,並將cookie的時效永久延長,並不會時效,以保證後續自動化流程永久循環正常執行。

5-3、核心流程步驟

步驟1:先手工登錄,從header中獲取cookie,將此cookie和時效值保存在微服務平台(一個賬號只需一次手工登錄,後續永久不需要操作登錄)。

步驟2:微服務平台將此賬號、cookie、時效值、關聯的業務接口進行持久化存儲,並跟進時效值計算出輪詢時長,並觸發輪詢任務執行,任務中將攜帶此cookie去調用業務接口,保持長會話,並hold進程等待,在輪詢時長到達時,繼續執行任務執行,再次hold進程等待,持續循環,以保證次cookie的會話永久保持住。

步驟3:自動化任務執行前會調用微服務接口,通過賬號獲取到永久cookie,攜帶此cookie執行後續自動化任務。

6、落地案例

目前通過下方方案,已實現了cookie一次配置,長久使用的目的。

實踐效果對比

之前:ui自動化和http接口自動化執行時經常出現cookie過期,需要手工重新登錄,並在自動化平台上更新cookie,比較繁瑣,且影響凌晨自動執行成功率

現在:使用上面方案後,只需手工在cookie微服務平台上配置一次cookie,以後不再需要更新cookie

7、專利描述

https://zhuanli.tianyancha.com/811840799431036187d34680d5b10ae3

user avatar grewer Avatar littlelyon Avatar whaosoft143 Avatar ecomools Avatar dirackeeko Avatar nixideshatanku Avatar zgm1 Avatar smartbidashuju Avatar lantianhaijiao Avatar sheyingshichenjian Avatar dosswy Avatar fangtangxiansheng Avatar
Favorites 17 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.