Chat. 8 驗收測試階段
20180927
驗收測試階段
● 驗收測試應該被放進部署流水線中(在較後面的階段),所以:
○ 驗收測試失敗的版本不能被部署
○ 保持驗收測試一直在通過的狀態
○ 測試失敗時應停下來並想辦法解決
● 問題:
○ 誰是驗收測試的負責人?
○ 如何在相對複雜的驗收測試中找到問題?
誰是驗收測試的負責人?
● 整個交付團隊(含開發團隊與測試團隊)都有維護驗收測試的責任
○ 讓開發團隊知道此次修改可能會產生的影響
○ 不讓測試團隊被修復測試及實作新的測試淹沒
● 縮短「某次修改造成問題」到
「發現需要修改驗收測試以因應修改」的時間
讓失敗可視化
○ 指定Build master (建置負責人)
○ 熔岩燈
○ 建置顯示器
○ ...
找到「罪魁禍首」
● 情境一:
○ 在兩次驗收測試之間可能有多次提交 ->
追蹤上次成功到此次失敗中的所有commit tags
● 情境二:
○ 自動化UI測試失敗 -> 把UI測試過程錄影下來,若失敗就把影片上傳
部署測試
● 測試環境與生產環境盡量一致(含作業系統及中間件) ->
驗證類生產環境自動化部署是否成功的最早機會(有時稱基礎設施測試)
○ 執行小部分的冒煙測試並確認各元件的通訊是正常的
○ 為更多功能性測試提供完好的初始狀態
○ 部署測試是一種特殊的測試,如果失敗就讓整個驗收測試失敗,因為基礎設施未準備好,其他
測試可能都要等到超時才結束
● 食蟻獸點名(Aardvarks):
○ 確保環境測試優先,以加速失敗
驗收測試的性能
● 因為目標是驗證程式是否符合使用者的期待,所以保持自動化驗收測試的結構
與連貫性比執行速度(10分鐘內完成)更重要,執行幾個小時仍可接受,但依舊
有技術可以提供效率:
○ 重構通用的任務
○ 共用昂貴資源
○ 並行測試
○ 使用computing grid
重構通用的任務
● 在測試準備期間提高相同步驟的效率:準備「種子資料」、使用公用API,讓
測試在執行通用任務時的程式碼是相同的
並行測試
● 當測試間是獨立時,可以利用不同的使用者帳號在同一個系統上並行測試
使用計算網格
VM
驗收測試套件
Selenium Grid
VM
受測系統
web server
Amazon EC2
Webbrowser
Selenium
Remoting
Amazon EC2
Webbrowser
Selenium
Remoting
Amazon EC2
Webbrowser
Selenium
Remoting
...
公司內的系統
小結
● 驗收測試的目的:
○ 讓所有成員關注軟體是否滿足業務需求
○ 在大規模修改時提供保護
○ 讓測試團隊專注在真正需要手動測試的測試(探索性測試、易用性測試、使
用者驗收測試、showcase)

Continuous Delivery Chat8

Editor's Notes

  • #3 驗收測試屬於部署流水線的一部分 所以也需要符合前幾章提到的原則 像是驗收測試失敗的建置版本不能被部署保持驗收測試一直在通過的狀態、當測試失敗時要立即停下來評估問題並想辦法解決他 如果開發人員沒有等測試執行通過
  • #4 好處是開發人員才能知道做了此修改可能會產生的影響(e.g.破壞驗收測試) 第三張提過的鈴聲和口哨
  • #5 驗收測試不像單元測試那麼單純 單元測試可能在commit之後就壞了 很容易辨識 如何找到問題呢?書裡有一些案例,比如說案例一,在兩次驗收測試之間可能會有多次的commit 失敗的機率變大了 需要設計流水線追蹤跟每次驗收測試有關的commit
  • #6 若成本較高可以使用虛擬技術來模擬生產環境 作者用junit測試 因為是按照字母順序 所以用aardvarks做環境測試 90分鐘->30小時