国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

用Playwright打造你的專屬Web性能監(jiān)控腳本

0
分享至

在Web應(yīng)用開發(fā)過程中,前端性能測試是不可或缺的一環(huán)。隨著頁面復(fù)雜度與用戶體驗(yàn)要求越來越高,傳統(tǒng)的性能測試手段已難以滿足現(xiàn)代Web的精細(xì)化需求。Playwright 作為新一代自動化測試框架,不僅支持多瀏覽器、多平臺,還能深度集成性能指標(biāo)采集,成為Web性能測試領(lǐng)域的新寵。

本文將以一個 Playwright性能測試腳本為例,深入剖析其設(shè)計(jì)思路、實(shí)現(xiàn)細(xì)節(jié)、關(guān)鍵指標(biāo)、實(shí)戰(zhàn)操作與優(yōu)化建議,幫助你從0到1構(gòu)建屬于自己的Web性能測試工具。



一、為什么選擇Playwright做性能測試?

1.1 傳統(tǒng)工具的局限

Lighthouse:適合單頁面、單次分析,自動化批量測試不便。

Selenium:雖可自動化,但性能指標(biāo)采集能力有限。

WebPageTest:更偏向于黑盒、網(wǎng)絡(luò)層面,難以細(xì)粒度采集前端關(guān)鍵指標(biāo)。

1.2 Playwright的優(yōu)勢

多瀏覽器支持:一套腳本可在Chromium、Firefox、WebKit上運(yùn)行。

異步API:高并發(fā)、低延遲,適合批量測試。

CDP協(xié)議集成:可直接獲取瀏覽器底層性能數(shù)據(jù)。

靈活的頁面操作:可模擬真實(shí)用戶行為,支持復(fù)雜交互。

易于擴(kuò)展:Python/Node.js等多語言支持,生態(tài)活躍。

二、腳本結(jié)構(gòu)與核心實(shí)現(xiàn)詳解

2.1 功能總覽



主要功能:

自動化打開指定URL

多次迭代采集性能數(shù)據(jù)

統(tǒng)計(jì)并輸出關(guān)鍵性能指標(biāo)

生成詳細(xì)JSON報告與頁面截圖

2.2 主要流程

1. 參數(shù)解析:支持命令行傳入URL和迭代次數(shù)

2. 瀏覽器環(huán)境初始化:設(shè)置分辨率、User-Agent、時區(qū)等

3. 頁面加載與事件監(jiān)聽:采集控制臺、JS錯誤、請求失敗等

4. 性能指標(biāo)采集:通過CDP和Performance API獲取各類指標(biāo)

5. 結(jié)果統(tǒng)計(jì)與評級:多次迭代后輸出均值與Web Vitals評級

6. 報告與截圖輸出:保存JSON報告和頁面截圖

三、關(guān)鍵性能指標(biāo)全解

3.1 Web Vitals核心指標(biāo)

FCP(First Contentful Paint):首次內(nèi)容繪制時間,衡量頁面可見速度

LCP(Largest Contentful Paint):最大內(nèi)容繪制時間,衡量主內(nèi)容加載速度

CLS(Cumulative Layout Shift):累積布局偏移,衡量頁面視覺穩(wěn)定性

FID(First Input Delay):首次輸入延遲,衡量交互響應(yīng)速度

INP(Interaction to Next Paint):交互到下一幀,衡量復(fù)雜交互流暢性

3.2 其他重要指標(biāo)

TTFB(Time To First Byte):首字節(jié)到達(dá)時間,反映后端響應(yīng)速度

Speed Index:頁面內(nèi)容可見速度的綜合評分

TTI(Time To Interactive):可交互時間,衡量頁面完全可用的時機(jī)

主線程阻塞時間:反映JS執(zhí)行對主線程的占用

資源計(jì)數(shù)與大小:頁面加載的資源數(shù)量與體積

緩存命中率、圖片壓縮率:衡量資源優(yōu)化效果

四、核心代碼實(shí)現(xiàn)剖析

