軟件測試工程師需要掌握的非測試知識有哪些?

測試工程師需要掌握的非測試知識主要有哪些呢?

如果你花時間靜下心來仔細想一下,很可能會把自己嚇一大跳,需要了解掌握的非測試知識實在是太多了,這簡直就是一個mini版的系統架構師啊!

  • 小到Linux/Unix/Windows操作系統的基礎知識,Oracle/MySQL等傳統關係型數據庫技術,NoSQL非關係型數據庫技術,中間件技術,Shell/Python腳本開發,版本管理工具與策略,CI/CD流水線設計,F5負載均衡技術,Fiddler/Wireshark/Tcpdump等抓包工具,瀏覽器Developer Tool等;
  • 大到網站架構設計,容器技術,微服務架構,服務網格(Service Mesh),DevOps,雲計算,大數據,人工智能和區塊鏈技術等。

可以說,測試工程師需要掌握的這些技術,幾乎涵蓋了當今主流軟件技術的方方面面。當然,你也不可能一口氣吃成胖子,所以我就挑選了幾個我認爲比較重要,又符合當前技術趨勢的關鍵知識點,和你分享。

希望我的分享,可以幫助你在面對新的技術趨勢時,站在更高的高度,更好地把握測試工作的內涵和外延。

網站架構的核心知識

現如今,互聯網產品已經佔據了軟件行業的大半壁以江山。作爲測試工程師,你很多時候都在和互聯網產品,尤其是網站類應用產品的測試打交道。

這時,如果你想要做好互聯網產品功能測試以外的其他測試,比如性能測試、穩定性測試、全鏈路壓測、故障切換(Failover)測試、動態集羣容量伸縮測試、服務降級測試和安全滲透測試等,就要掌握網站的架構知識。否則,面對這類測試時,你將束手無策。

  • 比如,如果你不清楚Memcached這類分佈式緩存集羣的應用場景和基本原理,如果你不清楚緩存擊穿、緩存雪崩、緩存預熱、緩存集羣擴容侷限性等問題,你就設計不出針對緩存系統特有問題的測試用例;
  • 再比如,如果你對網站的可伸縮性架構設計不瞭解,不清楚應用服務器的各種負載均衡實現的基本原理,不瞭解數據庫的讀寫分離技術,你就無法完成諸如故障切換、動態集羣容量伸縮、服務降級等相關的測試,同時對於性能測試和全鏈路壓測過程中可能遇到的各種瓶頸,也會很難定位和調整。

這就有點像當年做傳統軟件產品測試時,我們必須瞭解軟件的架構設計一樣,現在被測對象成了互聯網產品,我們就必須要了解網站架構。

所以,我強烈建議你要掌握網站架構的核心知識,你不需要像系統架構師那樣能夠熟練駕馭各種架構,並根據業務選型,但你至少需要理解架構相關的基本知識以及核心原理。

基於此,我在專欄的最後安排了一系列文章,包括了網站高性能架構設計、網站高可用架構設計、網站伸縮性架構設計和網站可擴展性架構設計,爲你詳細講解互聯網架構的核心知識,提升你的互聯網產品測試能力。

容器技術

“容器”已不再是一個陌生詞彙了,大多數人都在實際工作中或多或少地用到了容器技術。與傳統的虛擬機相比,容器技術在輕量化程度、資源佔用、運行效率等方面具有壓倒性的優勢。

除了那些專門做容器測試的測試工程師外,一般的測試工程師接觸容器技術的機會也越來越多。

很多中大型互聯網企業都在推行容器化開發與運維,開發人員遞交給測試工程師的軟件版本通常就是一個Docker Image,直接在容器上進行測試。有些公司還會把測試用例和執行框架也打包成Docker Image,配合版本管理機制,實現用容器測試容器。

對測試開發工程師來說,需要應用容器的場景就更多了。比如,目前主流的Selenium Grid就已經提供了官方Docker版本,可以直接以容器的方式建立測試執行環境,也可以很方便地在Pivotal Cloud Foundry和Google Cloud Platform等雲計算平臺上快速建立測試執行環境。

基於Docker的Selenium Grid大大減輕了批量虛擬機節點上Web Driver、瀏覽器版本和守護者進程版本等升級維護的工作量。

測試開發工程師還可以通過Docker Image的形式,提供某些測試工具,而不是以傳統的安裝包或者JAR文件的形式,可以實現測試工具開箱即用。

可見,容器技術已經慢慢滲透到軟件研發與運維的各個層面,作爲新時代的測試開發工程師,你必須像熟練使用VMware一樣,掌握Docker和Kubernetes的原理和使用方法。

那對於一個測試工程師來說,怎麼才能快速具備容器相關知識,並上手涉及容器技術的互聯網產品測試呢?

在這裏,我還是要跟你強調選擇學習資料時,一定要注意權威性,我給你的推薦依然是Docker官網的教程,在這裏你完全可以理清Docker概念以及具體使用方法,那再結合具體的實戰,相信你必定收穫頗豐。

雲計算技術

一方面,很多企業,尤其是互聯網企業都在嘗試“上雲”, 也就是逐漸把生產環境從原本的集中式數據中心模式轉向私有云或者混合雲模式。

