第 2 集:慕尼黑的瓦西里 (Vasilii) (2019 年 5 月)
上一集
不穩定測試是 Chrome 的常見問題。他們 可以提高其他開發人員的生產力,並隨著時間的推移而停用。 停用測試代表測試涵蓋範圍會降低。
分類階段
目錄的 OWNERS 會負責修正不穩定的測試。 如果您收到錯誤測試相關錯誤,請花幾分鐘時間 評論發生錯誤之處。如果測試版本較舊 如果系統不清楚問題所在,請直接重新啟用測試。 如果其他元件明顯有問題,請盡快重新指派錯誤。 該元件的擁有者應更明確地判斷失敗情形
偵錯階段
許多指令列標記都適合
修正不穩定的測試例如:--enable-pixel-output-in-tests
會顯示實際的瀏覽器使用者介面
在偵錯工具變成不穩定時,提供備用工具。是
可能的原因是,在偵錯工具下,測試永遠不會中斷。在此情況下,
陳述式或 base::debug::StackTrace
都相當實用。
除了實際工作環境中的錯誤以外,請留意 EXPECT__*
錯誤的常見原因
程式碼:
- 不符預期 (例如安全網頁是指 HTTPS,但可以是 localhost)。
- 因測試未等待適當事件而產生的競爭狀況。
[不要測試導入情況][非導入],而是行為。
// It takes 2 round trips between the UI and the background thread to complete.
SyncWithTheStore();
SyncWithTheStore();
CheckTheStore();
兩次來回行程可能會在日後變成三個,導致測試運作不穩定。 然而,只有商店狀態具有關聯性。請改用 也就是經過處理且會導入模型的資料 接著再透過特徵儲存庫與他人分享
請留意下列常見模式:
Submit TestPasswordForm(); // Wait until things settle down. RunLoop().RunUntilIdle(); CheckCredentialPromptVisible();
瀏覽器測試中的類似上述程式碼片段幾乎沒有錯誤。 可能會在不同程序中發生許多事件, 一些 UI 執行緒。
以下是正確的修正方式:
SubmitTestPasswordForm(); WaitUntilCredentialPromptVisible();
在以下情況中,上述修正方法正確無誤:
WaitUntilCredentialPromptVisible()
實際上不會檢查 UI。
瀏覽器測試不應仰賴外部 UI 事件,例如「聚焦遺失」
或「視窗變成前景」等假設在導入作業中
,這類的實作方式
是正確的;不過,檢查實際視窗會導致測試發生問題。
修正後階段
測試修正完畢後,即可在本機執行數百次。請留意 Flakiness Portal 入口網站。