4.1 瀏覽器與上下文初始化



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythonasync with async_playwright() as p: browser = await p.chromium.launch(headless=True) context = await browser.new_context( viewport={'width': 1920, 'height': 1080}, user_agent='Mozilla/5.0 ...', locale='zh-CN', timezone_id='Asia/Shanghai', ) page = await context.new_page()```

headless模式:保證測試結(jié)果不受UI渲染干擾

分辨率/UA/時區(qū):模擬真實(shí)用戶環(huán)境,提升測試準(zhǔn)確性

4.2 事件監(jiān)聽與異常捕獲



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythonpage.on('console', lambda msg: console_messages.append(msg.text))page.on('pageerror', lambda err: js_errors.append(str(err)))page.on('requestfailed', lambda request: failed_requests.append({ 'url': request.url, 'error': request.failure.get('errorText', '')}))```

控制臺消息:捕獲JS日志與錯誤

請求失敗:定位資源加載異常

頁面錯誤:收集未捕獲的JS異常

4.3 性能指標(biāo)采集

4.3.1 CDP協(xié)議獲取底層指標(biāo)



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythoncdp_session = await context.new_cdp_session(page)await cdp_session.send('Performance.enable')performance_metrics = await cdp_session.send('Performance.getMetrics')```

JS堆內(nèi)存、節(jié)點(diǎn)數(shù)等底層數(shù)據(jù),有助于分析內(nèi)存泄漏與DOM復(fù)雜度

4.3.2 Performance API獲取Web Vitals



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythonperformance_timing = await page.evaluate('''() => { const timing = performance.getEntriesByType('navigation')[0]; // ... return { domContentLoaded: timing.domContentLoadedEventEnd - timing.startTime, load: timing.loadEventEnd - timing.startTime, firstContentfulPaint: fcp, ttfb: ttfb, // ... };}''')```

導(dǎo)航、資源、繪制等多維度指標(biāo),全面反映頁面性能

4.3.3 復(fù)雜指標(biāo)異步采集

如 FID、INP、LCP、CLS、TTI 等需通過 `PerformanceObserver` 異步監(jiān)聽:







異步監(jiān)聽:保證捕獲到頁面生命周期內(nèi)的關(guān)鍵事件

超時兜底:防止頁面無交互時腳本卡死

4.4 結(jié)果統(tǒng)計(jì)與評級



多次迭代取均值,規(guī)避偶發(fā)波動

Web Vitals分級,一目了然定位性能短板

4.5 報告與可視化

JSON報告:結(jié)構(gòu)化存儲,便于后續(xù)分析與可視化

頁面截圖:直觀記錄頁面狀態(tài),輔助問題定位





五、實(shí)戰(zhàn)操作指南

5.1 環(huán)境準(zhǔn)備

5.1.1 安裝依賴

@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```bashpip install playwrightplaywright install```

5.1.2 運(yùn)行腳本

@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```bashpython xxx.py https://your-website.com 5```

第一個參數(shù)為待測URL

第二個參數(shù)為迭代次數(shù)(可選,默認(rèn)3次)

5.2 結(jié)果解讀

運(yùn)行結(jié)束后,終端會輸出如下信息:



單次與均值對比:可發(fā)現(xiàn)性能波動與趨勢

評級直觀:快速定位需優(yōu)化的指標(biāo)

JSON報告:可用于后續(xù)數(shù)據(jù)分析、趨勢監(jiān)控

5.3 報告結(jié)構(gòu)說明

JSON報告主要包含:

`individualResults`:每次迭代的詳細(xì)指標(biāo)

`averages`:各項(xiàng)指標(biāo)均值

`ratings`:Web Vitals評級

可結(jié)合Excel、BI工具或自定義腳本進(jìn)行可視化分析。



??轉(zhuǎn)崗軟件測試/野路子技能提升

??想了解更多漲薪技能提升方法

??可以到我的個人號:atstudy-js

即可加入領(lǐng)取 ??????

轉(zhuǎn)行、入門、提升、需要的各種干貨資料

內(nèi)含AI測試、 車載測試、AI大模型開發(fā)、BI數(shù)據(jù)分析、銀行測試、游戲測試、AIGC

六、進(jìn)階與擴(kuò)展建議

6.1 多端/多瀏覽器測試

可通過參數(shù)化 `p.chromium` 為 `p.firefox` 或 `p.webkit`,實(shí)現(xiàn)多瀏覽器對比

可批量測試PC、移動端不同分辨率與UA

6.2 CI/CD集成

可將腳本集成至Jenkins、GitHub Actions等CI流程

