跳至內容

Rust 不穩定測試

Tuist 能偵測不一致的 Cargo 測試結果,並協助你在 測試 → 不穩定測試 中進行調查。

Requirements

不穩定測試偵測運作方式#

Tuist 會比較同一個 commit 上的 CI 執行結果。若某個測試在一次執行中通過,而在另一次執行中失敗,即可標記為不穩定。

透過一般指令回報每次執行:

bash
tuist cargo test --workspace

Cargo 不會自動重試失敗的測試。在同一個 commit 上重新執行 CI 工作,可提供另一筆結果以進行跨執行偵測。

管理不穩定測試#

自動清除#

偵測與復原會透過專案的「不穩定測試偵測」自動化流程執行。預設情況下,若 14 天內未再次觸發,不穩定標記將會清除。請在 設定 → 自動化 下編輯復原時間範圍與動作。

手動管理#

開啟 測試 → 不穩定測試 以檢視測試歷史記錄。你可以從詳細頁面手動將其標記或取消標記為不穩定。

隔離與壓力測試#

從詳細頁面將測試靜音或略過,或在 設定 → 自動化 中設定隔離。下一個 tuist cargo test 會抓取專案目前的隔離狀態:

  • 靜音 的測試仍會執行並回報實際結果,但其失敗不會導致指令失敗。其他測試失敗、編譯錯誤、崩潰以及不完整的結果仍會正常導致失敗。
  • 略過 的測試會被排除於執行之外,並以隔離略過來回報。比對條件包含套件、目標、Rust 模組路徑與測試名稱,因此名稱相似的測試仍保持獨立。

靜音會保留所選的工作區套件與功能,並執行所有選取的目標,即使被靜音的目標失敗亦然。略過隔離需要選取單一套件:請使用 tuist cargo test -p store,而非多套件工作區指令。Tuist 拒絕多套件略過,因為縮窄指令範圍可能會改變 Cargo 的統一相依性功能。

隔離也適用於 分片的 Cargo 執行。若 Tuist 無法抓取狀態,它會發出警告並在無隔離的情況下執行;失敗不會被抑制。若要刻意在無隔離的情況下執行:

bash
TUIST_TEST_SKIP_QUARANTINE=1 tuist cargo test --workspace

強制執行需要標準的 libtest harness 與捕捉的預設輸出。當需要套用隔離時,使用安靜模式、詳細模式、替代格式或未捕捉輸出的指令將會失敗。若目標歸屬不明確,請使用 -p <package> 選取精確的工作區套件。自訂 harness、套件/目標名稱萬用字元,以及未解析的套件選取皆不受支援。文件測試也可以被靜音或略過,但 Rustdoc 的測試過濾無法區分每一組可能的範例名稱配對。若略過某個範例也會同時略過已啟用的範例,或部分文件測試排除使用 --exact,Tuist 會以診斷訊息失敗,而不會執行被略過的範例或靜默省略已啟用的測試;在調查期間請使用上述覆寫方式。

Tuist 不會對新的 Cargo 測試進行壓力測試。在調查失敗測試時,請使用 Cargo 測試過濾器來重複執行該測試:

bash
tuist cargo test -p store rejects_invalid_token

Slack 通知#

設定 Slack 不穩定測試警示,以便在測試變得不穩定時通知你的團隊。