從自動化測試到持續部署,你需要了解這些

2022-07-03 13:24:09 字數 3268 閱讀 8122

在網際網路的產品開發時代,產品迭代越來越頻繁,「從功能開發完成直到成功部署」這一階段被稱為軟體開發「最後一公里」。很多開發團隊也越來越認識到,自動化測試和持續部署可幫助開發團隊提高迭代效率和質量。

那麼,如何更好地解決「最後一公里」這一問題呢?

一切從自動化測試開始,讓自動化測試貫穿在整個專案開發-整合-部署-交付的-開發流程中。

如果你的團隊還沒有開始自動化測試,推薦從經典的測試金字塔開始。

在這個分層自動化測試金字塔中,unit 代表單元測試,service 代表服務整合測試,ui 代表頁面級的功能測試。不同的產品層次都需要自動化測試,投入的精力和工作量會有所不同。下面我們仔細看下每個層次的測試:

「凡是不能量化的工作都是不可考量的」

目前很多公司已經意識到了單元測試的重要性,但國內堅持寫單元測試的團隊並不多,其中乙個難點在於沒有考量,沒有很好地執行單元測試覆蓋率檢測。

想想,如果沒有單元測試覆蓋率檢測,單純的只寫單元測試,時間長了也許開發人員會產生惰性,比如:今天任務太緊了,就不寫單元測試了,以後再補,反正寫不寫也沒有人知道。引入單元測試覆蓋率檢測之後,開發人員會更主動地寫單元測試,就算補寫單元測試也更有成就感。單元測試覆蓋率檢測有現成的第三方工具,比如 code climate 、 coveralls 等等,針對不同的語言也有還有一些定製化的檢測工具, 比如前端常用的 eslint , python 常用的pep8 等等。整個專案的單元測試覆蓋情況百分比,看上去一目了然。

相比其他層級的測試,單元測試發現並解決問題付出的成本相對來說最低,而投入產出比最高。單元測試的責任主體一般來說是開發人員,寫單元測試也是開發人員對自己的**進行檢查的過程。

「多數應用和產品都需要與外部資源互動,有時候多數 bug 並不**於程式本身,而是由從外部輸入的資料所引起的。」

這時候,就更需要整合測試。

整合測試是在單元測試的基礎上,將所有模組按照設計要求(如根據結構圖)組裝成為子系統或系統,進行整合測試。這個整合測試階段主要解決的是檢查各個軟體組成單元**是否符合開發規範、介面是否存在問題、整體功能有無錯誤、介面是否符合設計規範、效能是否滿足使用者需求等等。

整合測試與單元測試最大的區別在於,它需要盡可能地測試整個功能及相關環境。如果不經過單元測試,那麼整合測試的效果將會受到很大影響,大幅增加單元**糾錯的代價。

這一層的被測物件是抽離了展現層的**(前端以及部分後端展現層邏輯),主要是由測試人員進行,是測試人員大展身手的地方。

「乙份永遠都執行成功的自動化測試用例是沒有價值的。一切都在變化中。」

在做好上面兩層的測試覆蓋之後,最頂端的是 ui 層的自動化測試。目前,ui 層的自動化覆蓋正在逐漸轉變為頁面展示邏輯及介面前端與服務展現層互動的整合驗證。ui層自動化做的方式很多,根據不同的系統,不同的架構可能會用到不同的框架或者工具,比較主流的有qtp,robot framework、watir、selenium 等。

ui 層是直接面向使用者的,需要測試人員放入更多的時間和精力。如今的網際網路公司大多需求變化大而快,迭代頻繁,所以很多團隊做 ui 自動化測試投入較大精力,卻遲遲見不到效果,自動化測試人員每天奔命於維護指令碼,追趕進度。有 2 點 ui層自動化覆蓋的原則非常有必要提下:

綜上所述,分層自動化測試側重不同,效果不盡然完美的,而最快速高效發現 bug 的方法是將自動化測試包含到構建過程中。謹慎周全的自動化測試可以進一步保證持續部署的穩定與安全,提高持續部署的成功率。

