亚洲中文字幕乱码亚洲-蜜桃成熟视频在线观看-免费中文字幕视频在线-中国五十路熟妇洗澡视频-亚洲av伊人啪啪c-国产精品成人一区二区-国产自拍视频一区在线观看-成人一区不卡二区三区四区-亚洲情精品中文字幕99在线

網(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)推薦
重要突破,科學(xué)家注射一個腫瘤細(xì)胞,全身癌細(xì)胞竟然消失

重要突破,科學(xué)家注射一個腫瘤細(xì)胞,全身癌細(xì)胞竟然消失

心中的麥田
2026-04-19 18:26:11
美國至少10名科研人員離奇死亡或神秘失蹤引發(fā)廣泛關(guān)注!大都接觸UFO、航空航天、原子能等涉密項(xiàng)目,白宮承諾:徹查

美國至少10名科研人員離奇死亡或神秘失蹤引發(fā)廣泛關(guān)注!大都接觸UFO、航空航天、原子能等涉密項(xiàng)目,白宮承諾:徹查

大風(fēng)新聞
2026-04-20 09:35:11
特朗普第一任期的白宮律師突然爆猛料:特朗普已經(jīng)撐不下去了

特朗普第一任期的白宮律師突然爆猛料:特朗普已經(jīng)撐不下去了

西樓知趣雜談
2026-04-19 21:25:23
快檢查自家陽臺!有人家里已大量出現(xiàn),官方提醒:千萬別摸

快檢查自家陽臺!有人家里已大量出現(xiàn),官方提醒:千萬別摸

環(huán)球網(wǎng)資訊
2026-04-18 16:23:18
伊朗總統(tǒng):美國持續(xù)背信棄義 做出霸凌且不合理行為

伊朗總統(tǒng):美國持續(xù)背信棄義 做出霸凌且不合理行為

中國網(wǎng)
2026-04-20 11:09:10
普京訪華行程敲定,特朗普已下命令,中國向全球通告,無懼美國

普京訪華行程敲定,特朗普已下命令,中國向全球通告,無懼美國

田園小歸
2026-04-20 09:17:43
爭議?對手疑似伸腿踹張雪機(jī)車惹怒中國網(wǎng)友 張雪:很正常+很干凈

爭議?對手疑似伸腿踹張雪機(jī)車惹怒中國網(wǎng)友 張雪:很正常+很干凈

風(fēng)過鄉(xiāng)
2026-04-20 06:45:19
斯諾克世錦賽:丁俊暉送大禮!吉爾伯特被罰12分逆轉(zhuǎn),僅2-3落后

斯諾克世錦賽:丁俊暉送大禮!吉爾伯特被罰12分逆轉(zhuǎn),僅2-3落后

劉姚堯的文字城堡
2026-04-19 19:17:56
學(xué)術(shù)不端是學(xué)術(shù)晉級的最快捷徑

學(xué)術(shù)不端是學(xué)術(shù)晉級的最快捷徑

必記本
2026-04-19 22:50:38
王金平力挺了鄭麗文后,連勝文發(fā)聲了,竟主動為朱立倫證實(shí)1件事

王金平力挺了鄭麗文后,連勝文發(fā)聲了,竟主動為朱立倫證實(shí)1件事

瀲滟晴方DAY
2026-04-20 06:55:07
研究發(fā)現(xiàn):脂肪肝人若常補(bǔ)B族維生素,用不了多久,身體或有3好處

研究發(fā)現(xiàn):脂肪肝人若常補(bǔ)B族維生素,用不了多久,身體或有3好處

小胡軍事愛好
2026-03-05 20:56:45
季后賽首秀35分!就在今天,一項(xiàng)鄧肯保持的NBA紀(jì)錄被文班打破了

季后賽首秀35分!就在今天,一項(xiàng)鄧肯保持的NBA紀(jì)錄被文班打破了

世界體育圈
2026-04-20 12:45:16
魏建軍提議私家車10年后再年檢,用OBD和車聯(lián)網(wǎng)替代實(shí)地檢測

魏建軍提議私家車10年后再年檢,用OBD和車聯(lián)網(wǎng)替代實(shí)地檢測

快科技
2026-04-19 08:19:03
為什么全國人民都在拒接電話?

為什么全國人民都在拒接電話?

黯泉
2026-04-18 17:00:56
中國永遠(yuǎn)的校長,死于1962年

中國永遠(yuǎn)的校長,死于1962年

最愛歷史
2024-05-20 13:30:17
隨著巴黎圣日耳曼爆大冷門1-2,法甲最新積分榜出爐:爭冠白熱化

隨著巴黎圣日耳曼爆大冷門1-2,法甲最新積分榜出爐:爭冠白熱化

側(cè)身凌空斬
2026-04-20 07:55:12
上海長征醫(yī)院浦東院區(qū)啟用,緊鄰9號線曹路站!明后天推出院內(nèi)大型義診

上海長征醫(yī)院浦東院區(qū)啟用,緊鄰9號線曹路站!明后天推出院內(nèi)大型義診

上觀新聞
2026-04-20 11:18:09
前英超裁判:加布里埃爾得感謝哈蘭德,后者順勢倒下就是紅牌

前英超裁判:加布里埃爾得感謝哈蘭德,后者順勢倒下就是紅牌

懂球帝
2026-04-20 08:00:07
字母哥離隊(duì)倒計(jì)時!四隊(duì)瘋搶,雄鹿超市即將開張

字母哥離隊(duì)倒計(jì)時!四隊(duì)瘋搶,雄鹿超市即將開張

茅塞盾開本尊
2026-04-20 12:22:09
于海青:為何說廣東黃坤明書記不斷下基層讓企業(yè)信心滿滿?

于海青:為何說廣東黃坤明書記不斷下基層讓企業(yè)信心滿滿?

于海青
2026-04-19 19:54:18
2026-04-20 12:59:00
51Testing軟件測試網(wǎng) incentive-icons
51Testing軟件測試網(wǎng)
中國軟件測試人的精神家園
1558文章數(shù) 13260關(guān)注度
往期回顧 全部

科技要聞

藍(lán)色起源一級火箭完美回收 客戶衛(wèi)星未入軌

頭條要聞

媒體:伊朗剛說不談 美國立即開打

頭條要聞

媒體:伊朗剛說不談 美國立即開打

體育要聞

七大獎項(xiàng)候選官宣!文班或全票DPOY

娛樂要聞

鹿晗生日上熱搜,被關(guān)曉彤撕下體面

財(cái)經(jīng)要聞

月之暗面IPO迷局

汽車要聞

把天門山搬進(jìn)廠?開仰望U8沖上45度坡的那刻 我腿軟了

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

房產(chǎn)
家居
本地
藝術(shù)
公開課

房產(chǎn)要聞

官宣簽約最強(qiáng)城更!海口樓市,突然殺入神秘房企!

家居要聞

自然慢調(diào) 慢享時光

本地新聞

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

藝術(shù)要聞

王羲之《換鵝帖》尚在人間,驚艷無比!

公開課

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

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