本節書摘來自華章計算機《Web測試囧事》一書中的第3章,第3.3節,作者 黃勇 雷輝 徐潇 楊雪敏,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
小蔡測試的産品最近需要更新前背景。對于前台來說,要從之前的JavaScript轉換成Angular等新技術,顯示樣式也要從前幾年的拟物化風格轉換為扁平化風格;對于背景來說,要從之前和公司内部其他産品通用的6套背景子產品系統架構,轉換成隻包含資料庫和後端伺服器的2套子產品系統架構,而且背景技術要用Node.js重寫,如圖3-5所示。
基本上這個前背景替換的任務,把整個系統都進行了替換,隻是仍然保留了之前的功能。進行前背景替換的任務時間緊,是以整個項目組的開發人員被分成了兩個小組,分别負責前背景的替換,每個組又臨時擴充了不少别的團隊的人進行協助。而測試人員,包括小蔡,還是負責整個項目的測試工作。
在替換項目準備啟動階段,兩個小組都認為隻要自己做自己的部分,保證原有功能的正常就可以了,兩個團隊并不需要過多的交流和溝通,一切以之前的系統為準。
然而項目一開始,雙方團隊就遇到了不少問題。
首先,兩個組對同一功能前背景開發的優先級不同,造成進度不一緻,導緻有些子產品的前背景功能不能同一時間完成。這就阻礙了內建測試的實施,讓進度一拖再拖。為了減少這種情況,項目組又搭建了單獨的包含以前系統背景和替換項目中前台的環境。雖然這解決了部分測試延誤的問題,但是開發人員花費了不少時間來搭建環境,而且在這個環境測試完成之後,還需要在整套替換前背景的環境上再次進行內建測試。
其次,測試人員在前台發現問題時,并不能準确定位是前台團隊造成的,還是背景團隊引入的。而且由于不熟悉對方團隊編寫代碼,開發人員也需要花費不少時間才能定位問題真正的原因。
整個項目組發現這兩個問題耗費的時間過長,是以讨論并執行了一套方案來解決這兩個問題:使用Mock伺服器進行測試。
前背景團隊根據定義好的API,各自編寫Mock伺服器,便于開發人員進行開發,和測試人員測試相對獨立的子產品,也大大簡化了測試環境和測試執行的複雜度。具體來說,就是前台團隊根據API的定義,編寫Mock伺服器來模拟背景資料庫和伺服器的傳回;而背景團隊根據API的定義,編寫Mock伺服器來模拟前台伺服器的請求和預期結果,如圖3-6所示。
使用Mock伺服器進行測試,大大簡化了測試複雜度,從測試環境上也隔離了前背景的測試,加快了測試進度。
在進一步的使用中,小蔡發現有時API接口定義的修改在前背景沒有及時同步,造成了單獨測試前台或者背景時沒有問題,但是在進行內建時,卻發生了嚴重的不一緻。
還好小蔡之前定期跟蹤測試趨勢時,從ThoughtWorks技術雷達(technology radar)上了解到契約測試就是針對這種場景的一種測試方法,而且還有不少進行契約測試的工具。
簡單說來,契約測試就是同時對前背景都進行了Mock,使它們随時都使用的是一緻的API接口定義,也隻需要維護單一的API接口。使用契約測試的工具能快速實作前背景的分離,同時保證它們的一緻性,如圖3-7所示。
小蔡在項目組讨論改進時提出了這個測試實踐,大家都很支援,并且馬上制定計劃進行試驗。在整個項目組嘗試了一周之後,整個項目組将契約測試作為團隊内很重要的實踐進行推廣和執行。