前段時間,eBay的一些產品線就對外宣佈了和Pivotal Cloud Foundry的合作,會將部分產品線遷移到雲端。顯然,作爲測試工程師,你必須理解服務在雲端部署的技術細節才能更好的完成測試任務。

另一方面,測試基礎服務作爲提供測試服務的基礎設施,比如測試執行環境服務(Test Execution Service)和測試數據準備服務(Test Data Service)等,也在逐漸走向雲端。 比如,國外非常流行的Sauce Labs,就是一個著名的測試執行環境公有云服務。

一些大型互聯網企業,通常還會考慮建立自己的測試執行私有云。最典型的就是,基於Appium + Selenium Grid,搭建移動終端設備的測試執行私有云。

所以,除了專門進行雲計算平臺測試的工程師,必須要掌握雲計算的知識外,其他互聯網產品的測試工程師,也要能夠理解並掌握基本的雲計算知識和技術。

在我看來,對於雲計算的學習,你的側重點應該是如何使用雲提供的基礎設施以及服務。我建議的高效學習方法是,參考你所採用的雲方案的官方文檔,再結合實際案例進行試用,學習效果會更好。

你可以嘗試用雲服務去部署自己的應用,同時還可以結合雲平臺提供的各類服務(配置服務,數據庫服務等)和你的應用做集成。另外,我還建議你嘗試用雲平臺建立自己的小應用集羣,體驗集羣規模的動態收縮與擴展。你還可以嘗試在雲平臺上直接使用Docker部署發佈你的服務。

更進一步,你可以嘗試在雲端建立自己的Selenium Gird集羣,現在Selenium Gird已經發布了對應的Docker版本鏡像,你可以非常方便地在雲平臺上搭建自己的Selenium Grid。

不要以爲這會有多複雜,理解了Docker的基本概念以及對應雲平臺的使用方法,你就可以在短時間內快速搭建起這樣的Selenium集羣。

相信以上這些基本的應用場景,都將更好地幫助你理解雲平臺的核心功能以及使用場景,從而幫你完成對應產品的測試。

DevOps思維

DevOps 強調的是,開發、測試和運維等組織團隊之間,通過高效自動化工具的協作和溝通,來完成軟件的全生命週期管理,從而實現更頻繁地持續交付高質量的軟件,其根本目的是要提升業務的交付能力。

DevOps的具體表現形式可以是工具、方法和流水線,但其更深層次的內涵還是在思想方法,以敏捷和精益爲核心,通過發現問題,以系統性的方法或者工具來解決問題,從而實現持續改進。

因此,測試工程師也必須深入理解DevOps思想的核心和精髓,才能在自動化測試和測試工具平臺的實現上做出最契合的設計。無論是測試工程師,還是測試開發工程師,都會成爲DevOps實踐成功落地的重要推動力。

要想真正學習和掌握DevOps,並不是簡單地學習幾款工具的使用,更重要的是需要有DevOps思維,能夠將各個工具有機結合,提供高效的CI/CD流水線。

對於DevOps,我建議的學習路徑是,你可以從深入掌握Jenkins之類的工具開始,到熟練應用和組合各種plugin來完成靈活高效的流水線搭建,之後再將更多的工具逐漸集成到流水線中以完成更多的任務。

相信通過這樣的學習,當你再面對相關的測試工作時,必然可以輕鬆應對。

前端開發技術

前端開發技術的發展突飛猛進,新的框架與技術層出不窮,Vue.js,Angular和React等讓人應接不暇。並且,還有很多在此類框架基礎上開發的組件庫可以直接使用,比如AntD,大大降低了前端開發的難度和時間成本。

但是,前端開發技術的發展和測試又有什麼關係呢?

從測試工程師的角度來講,如果你能夠掌握前端開發技術,也就意味着你可以更高效地做前端的測試,更容易發現潛在缺陷。同時,你還可以自己構建測試頁面,來完成各類前端組件的精細化測試,大大提高測試覆蓋率和效率。

從測試開發工程師的角度來講,很多測試平臺和工具都需要UI界面,比如很多公司內部構建的測試數據服務和測試執行服務,如果你能熟練掌握基本的前端開發技術,那你就可以很方便、高效地構建測試平臺和工具的UI。

關於前端技術的學習路徑,通常你首先需要掌握最基本的JavaScript、CSS、JQuery和HTML5等知識,然後再去學習一些主流的前端開發框架,比如Angular.js、Backbone.js等。當然現在的Node.js的生態圈非常發達,你如果能夠掌握Node.js,那麼很多東西實現起來都可以得心應手。

我個人推薦從網上下載一些樣例代碼進行學習,同時學習使用腳手架從無到有去建立自己的前端應用。

總結

爲了應對技術發展趨勢,做好軟件產品的測試工作,軟件測試工程師需要掌握非常多的非測試專業知識,包括:網站架構、容器技術、雲計算技術、DevOps思維,以及前端開發技術的核心知識以及實踐。

對於這類新技術的學習,我強烈推薦你直接閱讀官方網站的文檔以及代碼示例。這種方式,可以讓你少走彎路,同時保證所學內容是最新的。

當然,我跟你分享的這些非測試專業知識,只是衆多技術的冰山一角,你在實際的測試工作中也會遇到更多的技術,希望你可以舉一反三,不斷擴充自己的知識面,向着一個優秀測試工程師、架構師努力!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章