天天看點

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

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

如果你花時間靜下心來仔細想一下,很可能會把自己吓一大跳,需要了解掌握的非測試知識實在是太多了,這簡直就是一個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思維,以及前端開發技術的核心知識以及實踐。

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

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