自動化回歸測試,及時發(fā)現(xiàn)性能回退

6.3 指標(biāo)擴(kuò)展

可采集自定義業(yè)務(wù)指標(biāo),如首屏渲染、關(guān)鍵元素可見等

可集成APM、日志系統(tǒng),關(guān)聯(lián)后端性能

6.4 可視化與告警

可將JSON結(jié)果推送至Prometheus、Grafana等監(jiān)控平臺

設(shè)定閾值自動告警,保障用戶體驗(yàn)

6.5 代碼優(yōu)化建議

異步并發(fā):可批量并發(fā)測試多個URL,提升效率

異常處理:完善異常捕獲與重試機(jī)制,提升健壯性

參數(shù)配置:支持通過配置文件批量管理測試用例

七、常見問題與排查

7.1 頁面未加載或超時

檢查URL是否可訪問

增大 `timeout` 參數(shù)

檢查網(wǎng)絡(luò)代理、防火墻設(shè)置

7.2 指標(biāo)異常或?yàn)?

某些指標(biāo)需頁面有真實(shí)交互或特定內(nèi)容

檢查頁面是否有FCP/LCP等事件

檢查腳本是否有權(quán)限訪問Performance API

7.3 結(jié)果波動大

建議多次迭代取均值

避免測試期間網(wǎng)絡(luò)波動、服務(wù)器重啟等外部干擾

八、結(jié)語

Playwright為Web性能測試帶來了前所未有的靈活性與深度。通過本文詳解的實(shí)戰(zhàn)腳本與原理剖析,你可以輕松搭建起一套專業(yè)級的性能測試體系,實(shí)現(xiàn)從單頁到全站、從本地到CI的全流程自動化性能監(jiān)控。

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(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.

相關(guān)推薦
熱點(diǎn)推薦
廣州水餃店火了:一句“你工資低”,讓精致窮全體沉默

廣州水餃店火了:一句“你工資低”,讓精致窮全體沉默

萌醬追熱點(diǎn)
2026-03-19 13:14:29
固態(tài)變壓器(SST)會是下一個 “光伏” 嗎?千億電力新賽道正在爆發(fā)

固態(tài)變壓器(SST)會是下一個 “光伏” 嗎?千億電力新賽道正在爆發(fā)

新浪財經(jīng)
2026-04-18 09:51:10
劉邦到死都沒想到,他最嫌棄的兒子,靠裝傻成了千古一帝

劉邦到死都沒想到,他最嫌棄的兒子,靠裝傻成了千古一帝

千秋文化
2026-03-13 20:40:51
建國曝汪小菲猛料,全和S家有關(guān),張?zhí)m傻眼,馬筱梅痛哭真相大白

建國曝汪小菲猛料,全和S家有關(guān),張?zhí)m傻眼,馬筱梅痛哭真相大白

萌姐
2026-04-16 22:55:50
小寶與王某雷,誰探訪花的數(shù)量更多?

小寶與王某雷,誰探訪花的數(shù)量更多?

挪威森林
2026-01-31 12:15:26
5月1日起全國嚴(yán)查!開車上班、做生意,這些小事別再碰,輕則罰款

5月1日起全國嚴(yán)查!開車上班、做生意,這些小事別再碰,輕則罰款

寶哥精彩賽事
2026-04-19 06:35:05
曼聯(lián)1-0切爾西!小將海文頂住壓力,英足總殺不死曼聯(lián)!

曼聯(lián)1-0切爾西!小將海文頂住壓力,英足總殺不死曼聯(lián)!

卡靈頓分析師
2026-04-19 10:04:50
不會干,你就別干了!中國勒令馬士基停運(yùn),巴拿馬的反應(yīng)很有意思

不會干,你就別干了!中國勒令馬士基停運(yùn),巴拿馬的反應(yīng)很有意思

青桅
2026-04-19 05:09:38
超市舉辦 “贅肉換牛肉” 活動,180人報名50人成功減重,男子12天瘦9斤,兌換到3斤牛肉

超市舉辦 “贅肉換牛肉” 活動,180人報名50人成功減重,男子12天瘦9斤,兌換到3斤牛肉

觀威海
2026-04-18 12:52:19
6月1日交強(qiáng)險調(diào)整!950元固定費(fèi)取消,好司機(jī)保費(fèi)直接減掉一半

