對于工作在復雜系統上的測試工程師,我們眼前浮現的都是這些人的屏幕上開著N個遠程桌面,N個虛擬機,他們在每個交付迭代周期內都疲于奔命,顧此失彼地應付著各種不同的環境、瀏覽器和操作系統。在我曾經工作過的A公司和D公司,測試和開發人員的比例幾乎是1:1甚至更高。
過去的幾年里,測試的工作似乎變得完善和高效,成熟的敏捷實踐使很多測試工作得以自動化,這無疑降低了企業成本,也使得測試本身變得更有趣,人們有時間去做一些創造性的工作,而把重復的、了無生趣的工作交給了機器和腳本。
但是,雖然我們做了很多改變,但就目前的情況而言,依然不是很樂觀,我們還是會碰到諸如此類的問題:“我的環境沒發現這個defect,你來幫我重現一下”,當我們信心滿滿去嘗試重現的時候,卻可能再也無法發現這個defect,然后不得不花費幾個人幾個小時甚至幾天的時間去定位和解決它。
再有,很多敏捷團隊都會做每日構建,構建成功的前提是所有的測試都要通過,我們為了減少構建時間、測試反饋時間,花了大力氣去優化和重構,使用了mock技術等等,但對測試時間的影響依然是杯水車薪。
上述問題僅僅是我們平時工作里遇見的一小部分,對于這幾個問題,我們歸結了兩點:
測試環境不夠干凈
測試執行效率需要大幅提升
我們帶著這兩個問題,來看近年來火爆的輕量級虛擬化——容器技術,它提供了能夠獨立運行的輕量級虛擬化解決方案,并且也提供了一種在安全、可重復的環境中自動部署軟件的方式。
傳統的硬件化虛擬占用的資源比一個容器要多不止10倍。我們不敢想象在一個物理機上開上百個虛擬機是什么效果,但是要實現同樣數量的容器是很正常的。容器為我們提供了隔離的運行空間,每個容器又包含了完整的用戶環境。不但如此,我們還可以通過諸如ansible、puppet、chef這樣的自動化運維工具對不同的容器空間進行批量化操作等等。
從一個測試人員的角度來講,這恰恰為我們運行測試腳本提供了豐富的土壤,我們不必擔心一些依賴包悄悄地破壞我們的環境,也不再擔心多人在相同的虛擬機或者硬件環境中的操作污染了環境,使defect無法重現,同時,多操作系統版本、多尺寸的移動端自動化測試也將從容器化技術中受益更多。
那么另一個問題解決起來也不算難,主流的開源自動化測試工具Selenium多年前就提供了Selenium Grid,hub/remote的機制可以很好地幫助我們設計分布式測試環境:
我們可以把這樣分布式的環境與自定義的容器化空間結合在一起,利用提供各種語言支持的并發工具包,讓我們在安全、可重復、可移植的環境基礎下,指數級提升測試運行效率,減少反饋時間:
大部分測試人員對日新月異的技術并不是很敏感,很多時候,我們可能會認為,這些技術的發展,并不會也并不想知道這些技術能對日常的測試工作帶來多少影響,但其實很多時候看似孤立的領域,碰撞在一起會有意想不到的火花。
喬布斯曾經說,創新就是把各種事物整合在一起。當你問有創意的人是如何創新的,他們可能會感到些許愧疚,因為他們根本沒有創造什么。他們只是看到了一些東西。我們對于日常工作了解得更深更廣,我們就會做得越出色。
原文轉自:http://www.testwo.com/article/583