iT邦幫忙

2026 iThome 鐵人賽

DAY 26
0
Software Development

下載器不是寫完就能跑:一個 HLS 分段式串流工具的架構與測試修練系列 第 26 篇

Day 26:固定資料(fixture)要多真實——全真實內容 vs 只留測試需要的片段

  • 分享至 

  • xImage
  •  

前言:測試用的頁面 HTML,要整份存下來嗎?

測試爬蟲解析邏輯時,最直覺的做法是把某個真實頁面的完整 HTML 存成一份 fixture 檔案,測試時讀取它、跑解析邏輯、斷言結果。但一份真實頁面的 HTML 常常有幾十 KB,裡面絕大部分內容(廣告區塊、頁尾、無關的側欄)跟這段解析邏輯完全無關。

今日目標

  • 認識兩種 fixture 設計方式的取捨:整份真實內容 vs 精簡到只留必要片段
  • 理解各自的優缺點跟適用情境
  • 知道怎麼判斷該用哪一種

兩種取捨

整份真實內容:優點是最貼近真實情況,如果來源站的頁面結構有某個你沒注意到的細節(例如某個屬性只在特定條件下才出現),整份存下來比較不容易漏掉;缺點是檔案龐大、可讀性差——測試失敗時要在幾十 KB 的 HTML 裡找出跟這次測試相關的那一小段,並不輕鬆。

精簡到只留必要片段:優點是 fixture 檔案小、可讀性高,測試失敗時能直接看懂 fixture 裡有什麼、預期解析出什麼;缺點是精簡的過程可能不小心刪掉了某個「當下覺得無關,實際上會影響解析結果」的細節,變成一份跟真實情況有落差的假資料。

一個折衷做法:保留結構,替換內容

實務上常見的折衷是:保留頁面的真實 DOM 結構(class 名稱、巢狀層級),但把不影響測試的內容(大量文字、圖片位址、不相關的區塊)替換成精簡的佔位內容。這樣 fixture 檔案體積下降,可讀性提升,同時保留了「解析邏輯依賴的真實結構」,不會因為精簡過頭而遺漏會影響解析結果的細節。

判斷依據:這份 fixture 的目的是驗證什麼

選哪一種取捨,取決於這份 fixture 存在的目的:如果目的是「驗證解析邏輯能正確處理某個真實來源的完整結構」(例如第一次針對某個新來源寫解析邏輯時),保留完整內容比較保險;如果目的是「驗證某個已知邊界情況的處理邏輯」(例如 Day 05 講過的項目編號解析例外),精簡到只留下觸發那個邊界情況所需要的最小片段,測試意圖會更清楚,也更容易維護。

今日思考題

你的測試 fixture 是整份真實資料,還是精簡過的片段?如果是精簡過的,你怎麼確認精簡過程沒有不小心刪掉會影響測試結果的細節?

今日重點回顧

  • 整份真實 fixture 貼近真實情況但體積大、可讀性差;精簡 fixture 可讀性高但有遺漏細節的風險
  • 折衷做法:保留真實 DOM 結構,替換不影響測試的內容
  • 該用哪種取捨,取決於這份 fixture 是要驗證「完整結構的處理能力」還是「特定邊界情況的處理邏輯」

明日預告

明天是一個案例:一個看似綠燈的測試,其實沒斷言到真正關鍵的行為。


上一篇
Day 25:案例——先產生一份用已知金鑰加密的假資料,反過來驗證解密邏輯
下一篇
Day 27:案例——一個看似綠燈的測試,其實沒斷言到真正關鍵的行為
系列文
下載器不是寫完就能跑:一個 HLS 分段式串流工具的架構與測試修練 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言