iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Software Development

測試工程師的上線時間:從分析到實戰的刻意練習系列 第 24

Day 24:開發流程中的隱藏守護者 - 效能測試

  • 分享至 

  • xImage
  •  

前言

今天讓我們輕鬆聊聊「如何將效能測試整合到 CI/CD 流程中」。昨天的練習讓我們了解到,效能測試是開發流程中的一個重要環節,卻常常因為它耗時且看似繁瑣而被忽視。很多團隊會認為效能測試既耗時又費力,常常在進度壓力下被當作「可選項目」。但實際上,效能測試不僅重要,它應該是 CI/CD 流程中的一部分,而不是最終的「補救措施」。


效能測試 VS CI/CD

效能測試耗時,這是無可否認的。當你需要模擬大量並行請求,或壓力測試 API 和系統時,這可能需要耗費幾分鐘甚至幾小時才能完成一次完整的測試。而 CI/CD 強調的是「快速反應」與「快速迭代」,目的是把新功能、修復及優化快速佈署生產環境。

這似乎形成了一個天然的衝突——如何在「快速」開發與釋出的流程中加入一個「耗時」的效能測試?這就是我們今天要討論的重點:如何找到平衡,讓效能測試既能為我們提前發現問題,又不會拖慢 CI/CD 流程?


為什麼效能測試應該整合至 CI/CD 流程?

  1. 提前發現瓶頸:如果等到上線後才進行效能測試,你可能會在真實用戶體驗到系統緩慢甚至崩潰時才發現問題。這時候再回頭調整架構或優化效能,不僅耗時,還會帶來巨大的運營損失,將效能測試整合至 CI/CD,能幫助我們在每次版本發不前就發現潛在的瓶頸,避免因效能問題造成的「大災難」。

以下圖片「Bug 修復成本曲線」,它反映了修復軟體問題的成本會隨著時間的推移逐漸增加**的趨勢。

https://ithelp.ithome.com.tw/upload/images/20241007/2016944276qbWtIyd9.png

  1. 確保每次變動不會降低:效能問題有時候是很隱性的,尤其是當我們進行頻繁的功能更新或優化時,一個不小心的改動可能導致效能下滑。如果我們在每次合併分支時都跑效能測試,就能在每次變更時確保效能維持在理想的範圍內,不至於發現得太晚。

  2. 減少人力監控成本:效能測試可以通過自動化整合到 CI/CD 流程中,減少人工監控的需求。這樣一來,你可以將精力集中在其他更重要的業務需求或架構優化上,而不是每次都需要手動跑效能測試。


如何將效能測試整合到 CI/CD 中

1. 小範圍的快速測試

效能測試可以分成不同層次,不必每次都進行全面的壓力測試。你可以在 CI 階段跑一些小範圍的效能測試,用來驗證基本的效能指標(例如:API 回應時間)。使用 k6Locust 這類工具,模擬少量並行請求來快速檢查系統的基礎效能。而這樣的測試可以在幾分鐘內完成,就像昨天的練習使用 5 分鐘的時間就可以發現潛在的問題,這不會拖慢 CI 流程。你可以把這類快速效能測試作為「守門員」,保證每次版本的變更不會在基礎效能上出現問題。

2. 完整的壓力測試

對於壓力測試,考慮到時間問題,我們可以將它安排到夜間自動執行,或在準備佈署到生產環境前的「最後一哩路」中進行。這種壓力測試可以模擬真實使用者的負載和並行情況,來檢查系統在高負載下的表現。

例如,使用 k6 Cloud 可以進行大規模的雲端壓力測試,將測試報告整合到你的 CI/CD 並透過自動產生的報告來分析測試結果。

3. 監控和警示

除了定期的效能測試,也應該將效能監控整合到 CI/CD 流程中。使用工具如 Prometheus 和 Grafana,即時監控系統效能指標,並設定警示來監測效能的突然下滑。這樣即使 CI/CD 自動化測試中沒有發現問題,我們也能在實際生產環境中快速找到效能問題。

練習與思考

  1. 如何讓效能測試更高效地與 CI/CD 整合?考慮如何平衡效能測試的時間和精細度,保證測試不會拖慢開發流程,但仍然能夠有效檢測到效能問題。
  2. 你的效能測試策略是什麼? 是跑全面壓力測試,還是只針對特定的部分進行快速檢測?
  3. 如何將效能監控與 CI/CD 流程更緊密地整合?思考如何利用監控工具即時追蹤生產環境的效能指標,並在問題出現前時發現。

結論

效能測試雖然耗時,但它是整個 CI/CD 流程中不可或缺的一部分。透過小範圍快速測試與完整壓力測試相結合,我們可以在不影響開發進度的情況下,提前發現效能瓶頸,確保每次釋出的效能穩定。


上一篇
Day 23:我的 API 不可能這麼慢吧!看看 K6 怎麼拯救它
下一篇
Day 25:悟空,你又調皮了!金箍棒 Chaos Toolkit 大鬧天庭!
系列文
測試工程師的上線時間:從分析到實戰的刻意練習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言