測(cè)試編寫者和測(cè)試架構(gòu)師之間的區(qū)別是什么?有一個(gè)很經(jīng)典的回答是這樣的:初級(jí)工程師調(diào)試代碼,高級(jí)工程師調(diào)試系統(tǒng)。
有位作者正是沿著這個(gè)思路,不再追問“我怎樣才能讓這個(gè)測(cè)試跑得更快?”,而是轉(zhuǎn)向一個(gè)更深層的問題:“到底是什么拖慢了運(yùn)行它的系統(tǒng)?”。基于這一視角,他對(duì)常用的 Selenium 進(jìn)行了提速實(shí)踐,結(jié)果出乎意料——在沒有改動(dòng)任何測(cè)試邏輯的情況下,整體速度提升了4倍!
![]()
今天我們就來拆解他的實(shí)踐過程。
第一步:分析 Selenium 的底層環(huán)境
Selenium 的速度受其底層環(huán)境制約,主要包括
- 運(yùn)行測(cè)試的機(jī)器性能;
- Grid 與瀏覽器之間的網(wǎng)絡(luò)延遲;
- 選擇器、等待及數(shù)據(jù)讀取涉及的 I/O 開銷;
- 線程同步機(jī)制。
這些正是我們可以著手優(yōu)化的關(guān)鍵因素。
![]()
第二步:逐步調(diào)整變量
接下來,就是針對(duì)上述因素,一步一步地進(jìn)行調(diào)優(yōu)實(shí)驗(yàn)了。
1. 遷移到無頭容器(從本地瀏覽器)
以前在本地啟動(dòng)瀏覽器,各大瀏覽器如Chrome、Firefox、Edge,它們爭(zhēng)搶CPU就像幼兒搶糖果。后來作者使用Selenium Grid+ Docker將它們?nèi)萜骰?配合headless Chrome。突然間,資源爭(zhēng)用消失了。每個(gè)測(cè)試套件在自己的容器中運(yùn)行 → 并行擴(kuò)展變得輕而易舉。
速度提升: 1.7倍
額外收益:不再有"WebDriver無法連接"的隨機(jī)失敗。
如下圖:
![]()
一行命令啟動(dòng)。完整的大規(guī)模測(cè)試執(zhí)行。
![]()
無需手動(dòng)設(shè)置,無需等待,無任何負(fù)擔(dān)。
2. 通過本地Grid切換到Remote WebDriver
在本地運(yùn)行瀏覽器實(shí)例時(shí),會(huì)遇到文件系統(tǒng)I/O限制,特別是如果測(cè)試寫日志或截圖。
通過啟動(dòng)遠(yuǎn)程Selenium Grid(即使在同一網(wǎng)絡(luò)),繁重的瀏覽器工作在別處進(jìn)行。
測(cè)試代碼仍然在開發(fā)機(jī)器上運(yùn)行——瀏覽器不在。
網(wǎng)絡(luò)開銷最小。性能提升巨大。
速度提升: 1.3倍
3. 一次性緩存所有靜態(tài)資源
Selenium測(cè)試反復(fù)訪問登錄頁(yè)面、Dashboard和相同的靜態(tài)資源。
每次運(yùn)行都會(huì)一次又一次地獲取相同的JS和CSS包。
解決方案:使用Service Workers或簡(jiǎn)單的代理緩存(如Nginx)來提供緩存內(nèi)容。
無需瀏覽器hack,無需編輯測(cè)試。
速度提升: 0.5倍 (特別是UI密集型應(yīng)用)
Nginx配置片段:
![]()
4. 在Suite級(jí)別并行化,而非Test級(jí)別
將每個(gè)test并行化聽起來不錯(cuò)——直到Chrome標(biāo)簽頁(yè)開始互相吞噬。
作者將測(cè)試分組為執(zhí)行時(shí)長(zhǎng)相似的suite(如Login、Search、Reports),并讓這些suite在并行線程中運(yùn)行。
4個(gè)線程 = 4個(gè)獨(dú)立的瀏覽器會(huì)話 = 沒有CPU崩潰。
TestNG示例:
![]()
速度提升: 1.5倍
額外收益:多次運(yùn)行間性能一致。
5. 優(yōu)化Wait策略(不改動(dòng)測(cè)試)
這個(gè)很巧妙。
作者沒有改變一行WebDriverWait代碼,但改變了基礎(chǔ)driver中wait的實(shí)現(xiàn)方式。
他用事件驅(qū)動(dòng)wait替換了輪詢wait,使用Selenium內(nèi)部的ExpectedConditions包裝自定義日志。
不再是"每500ms檢查一次",現(xiàn)在它等待真實(shí)的DOM信號(hào)(如DOMContentLoaded、AJAX完成)。
速度提升: 0.6倍
額外收益: 漏報(bào)減少40%。
![]()
總結(jié):
Selenium不是慢,環(huán)境才是慢的主要原因。
大多數(shù)開發(fā)者過度優(yōu)化他們的測(cè)試代碼,卻忽略了生態(tài)系統(tǒng),如:
- 磁盤I/O
- 日志開銷
- 瀏覽器啟動(dòng)時(shí)間
- 網(wǎng)絡(luò)延遲
- CPU限流
整體過程如下圖:
![]()
??轉(zhuǎn)崗軟件I測(cè)試/野路子技能提升
??想了解更多漲薪技能提升方法
??可以到我的個(gè)人號(hào):atstudy-js
即可加入領(lǐng)取 ??????
轉(zhuǎn)行、入門、提升、需要的各種干貨資料
內(nèi)含AI測(cè)試、 車載測(cè)試、AI大模型開發(fā)、BI數(shù)據(jù)分析、銀行/游戲測(cè)試、AIGC
![]()
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.