[CD心得] 5 Reasons Your Automated Tests Fail - 五種讓你自動化測試失敗的元因
我們都希望透過測試自動化, 來讓測試夠方便一點, 或是把人力投入在更有效率的地方
手動的做每一次的回歸測試 (Regression), 對人力的消耗是非常大的
事實上 regression test 不太適合由人去執行...
regression test 理想上是可以完全重複, 我們希望在每一個的測試,執行一樣的步驟, 得到一樣的結果
這件事由人做會比機器做得更精準嗎?
這是我們選擇做test automation 的原因, 那我們對automation 的期待是什麼?
在沒有任何變動的情況下, 我們希望相同的版本和相同的環境能得到相同的結果
更重要的是我們希望系統或功能真正出現問題的時候失敗,
但是要做到這一點非常的難...
我們常常會遇到測試的不穩定 (Test Flaky) 帶給我們不可預期的結果
不穩定帶我們的結果是什麼?
在沒有任何變動的情況下, 綠燈, 紅燈交互出現
你選擇相信哪一個?紅燈?綠燈?
這種flaky 的情況下, 選擇哪一個都是在欺騙自己...
在沒有查看之前,你不會知道是真的有功能壞掉, 還是只是假警報
如果你不相信automation 帶給你的測試結果, 這樣寫automation 還有意義嗎?
Treat Tests as Falsification, Not a Proof
Test Automation 執行過後沒有噴出任何錯誤, 不代表系統沒有錯
有可能是你的測試寫錯了, 或是沒有涵蓋到這一塊
但是我們可以換一個角度想, 會讓我們更有信心
當automation fail 的時候, 代表是真的遇到了問題
五個會導致Automation Flaky 的原因
- 環境 (Environment)
- 測試資料 (Test Data)
- 版本控制 (versioning)
- 資源限制 (Resource Use)
- 系統行為 (System Behavior)
環境 (Environment)
如果我們的Automation 所使用的環境以任何方式的不穩定, 這些可能是配置上的改變或是依賴第三放的服務, 這些變化都是我們不可預測及掌控的
最常遇到的說法是 在我的環境或是local 跑起來是好的啊~~
如果程式碼都一樣, 最大的差別就是測試環境了
當automation 太依賴環境的配置時, 任何微小非關程式碼的變化都有可能影響結果
最可靠的方式是讓我們系統中對主機環境盡可能地去做控制
Test in accurate simulations of production Environment
如果在測試過程中發現有哪些東西是無法控制的, 那你必須要清楚知道你要測試的範圍是哪些?
才能讓你有足夠的信心
測試資料 (Test Data)
我們希望測試是可以重複的, 而且每一條case 都是獨立且可以隨意變換順序的執行
所以會希望測試之間是彼此被隔離的
Good Tests are Atomic
這樣我們就可以確保在相同環境相同程式碼下執行, 可以得到相同的結果
我們可以將Test Data 分成三個層級的Test isolation
最簡單的想法是我每一隻執行的case 都有自己隔離開的副本, 當你執行完之後
可以隨意丟棄這些測試過的資料, 不會影響到另一個測試
當做到這層隔離時, 更意外著每一隻case 都可以獨立的執行, 更可以被平行的執行
這會讓總體的執行時間縮短非常多
但要做好這件事情需要更精準地做好case 的顆粒控制
No Shared Writable Data between Tests!
版本控制 (Versioning)
當有很多團隊一起合作的時候, 怎麼樣去決定他是可以發布的?
Is It Releasable ?
第一種是每個團隊的程式碼都是自己獨立, 無需參考其他團隊的執行結果
只要跑過自己的測試沒有問題就可以上線了
這是最具有擴充性的做法, 也就是我們知道的微服務 (Microservices)
但是不是每個團隊都可以把程式碼拆的那個開, 就講到的第二種方法
這種情形下我們可能需要的是哪個版本可以在一起工作的清單, 然後一起做測試
這種做法會需要比較長時間溝通跟互動
資源限制 (Resource use)
我們常常會在測試環境的機器給予小的規格或資源, 主因是測試用的機器不用開到跟real service 一樣的, 避免造成浪費
在可能會引發只有在測試環境才會產生的問題, 會讓你花更多的時間去處理不會真正發生在真實環境的問題, 如果可以的話就讓測試環境的資源跟真實環境一樣
至少遇到的資源限制問題會是真的
系統行為 (System Behavior)
處理在執行中的競爭條件 (Race condition)
Control the Variables
Design for Determinism
如果可以做到上面講的消除flaky 的所有原因, 那你的automation 就會非常的穩定
當Automation 出現失敗的訊號時.... 那就代表你的系統真的壞掉拉~~
留言
發佈留言