6月1日交強(qiáng)險調(diào)整!950元固定費(fèi)取消,好司機(jī)保費(fèi)直接減掉一半

復(fù)轉(zhuǎn)這些年
2026-04-17 11:59:50
出大事了,特朗普癡呆已晚期?和伊朗開戰(zhàn),竟是內(nèi)塔尼亞胡的圈套

出大事了,特朗普癡呆已晚期?和伊朗開戰(zhàn),竟是內(nèi)塔尼亞胡的圈套

阿紿聊社會
2026-04-19 04:44:48
新血糖標(biāo)準(zhǔn)已更新,餐后血糖最佳值不再是6.2,早知早受益

新血糖標(biāo)準(zhǔn)已更新,餐后血糖最佳值不再是6.2,早知早受益

荊醫(yī)生科普
2026-04-16 15:24:36
《八千里路》10塊大洋揪出內(nèi)鬼!焦師傅針對萬福背后真相令人心驚

《八千里路》10塊大洋揪出內(nèi)鬼!焦師傅針對萬福背后真相令人心驚

梅亭談
2026-04-18 23:23:20
蕪湖造船廠,4艘在建船變動

蕪湖造船廠,4艘在建船變動

龍de船人
2026-04-19 09:48:37
越南高鐵訂單給了德國,蘇林來中國為何還要坐10多個小時高鐵?

越南高鐵訂單給了德國,蘇林來中國為何還要坐10多個小時高鐵?

小嵩
2026-04-18 09:37:40
iPhone 18 Pro 系列全新配色、價格曝光

iPhone 18 Pro 系列全新配色、價格曝光

簡科技
2026-04-18 23:40:44
15年掏心掏肺的帶孫女,上海阿姨索要36萬帶孫費(fèi),法院這樣判!

15年掏心掏肺的帶孫女,上海阿姨索要36萬帶孫費(fèi),法院這樣判!

今朝牛馬
2026-04-17 20:54:56
81年宋慶齡病重住院,鄧小平特意前去探望后,當(dāng)即下達(dá)了一道命令

81年宋慶齡病重住院,鄧小平特意前去探望后,當(dāng)即下達(dá)了一道命令

談古論今歷史有道
2026-04-18 19:20:03
突發(fā)!車船稅迎大變革,車輛按噸收費(fèi),電車保費(fèi)再漲,車主哭了!

突發(fā)!車船稅迎大變革,車輛按噸收費(fèi),電車保費(fèi)再漲,車主哭了!

藍(lán)色海邊
2026-04-19 08:20:37
曾被吹上天的軌道插座,為什么還沒流行就“涼”了?原因很簡單

曾被吹上天的軌道插座,為什么還沒流行就“涼”了?原因很簡單

家居設(shè)計(jì)師蘇哥
2026-04-17 13:47:40
2026-04-19 10:27:00
51Testing軟件測試網(wǎng) incentive-icons
51Testing軟件測試網(wǎng)
中國軟件測試人的精神家園
1558文章數(shù) 13260關(guān)注度
往期回顧 全部

科技要聞

50分26秒!榮耀獲得人形機(jī)器人半馬冠軍

頭條要聞

牛彈琴:伊朗遭到特朗普"羞辱"被激怒 結(jié)果印度遭了殃

頭條要聞

牛彈琴:伊朗遭到特朗普"羞辱"被激怒 結(jié)果印度遭了殃

體育要聞

時隔25年重返英超!沒有人再嘲笑他了

娛樂要聞

劉德華回應(yīng)潘宏彬去世,拒談喪禮細(xì)節(jié)

財經(jīng)要聞

華誼兄弟,8年虧光85億

汽車要聞

奇瑞威麟R08 PRO正式上市 售價14.48萬元起

態(tài)度原創(chuàng)

本地
親子
教育
數(shù)碼
公開課

本地新聞

12噸巧克力有難,全網(wǎng)化身超級偵探添亂

親子要聞

春天娃長個黃金期,喝對黑豆水,消積清熱竄個子

教育要聞

五年級壓軸題,不少人卻無從下手,尖子生直接心算

數(shù)碼要聞

蘋果2026款Mac Studio前瞻:M5 Max/Ultra芯片,內(nèi)存最高256G

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進(jìn)入關(guān)懷版