乙個團隊工程技術水平高低,直接反映在部署**上。我碰到其他公司的人,都喜歡問你們怎麼部署**的,非常大開眼界。你很難相信,很多(有一定規模的)公司仍然是人肉 ssh 到十幾、二十臺機器上 git pull、手動重啟伺服器,部署一次**幾個小時 -- 這麼原始,活該加班:)

持續部署(continuous deployment)是通過自動化的構建、測試和部署迴圈來快速交付高質量的產品。某種程度上代表了乙個開發團隊工程化的程度,畢竟快速運轉的網際網路公司人力成本會高於機器,投資機器優化開發流程化相對也提高了人的效率,讓 engineering productivity 最大化。

「持續部署」的痛苦源於部署時的各方面,比如需要部署到哪些環境,測試環境?灰度發布?正式環境?還有其依賴包的版本,環境配置管理等等,都需要考慮在其中。對於乙個標準的部署——安裝軟體包並啟動環境,可能的步驟將會是:

imothy寫過一篇文章介紹了 imvu 是如何進行持續部署。imvu 的做法是,在持續整合構建過程中進行大量的、覆蓋範圍廣的、非常可靠的自動化測試,保證在 10 分鐘內跑完整個測試套件。所有測試通過後,部署便開始了。

在這個過程中,持續整合工具的選擇和系統的搭建顯得尤為重要。面對眾多的 ci 工具,我們將其分為 hosted ci 和 self hosted ci:

我們對比一下這兩種 ci 服務:

我們做了一款 hosted ci 產品—— flow.ci ,它是融入了 workflow 機制的持續整合(ci)服務,也可以理解為自動化流程平台,除了整合**、編譯、測試之外,還可以整合常用的工具、靈活自定義流程。1 分鐘即可完成開發測試環境搭建,開啟第乙個build。

flow.ci 更側重於工作流的設定,預設的工作流可以自動編譯測試**,進行單元測試覆蓋率,**質量檢測等工具以外掛程式的形式進行整合;並加入了 webhook 功能。從自動化測試到持續部署,一切簡單靈活。

乙個持續整合 & 持續部署的自動化系統並不是那麼簡單的事,如果不選用其他 ci 服務,其開發工作量和乙個標準的大型網際網路業務系統沒什麼兩樣。如果沒有持續部署的經驗,要想成功地進行持續部署要注意這些:

持續部署真正困難的不是技術的實現,也不是工具的選擇和使用,最難的是培養團隊持續部署的習慣以及工程文化。可以參考下instagram 的持續部署工程文化。

不論是自動化測試,還是持續部署,都只是一種實現手段;他們真正存在的價值在於提高**質量和提高產品的持續交付能力。關於如何進行更好地進行自動化測試和持續部署,可以多參考下其他公司的持續部署實踐案例與經驗。

【參考鏈結】

從自動化測試到持續部署,你需要了解這些

在網際網路的產品開發時代,產品迭代越來越頻繁,從功能開發完成直到成功部署 這一階段被稱為軟體開發 最後一公里 很多開發團隊也越來越認識到,自動化測試和持續部署可幫助開發團隊提高迭代效率和質量。那麼,如何更好地解決 最後一公里 這一問題呢?一切從自動化測試開始,讓自動化測試貫穿在整個專案開發 整合 部...

自動化測試,自動化測試框架,持續整合

基於espresso和dagger的自動化測試框架 測試框架可以使用android推薦的espresso.模擬資料可以使用dagger2,一種依賴注入框架.dagger2沒有使用反射,而是使用預生成 提高執行速度.基於espresso和dagger的自動化測試框架 持續整合與自動化測試,自動化測試框...

從桌面應用自動化測試看移動應用自動化測試

自從圖形化介面成為個人桌面電腦的主流,應用程式複雜程度與日俱增,針對人機互動的自動化測試迫在眉睫,從而在市場上湧現了一大批針對圖形介面應用程式功能測試的自動化測試工具 參考鏈結1 2001年qtp第乙個版本發布 2002年robot初始版發布。自此,自動化工具已經經歷了十年的發展。隨著近兩年移動應用...