背景
事件的起因在于老板最近的兩次“故障”,一次去年的,一次最近,共同原因都是腳手架在發布平臺發布打包時出錯,導致線上應用白屏不可用,
最神奇的是,事后多次 Code Review,結果還是沒有發現任何能夠導致該問題的 bug,最后推測有可能是服務器在發布打包的時候出了問題,
當老板第 N + 1 次吐槽因為他寫的工程化工具領來的天外飛鍋,我突然思考起來,如何才能避免這種天外飛鍋,
歸根結底,導致這類線上故障的原因都是在于打包上線的代碼沒有經過驗證,針對這個問題,有兩種方法可以解決:
- 治本,由于請求地址不同,預發(測驗)版本不可直接發線上,而線上版本缺少了上線之前的驗證程序,所以,可以通過在發布系統的預發和線上之間,新增一個 beta 發布,beta 發布使用線上發布的打包流程,不同的是,只允許內網訪問,專門用于內部測驗,有人可能會問,哪怕添加了 beta 發布,依然無法保證線上發布重新打包的時候不出錯呀?重點來了,這種解決方案的核心就在于,beta 發布測驗通過后,直接將 beta 發布的打包產物進行線上發布,因為不需要二次打包,所以避免了打包程序中產生新的問題,由于添加 beta 發布需要不同崗位,比如運維、后端、移動端的協作,所以實施難度較大,
- 治標,既然線上版本上線之前驗證不了,那么上線之后立刻回歸驗證,如果發現問題,立刻手動回滾,正所謂沒有人發現的故障就不是故障,perfect!
正如之前所說的,治本的方法實施難度較大,所以,我們重點關注治標的方法,即上線之后進行回歸驗證,
說到這里,問大家一個問題,需求上線之后,作為前端,大家會主動進行回歸驗證而不是等測驗進行驗證嗎?
不管你們會不會,反正我是不會[doge],
在這種情況下,前端 UI 自動化測驗閃亮登場,
什么是前端 UI 自動化測驗
眾所周知,測驗是一個很重要的環節,由于它的重要性,甚至軟體工程中出現了 TDD 這種說法,
在之前,所謂的前端測驗,更多的是在頁面上點點點,進行人肉測驗,毫無疑問,效率低下,
所以,有了前端自動化測驗,使用機器代替人工,一般來說,前端自動化測驗分為兩種:單元測驗以及 e2e 測驗(UI 自動化測驗),
單元測驗本質上是一種白盒測驗,是對程式中的最小可測驗單元進行測驗,
e2e 測驗本質上是一種黑盒測驗,相當于模擬用戶訪問應用程式,主要檢查界面或功能是否正確,
相比于單元測驗,UI 自動化測驗更多的是站在用戶角度,從用戶的角度發現問題,但是,由于它其實是一種黑盒測驗,所以效率相對于白盒測驗要低一些,
前端 UI 自動化測驗框架對比
Selenium:e2e 測驗鼻祖級的框架,有多種編程語言的版本,如果你去問問你們公司的測驗,那么你一定會發現,他們正在用 Python 版本的 Selenium 寫自動化測驗腳本,值得一提的是,它是基于 webdriver 而不是 webkit 內核實作的,所以,Selenium 的瀏覽器兼容性相對于其他瀏覽器要好很多,
PhantomJS:開創性的 headless(無頭)測驗框架,何為 headless?即沒有 UI 界面的瀏覽器,headless 最大好處在于可以像單元測驗一樣,在命令列中跑 e2e 測驗,
nightmare:一句話——加強版的 PhantomJS,相對于 PhantomJS,無論是開發還是運行效率都得到了很大的提升,
tips:nightmare 還有個優點——它提供了一個 Chrome 插件 daydream,該插件可以通過錄制螢屏,自動化生成測驗代碼,懶人福音,
nightwatch:名字和 nightmare 很像,但是完全不一樣的一個 e2e 框架,使用 Node 呼叫 webdriver 實作,相對于 Selenium,開發和運行效率更高,最重要的是,迭代很活躍,這點,用開源產品的用戶懂得都懂,
cypress:我接觸的第一個 e2e 測驗框架,測驗界面和檔案做到極致的一個產品,推薦大家可以試一試,
puppeteer:e2e 測驗框架的集大成者,默認以 headless 模式運行,但是也可以通過配置變為 Chromium 運行,開發效率以及運行效率一流,最重要的是,它像 nightmare 一樣,提供了測驗代碼生成插件——puppeteer-recorder,
綜上所述,如果考慮瀏覽器兼容性,使用 nightwatch,反之,選擇 cypress 或者 puppeteer,如果需要 headless 或者自動化生成代碼的功能,那就使用 puppeteer,
使用前端 UI 自動化測驗的價值
從自動化測驗的收益來說,自動化測驗有個公式:
自動化的收益 = 迭代次數 * 全手動執行成本 - 首次自動化成本 - 維護次數 * 維護成本
簡而言之,迭代越頻繁,維護成本越高的專案,添加自動化測驗的價值越高,在基建專案或頻繁迭代專案中引入前端 UI 自動化測驗,可以大大減少每次迭代后手動測驗的時間,比起手動測驗,前端 UI 自動化測驗測驗的更快也更徹底,
另一個方面,隨著前端技術的高速發展,各個公司的前端開發、監控體系已經很完善了,但是缺少前端在測驗方向上的延伸,而前端 UI 自動化測驗最大的價值,就是在前端部分,彌補開發和監控之間的空白區域,形成一個完整的倍訓,三管齊下,極大地保障了專案的質量,
未來的展望
針對前端 UI 自動化測驗,我思考了很久,個人認為主要有兩大方向:
- 針對單個專案,進行一系列關鍵功能的測驗,不過如果需要追求測驗覆寫率的話,比較耗費時間,算是一種比較常規、精細的測驗方案,所以比較適合一些長期維護的基建專案或者大型業務專案,缺點在于活動頁基本覆寫不了,
- 針對所有專案,添加一個自動化測驗的腳手架(或者平臺化),能夠通過配置項,自動訪問目標頁面,并進行一系列的 e2e 測驗,根據不同的結果采取截圖、生成 pdf、報警等不同處理方案,
第二個方案,即通用化方案也是我最近開發的重點方向,接下來我應該會專門寫一篇文章,大概介紹下該方案的設計以及具體實作(如果我沒有懶癌發作的話[doge]),
如果有不同想法的同學,歡迎一起交流~
我的 github:https://github.com/KarthusLorin/blog
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/34162.html
標籤:JavaScript
