「自動化測試的終極目標,從來就不是『讓所有測試案例都亮綠燈』,而是『打造一個讓團隊敢在週五下午安心發版的品質信任平台』。」
大家好,我是 Jane,一個每天在第一線處理跨平台(Web & App)自動化測試、跟 CI/CD Pipeline 與品質體系奮戰的自動化測試工程師(SDET)。
恭喜你!跟著我一路堅持到了第 30 天。
在過去的 29 天裡,我們從自動化測試策略、Clean Code、Page/Component Object、抗脆性等待與定位器,一路解鎖到 Flaky test 治理、測試資料工廠、API 深度驗證、CI/CD 管道分層、平行執行,以及 AI 輔助測試。
今天,在整個系列的最後一篇文章中,我想帶大家站在更高維度的視角,來聊聊自動化測試的終極藍圖:我們做了這麼多努力,自動化測試的終極目標究竟是什麼?身為第一線 SDET,我們的職涯又該如何持續進化?
回顧一個團隊導入自動化測試的過程,通常會經歷以下 4 個階段:
┌─────────────────────────────────────────────────────────────────┐
│ 自動化測試成熟度 4 大階段 │
├─────────────────────────────────────────────────────────────────┤
│ Level 1. 腳本時代 (Scripts) ──▶ 個人寫個別 .py,Local 跑,極易壞 │
│ Level 2. 框架時代 (Framework)──▶ 引入 pytest/POM/Fixtures 模組化 │
│ Level 3. 流水線時代 (CI/CD) ──▶ 進入 PR Gate,自動化攔截 Bug │
│ Level 4. 平台時代 (Platform) ──▶ 數據驅動、零阻力、團隊高高度信任 │
└─────────────────────────────────────────────────────────────────┘
.py 檔案。沒有分層、寫死資料、充滿 time.sleep。要達到 Level 4 的「品質平台」,SDET 不能只看 pytest 的控制台輸出,我們需要將自動化測試的執行結果、通率過與 Flaky 趨勢數據化。
我們可以透過 pytest Hook,在每次 CI 執行完畢後,將品質指標自動推送到 Metric 系統(如 Datadog、Prometheus 或 Slack):
Python
# tests/conftest.py
import time
import requests
import pytest
# 紀錄全套測試開始時間
SESSION_START_TIME = 0
def pytest_sessionstart(session):
global SESSION_START_TIME
SESSION_START_TIME = time.time()
def pytest_sessionfinish(session, exitstatus):
"""
pytest 鉤子:當整個測試套件執行完畢時,自動統計品質指標並推播至團隊頻道
"""
duration = round(time.time() - SESSION_START_TIME, 2)
# 統計測試結果數據
reporter = session.config.pluginmanager.get_plugin("terminalreporter")
passed = len(reporter.stats.get("passed", []))
failed = len(reporter.stats.get("failed", []))
skipped = len(reporter.stats.get("skipped", []))
total = passed + failed + skipped
pass_rate = round((passed / total * 100), 2) if total > 0 else 0
# 構造品質平台指標 Summary
metrics_payload = {
"text": f"🚀 *iThome 鐵人賽 CI 自動化測試執行報告*\n"
f"• *總案例數*: {total}\n"
f"• *成功率 (Pass Rate)*: `{pass_rate}%` (Passed: {passed}, Failed: {failed})\n"
f"• *總執行時間*: `{duration} 秒`\n"
f"• *環境/分支*: `{session.config.getoption('--env', default='Staging')}`"
}
print("\n[Quality Platform] 自動化測試執行指標摘要已產生:")
print(metrics_payload["text"])
# 可在此呼叫 Webhook 將數據發送至 Slack / Teams Channel 或 Prometheus
# requests.post("https://hooks.slack.com/services/xxx", json=metrics_payload)
在這個 AI 與自動化高速發展的時代,身為跨足 Web 與 App 雙平面的 SDET,我送給所有同行與讀者 3 個心法:
從 Day 1 到 Day 30,我們共同完成了一套完整的 Python + pytest 自動化測試知識體系:
謝謝你這 30 天來的陪伴!希望這個系列文章能成為你在自動化測試與 SDET 職涯道路上,隨時可以翻閱查閱的實戰手冊。
我是 Jane,我們在軟體品質與自動化測試的高峰相見!