| name | test-review |
| description | 審查 auto-regression repo 中的 pytest-playwright 測試、page objects、fixtures、與 visual regression 變更。當使用者要 code review 測試變更、檢查 PR diff、或請求審查測試品質與架構風險時,使用此 skill。 |
Purpose
用於此 repo 的測試變更 review 工作,包含:
- 審查 pytest-playwright testcase 變更。
- 審查 page object / component object / fixture 調整。
- 檢查 visual regression baseline 與 reference screenshot 相關改動。
- 找出 flaky test、脆弱 selector、錯誤抽象與高風險 regression。
- 檢查變更是否仍適合未來 multi-site 擴充。
Repo context
- 技術棧:Python + pytest-playwright。
- 雙系統 multi-site 架構:
- 前台(玩家端):
pages/factory.py 用 registry dict 依 site_id 路由;page objects 位於 pages/<site_id>/;測試位於 tests/<site_id>/。
- 後台 dashboard(代理/管理端):
pages/dashboard/factory.py(獨立 registry);page objects 位於 pages/dashboard/<site_id>/;測試位於 tests/dashboard/<site_id>/。
- API 層:無 factory,requests 直打;測試位於
tests/api/<site_id>/。
- 前台與後台為兩套獨立系統,禁止互相 import。
- 已註冊站點以兩個 factory 的 registry 為準,不要憑記憶推論。
- 每站有自己的
tests/<site_id>/conftest.py(前台)或 tests/dashboard/<site_id>/conftest.py(後台),覆寫 site_config 與站台特定 fixture。
- 全域
conftest.py 的 _new_configured_page() 注入 toast-confirm-btn MutationObserver(rc 站專有),其他站需在自己的 conftest 覆寫 page fixture 移除此注入。
- 截圖系統透過
get_screenshotter(page) 運作,POM 方法中應有截圖呼叫。
- LT 站目前採 reference screenshot 策略:輸出至
screenshots/lt/vr_reference/ 供人工確認,不做 pixel 比對(跨環境無法穩定)。tests/lt/__snapshots__/ 為舊 baseline,無測試引用。
- 未來站點會增加,review 需同時評估結構可延伸性。
Review priorities
- correctness:變更是否真的符合測試意圖。
- reliability:是否引入 flaky wait、脆弱 selector、隱性 race condition。
- architecture:是否破壞既有 multi-site / POM / factory 結構。
- maintainability:是否新增重複 flow、命名混亂、難以維護的 helper。
- scalability:是否把任何特定站點寫死在共用層,導致新增站點需修改 factory 以外的程式碼。
- regression risk:是否影響
conftest.py、pages/factory.py、pages/dashboard/factory.py、snapshot baseline、跨站共用行為。
- system isolation:前台檔案是否有 import 後台 page(或反向)、共用層是否誤用單一系統的特性。
Review checklist — common pitfalls
以下為此 repo 已知的高頻問題,review 時應逐項檢查:
Selector 問題
Interaction 問題
Fixture 問題
Multi-system 問題(前台 / 後台 / API 分離)
後台 state-mutating 測試問題(會改動真實資料的測試)
後台測試常涉及對真實會員/代理進行存入、提取、額度調整等動作,review 時針對會改變後端狀態的測試逐項檢查:
具體實作 pattern 可為「對稱還原 + try/finally 反向補償」、「fixture teardown 中還原」、或「teardown 時 diff 餘額反向補償」 — review 重點在「狀態可預測性」,不限定 pattern。
Factory / POM 問題
Screenshot 問題
Visual regression 問題
Regression cover-up patterns(隱藏 fail 的反模式)
若 PR 在沒對應產品變更下,把原本 fail 的 test 改成 pass,這是高優先級 blocking。常見反模式:
判斷原則:若 diff 中有上述任一 pattern,必須在 PR description 明確說明對應的產品變更(issue 編號 / 設計文件 / 主管 ack 等);無對應依據則建議補產品 ticket 確認後再合,或要求改回原 assertion 並回報 product team 確認是否為 regression。
文檔同步問題(依 CLAUDE.md 文檔維護對照表)
code 變動是否更新了正確的 doc(不是隨便動一份 .md 過 hook)。對照 CLAUDE.md 的「文檔維護對照表」逐項檢查:
High-risk change rules
- 下列變更需特別提高警覺:
conftest.py、pages/factory.py、pages/dashboard/factory.py、snapshot baseline、fixture 新增/更名/行為變更、visual regression assertion 調整。
- 若 PR 含 snapshot 更新,需要求說明為何屬於產品預期變更。
- 若 PR 同時改 page object API 與多個 tests,需檢查是否有隱性破壞或未覆蓋流程。
- 若共用 helper(
utils/dialog_helper.py、utils/screenshot_helper.py、utils/locale_helper.py)被修改,需評估是否波及所有既有與未來站點使用方式。
- 若新增站點,需檢查是否完整走完 onboarding checklist — 詳見
ui-test-author skill 的「Adding a new site — checklist」三分支(A. 前台 / B. 後台 / C. API)。Review 時逐項核對該 checklist,任一分支缺漏需明確標示。前台是必須;後台 / API 視該站需求而定。
Review comment rules
- 先指出 blocking issues,再指出 non-blocking improvements。
- 評論需具體,指出檔案、行號、風險、原因與建議修法。
- 若變更可接受但仍有 trade-off,應明確註明風險而非直接否定。
- 若沒有明顯問題,也要簡短說明為何風險可控。
- 不要只做風格 nitpick 而忽略 flaky、regression 與擴展性風險。
Output expectations
review 結果應包含:
- Blocking issues(若有):附檔案路徑、問題描述、建議修法。
- Non-blocking improvements(若有):附具體建議。
- 受影響範圍與風險摘要:哪些 fixture / 站點 / snapshot 可能受波及。
- Multi-site 擴展性評估:是否把現況寫死,或結構可延伸。
- 建議驗證指令:targeted pytest 為主,指定到檔案或 marker 層級。