DevOps 中的測試實踐
萬物皆可 pipeline,流程自動化解放生產力。在 DevOps 的 pipeline 中,我們發現測試環節也需要一套流水線化的能力,來保證研發流程的大批 pipeline 穩定高品質交付。
下面介紹下 DevOps 中如何構建高水平全面的測試能力。
- 文化、流程、組織結構、技術發生變革,對測試提出新要求
· DevOps 文化對測試帶來的新要求(文化)
為適應市場的快速變化,要求企業的產品快速迭代,柔性應對使用者需求,滋生了 DevOps。
《持續交付 2.0》中,作者將 DevOps 簡化概括為 2 個環:價值探索和快速驗證。
價值探索是快速發現和識別外部客戶的真實需求,為其創造價值點。"快速驗證環"要求企業在找到業務問題制定業務目標後,快速實現和落地價值點。
測試屬於"快速驗證環",過程中要求開發/測試/運維的角色緊密配合,高效高質地落地驗證新特性。
· 在 DevOps 中構建測試工作的難點(流程)
在 DevOps 趨勢下,測試部門從原先的大量集中測試,變成了高頻快速測試。
原先大部分企業採用純手工測試的方式,從根本上無法適應 DevOps 的高頻快節奏需求。滋生了對自動化測試的訴求。
· 頭部企業測試部門的現狀(組織架構)
· 人力外包比重高:
金融/通訊/航空等大型企業的外包人力與正式人力之比,往往超過 5:1,人員流動性高,素質參差不齊。對工具和系統的穩定性和使用門檻提出要求。
· 從集中到分散又迴歸集中:
企業初期業務較為單一,測試需求歸攏到統一的測試部門。
隨著企業業務的擴充,為了快速滿足各個業務的測試訴求,將測試人員直接放到各個業務組,實現業務內快速開發測試釋出。
業務量更加龐大後,避免分散研發使各個業務組重複陷入低階別的研發活動,產生技術豎井,為實現技術資產的繼承積累,研發流程從分散開發趨向於基於中心化的基礎設施開展,也就是現在常說的"中臺"概念。測試工作也因此產生變化。除了測試各個業務的具體功能本身,也需要對基礎設施本身的質量,以及各模組專項能力做統一的測試,確保整體的健康度維持在一個可控的標準。因此,又產生了集中化的測試需求。
文化、流程、組織架構,以及新技術(容器技術等)多重力量,助推測試的敏捷化。
基於 DevOps 對測試提出的新要求,市面上也越來越多自動化測試的工具,開發者面對大量工具系統,往往需要經驗和時間成本去篩選:
問題一:在哪些環節加入測試?各個環節適用什麼型別的測試來保障該環節質量?
問題二:在人員結構和組織架構等約束條件下,各環節選取什麼樣的測試方法和工具?
下面咱們一一來分析這些問題。
問題一、測試可以滲透到哪些環節
在 DevOps 文化中,強調打破不同職能之間的隔閡,對於測試部門而言,意味著測試活動的"左移"和"右移",從需求分析到產品上線,各個環節把控質量。在一些偏研發和偏運維的環節,測試人員可以幫助建立整套質量評體系和工具組,來保障上下游的整體質量。
例如在開發編碼環節,主要是單元測試和 code review。對於大部分企業而言,這個工作主要是研發人員在做。測試需要做的事,推動這個環節的質量意識,幫助開發同學搞定單元測試和 code review 的工具和結果記錄,做到有跡可循。
測試時間提前:測試不再等開發結束後再測試,而是將測試時間穿插在開發階段,減少測試時段的長度
單元測試提前:開發每完成一個模組的編碼,先對本模組進行單元測試,業務邏輯比較清楚,不需要重新回顧,效率較高
單元測試有據可依:測試在開發進行單元測試前提供每個模組的用例設計,供開發參考,使得單元測試更全面
單元測試 review:每個模組單元測試完成後,測試進行單元測試 review,使得單元測試更全面,程式碼質量更高;同時發現程式碼或單元測試的問題開發及時修改,不需要打包,縮短提測試時間
開發與測試密切合作:每一模組都需要開發和測試密切合作、共同完成,測試和開發的合作更加密切,開發的測試水平提升更快,測試閱讀程式碼的能力也會進步很快
測試工作量和測試周期減少:由於單元測試很充分,所以每個 job 的測試可以省去,只做整合 | 聯調測試,大大減少了測試工作量和測試時間,從而縮短整個專案週期
問題二、在人員結構和組織架構等約束條件下,各環節選取什麼樣的測試方法和工具?
· 測試管理
管理工具的目標是提升效率和協同性。市面上已經有非常多成熟的管理工具。如果是業務比較複雜的超巨企業,測試部門更關注的是對於不同測試管理系統的適配性。
舉兩個例子,以下兩張圖,分別是技術積累做的非常不錯的兩家企業測試部門的流程,差異比較明顯。
這種實際環境下,對測試管理平臺靈活性的要求就很高。
· 工作流程靈活可配置
· 可整合現有管理系統
· 過程/結果的視覺化
目前我們平臺支援按工作流來組織測試計劃,並分配任務,專案進度、人力分配視覺化跟蹤。
測試本身也是一條流水線,支援使用者向右無線擴充套件測試環節;每個測試環節支援向下無線擴充套件"測試任務項。
同時,平臺支援 jira/tapd 等管理系統的整合,需求和缺陷打通。指令碼方面支援打通 git 和 svn,直接同步指令碼到 WeTest 測試平臺。
· UI 測試
UI 測試是門檻最低,最常見的一種測試型別。一般在功能驗收,以及專項測試階段比較常用。UI 測試有 web 端和移動端。web 端的測試主要以 selenium 框架為主。市面上也有比較通用的錄製回放工具。移動端的 UI 自動化測試由於裝置型號多而雜,給測試部門帶來更大的挑戰,近幾年出現的移動端測試框架也越來越多。
之前提到組織架構裡外包比重較高,因此,UI 自動化測試工具的使用門檻一定要低。業界有較多的指令碼錄製回放工具。在實際操作過程中,往往會發現這些工具有以下弱點
· 元素識別困難
金融行業的亂序密碼盤和防截圖安全控制,把很多用例擋在門外。實際上大多數亂序密碼盤的問題都是可解決的。
· 指令碼回放成功率低
魯棒性低:順序流的指令碼,回放時只要有 1 個步驟未按預置流程走下去,就會卡住,後面的指令碼就白搞了。
適配性低:錄製的指令碼在不同的裝置上,由於解析度和尺寸的不同,導致無法回放。這就對工具的識別方式提出了更高的要求,不能是簡單的座標識別。
· 易用性差,影響效率
很多指令碼錄製工具為了提升識別效率,採用影像 + 控制元件雙重識別。影像識別過程往往需要使用者框選出需要識別的區域。大大降低了錄製指令碼的效率。也提升了工具使用的門檻。我們期望一種無感知的錄製工具。使用者在手工測試過程中順便把指令碼錄製了。
這些點,我們自研的小工具 UITrace 都解決了。目前這款工具也是 WeTest 用於交付相容測試任務的主要工具。
除工具問題外,由於移動端 UI 測試涉及到大量裝置的運維管理,在穩定運營的基礎上,有效降低運維成本,提升運維效率,是進行日常 UI 測試的前提。對於硬體的運維,WeTest 在管理上萬臺裝置的過程中,總結出 43 條運維規則,自動識別和秒速處理"開發者模式誤觸關閉""記憶體佔滿""熄屏鎖屏"等問題。保證機房 7x24 小時穩定執行,實現 1 個運維人員可管理上千臺裝置的效果。
· 介面測試
介面測試是一項價效比很高的測試活動,介面相較於 UI,變化不大,較為穩定。介面測試主要關注以下幾點。能把這些點都做足,基本上可以 cover90% 以上的需求。
· 適配性:支援的協議/報文格式範圍更全面(例如近幾年興起的 dubbo/grpc/trpc,以及經典的 http/https,WeTest 平臺均可支援)
· 兼顧易用性和管理能力:既要像 postman 一樣實時除錯,又可以支援用例管理,測試任務,報告管理的管理功能,便於複用和進行歷史追溯。目前 WeTest 平臺可以滿足需求
· mock 能力:可按需求定製 mock 規則
· 自動生成用例組織測試的能力:提供了 fuzz 安全測試:支援隨機填充、SQL 注入、XSS 攻擊、OS 命令注入等攻擊模擬指令碼的自動生成和執行。
· 預處理指令碼 coding 能力:靈活地進行邏輯控制
· 上下游鏈路整合:支援鏈路性的介面測試,而不僅僅測試單個介面。前序介面輸出作為後續介面引數輸入
· 壓力測試
若出現伺服器當機,業務會陷入癱瘓;若延遲較高,使用者感受也會受明顯影響,造成口碑下滑。伺服器壓力測試,主要關注以下幾點:
· 併發量:併發量大且穩定是基礎要素,是做壓力測試的前提條件。目前 WeTest 併發量可達百萬級別。
· 模擬真實場景:WeTest 支援透過介面傳參構建上下文鏈路場景,模擬真實環境下的各個介面併發量。
· 相容各類指令碼:jmeter/fiddle 等主流指令碼框架
· 支援 coding 模式,多種協議和語言,便於靈活地構建測試場景。
· 監控維度科學、全面:覆蓋 TPS、響應時間、收發包量等種基礎效能指標及程序級伺服器等 14 項資料,見下方 WeTest 壓測報告截圖。
· 其他
除了解決上述工具和系統的問題,我們在流水線上要有設定質量紅線的意識
質量紅線不僅被用來保證轉測/釋出的質量,還被用來保證 Git 工作流的程式碼質量。避免低質量程式碼進入進入下一個環節,浪費下游測試資源,舉例如下
微信 MR 過程觸發 WeTest 門禁
騰訊 WeTest 平臺服務於質量領域超過 10 年,擁有豐富的多行業(包括金融、遊戲等)測試經驗。2019 年正式推出私有化部署解決方案,致力於服務對私密性、安全性有更高要求的企業,幫助企業打造屬於自己的質量中臺。
歡迎訪問頁面,檢視解決方案介紹:https://wetest.qq.com/solution/private?from=others_content_private
相關文章
- DevOps中的測試實踐dev
- 在持續測試中使用哪種測試?談談DevOps在測試策略中的實踐!dev
- Java中的單元測試與整合測試最佳實踐Java
- DevOps實踐dev
- CODING DevOps 系列第四課:DevOps 中的質量內建實踐dev
- 測試自動化中遵循的最佳實踐
- DevOps 實踐指南dev
- DevOps 在企業專案中的實踐落地dev
- 中興通訊測試專案實踐:敏捷測試特性文件的交付過程實踐探討敏捷測試
- 金融科技 DevOps 的最佳實踐dev
- DevOps實踐中,遇到的常見誤區有哪些?dev
- 中國銀行DevOps標準化實踐dev
- Golang專案的測試實踐Golang
- 測試驅動開發在專案中的實踐
- ChaosBlade混沌測試實踐
- Locust效能測試實踐
- 精準測試實踐
- Vodafone A/B測試實踐
- 基於DevOps的容器安全實踐dev
- DevOps 時代的高效測試之路dev
- 自動化測試的最佳實踐
- 88 郵箱測試左移和測試右移的落地實踐
- DevOps與傳統的融合落地實踐dev
- 故障測試 Byteman 上手實踐
- 測試用例最佳實踐
- Go 單元測試實踐Go
- Android 單元測試實踐Android
- HTTP介面測試實踐(一)HTTP
- 介面測試框架接入效能測試實踐分享框架
- Docker與自動化測試及其測試實踐Docker
- 在騰訊雲容器服務 TKE 中實踐 DevOpsdev
- 論 DevOps 實踐有幾何?dev
- Jepsen 測試框架在圖資料庫 Nebula Graph 中的實踐框架資料庫
- 測試微服務的4個最佳實踐微服務
- DevOps基礎的認識與工具實踐dev
- DevOps 自動化實踐:提升效率的 Botdev
- 中小團隊基於Docker的devops實踐Dockerdev
- Parasoft軟體測試實踐:什麼是左移測試?