Skip 與 Fail 是兩種語意不同的測試訊號:skip 回答「這次沒能驗證」,fail 回答「驗證了、結果不對」。兩者的分界依成因分兩類——環境暫時不可達走 skip,需要人介入才能恢復走 fail。跟 quarantine 的分工不同:quarantine 處理「已知會紅、暫時擋住」的測試,這裡處理的是同一次執行內、依成因分岔的兩種輸出路徑。

概念位置

分岔點在「連不上」與「連得上但被拒」之間:連線層錯誤(TCP 逾時、DNS 解析失敗)代表環境當下不可達,這是暫時狀態,環境恢復後測試自然轉綠,語意上等同尚未執行;應用層拒絕(HTTP 401/403 這類)代表憑證或設定已經腐化,需要人更新,語意上是「驗證完成、結果是壞的」。混在一起處置的代價是需要人介入的問題被歸類成環境噪音,沒人會去看。這條區分是真實後端驗證測試整體設計裡分量最重的一條,也是測試環境判定之後的下一層防線——環境判定回答「連的是哪裡」,這裡回答「連不上時該怎麼回報」。

可觀察訊號與例子

實作上的訊號是「單一 try-catch 有沒有把兩層錯誤一起吞掉」——把連線層例外與應用層例外分開捕捉,才能讓登入被拒不會被誤歸成跳過。憑證管理場景是這條區分最常出現的地方:憑證存在但無法登入(HTTP 401/403)要明確失敗、不降級為跳過;連不上後端則降級為跳過並附原因。CI 的 skip 計數若持續上升、失敗計數卻不動,是這條區分沒有落地的間接訊號——真正該亮紅的問題被吞成了噪音。

設計責任

實作時把連線層例外(socket 逾時、DNS 失敗)與應用層例外(HTTP 4xx)放進不同的 catch 分支、對應不同的測試結果,是這條語意分岔唯一可靠的落地方式。判定失敗時的預設值也要保守:無法歸類的例外比照「需要人看」的一側處理,而非預設為環境噪音——這與環境判定失敗時預設拒絕的保守方向一致。skip 計數要有行動閾值(連續 N 次全 skip 視為防線失效),否則 skip 會變成一個被長期忽略的靜默訊號。