偶現 Bug 怎麼排查:不穩定測試(flaky test)與時好時壞問題定位提示詞
測試在 CI 裏時過時不過、線上問題一天出現幾次卻本地復現不了時用:讓 AI 按「時間、順序、共享狀態、環境、外部依賴」五類原因逐一排查,給出提高復現率的辦法和要加的診斷日誌,而不是直接猜一個修法。
通用大模型 對話模型通用
你是一名擅長排查「偶現問題」的資深工程師。偶現問題的特點是:直接看代碼往往看不出錯,必須先想辦法讓它穩定復現。 問題情況: - 技術棧與運行環境:[語言/框架/CI 平台] - 現象:[失敗時的報錯或表現] - 出現頻率:[如 20 次跑 3 次失敗] - 只在哪些條件下出現:[如只在 CI、只在並行跑、只在凌晨] - 相關代碼(測試代碼 + 被測代碼): [粘貼代碼] - 已經試過的辦法:[已嘗試] 請按下面順序工作: 1. 先判斷屬於哪一類,逐類說明「是否可能、依據是什麼」: - 時間相關:依賴當前時間、時區、夏令時、超時設定太緊、sleep 等待; - 順序相關:測試之間共享全局變量、數據庫數據、緩存、單例,換順序或單獨跑結果不同; - 並發相關:異步未等待完成、競態、線程池、事件循環; - 環境相關:CPU 慢、機器時區、語言區域、文件系統大小寫、隨機端口衝突; - 外部依賴:網絡請求、第三方服務、未固定的隨機數種子、未鎖定的依賴版本。 2. 給出「提高復現率」的具體做法,例如循環跑 N 次、打亂測試順序、限制 CPU、固定或改變隨機種子、把等待時間調小放大問題,寫出對應命令。 3. 列出要加的診斷資訊:在哪幾行打什麼日誌、記錄哪些變量,能區分你列出的幾種假設。 4. 針對可能性最高的兩個原因,各給一個修復方案;說明為什麼修復後不再偶現,而不是「把超時調大」「加重試」這種掩蓋問題的做法。如果只能臨時加重試,明確標註為臨時措施並說明風險。 5. 給出驗證方法:修復後要連續跑多少次、在什麼條件下跑,才能說明問題解決了。 約束:不確定的地方寫「需要以下資訊確認」;不要建議直接刪除或跳過這個測試,除非同時給出替代的覆蓋方式。
高亮處換成你自己的內容:[語言/框架/CI 平台]、[失敗時的報錯或表現]、[如 20 次跑 3 次失敗]、[如只在 CI、只在並行跑、只在凌晨]、[粘貼代碼]、[已嘗試]
ChatGPT Plus 充值
已被複製 0 次
使用說明
怎麼填變量:[出現頻率] 和 [只在哪些條件下出現] 是最關鍵的線索——「只在 CI 失敗」多半是環境或並行問題,「單獨跑能過、整套跑不過」幾乎一定是測試之間共享了狀態。測試代碼和被測代碼都要貼,只貼測試很難判斷。
常見坑:
- 最常見的「修法」是把等待時間從 1 秒改成 5 秒,問題會變少但不會消失,還讓整套測試變慢。正確做法是等待一個明確條件(元素出現、消息到達、任務完成)。
- 時間類問題經常藏在「月底、跨年、凌晨 0 點、夏令時切換」這些邊界上,可以讓 AI 寫一個把系統時間固定到這些時刻的測試。
- 偶現問題修完要多跑幾十次再下結論,跑一次通過說明不了什麼。
追問技巧:加完診斷日誌、拿到一次失敗的完整日誌後貼回去,說「根據這份日誌,排除掉哪些假設、剩下哪個最可能」。
示例輸出
示例,僅供參考(現象:訂單列表測試在 CI 上約 15% 失敗,本地單獨跑全過)
| 類別 | 可能性 | 依據 |
|---|---|---|
| 順序相關 | 高 | 測試用 created_at 倒序取第一條,而另一個測試也往同一張表插數據,未清理 |
| 時間相關 | 中 | 兩條數據在同一毫秒插入時排序不穩定 |
| 並發相關 | 低 | 未見異步調用 |
提高復現率:
bash
# pytest:隨機順序 + 重複 50 次(需安裝 pytest-randomly、pytest-repeat)
pytest tests/test_orders.py -p randomly --count=50 -x
修復方案:每個測試在獨立事務裏運行並回滾;排序改為 ORDER BY created_at DESC, id DESC,保證同一時間戳下順序穩定。
同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~