很多測試開發工程師尤其是剛入行的同學對編程語言和技術棧選擇問題特別關注,畢竟掌握一門編程語言要花不少時間成本,也直接關係到未來的面試和就業(不同企業/項目對技術棧要求也不一樣),根據自身情況做一個相對正確的選擇確實要比盲目投入更明智也更高效。
目前最常見的情況是糾結選擇 Java 還是 Python?關於這個問題,我特意請教了幾位資深的測試技術專家,在這裡做一個彙總整理,集“各家”之言供大家參考,也歡迎各位朋友根據自己的經驗回帖補充意見。
P.S. 有一點需要強調,關於編程語言的選擇和對比,不存在唯一正確的答案,也沒有一勞永逸的全局解決方案。這裡列舉的也僅代表個人意見,僅供參考,大家還需要結合自身情況做選擇。在保證大方向正確的前提下,快速學習,努力提升自己才是王道。
測試工程師該如何選擇合適的編程語言?
Java or Python?這兩種語言在一線測試工作中實際應用是怎樣的?有哪些優劣勢對比?
對測試新人和有一定經驗的從業者有哪些建議?
---- @艾輝 餓了麼高級測試技術經理
Java 和 Python 這兩種語言在測試開發的工作中應用都很廣泛,如果非要分主次,Java 相對來說更多。服務端用 Java 開發的項目居多。
關於測試工程師如何做技術棧選擇?有幾點需要注意:
- 業務團隊的技術棧,即公司服務端用什麼語言做開發;
- 自身技術基礎,對編程語言熟悉程度,個人興趣等;
- 相關語言背後的技術生態是否完善,比如做服務端自動化測試,Java 的工具庫、Python 的工具庫,哪個更能解決痛點問題?
對於零基礎和剛入行的同學,建議從 Python 入手,因為 Python 語法簡單,相對容易上手;有一定經驗的測試工程師則要從解決什麼問題方面考慮,然後建議 Python、Java 都熟悉掌握,能緊跟行業技術趨勢和要求,比如近幾年 Go 越來越火,不排除測試開發工程師之後要學習掌握 Go 語言。
測試開發的技術廣度要求相對更高一些,因為你不知道下份工作中,公司業務會用到的技術棧情況,所以需要掌握迅速遷移學習的能力。但就目前來看,Java 和 Python 兩門語言能熟練應用基本就可以滿足大部分測試開發工作的需要,其他 Case 根據實際情況來看。
---- @方程無解 美團資深測試技術專家、Python 自動化測試技術專家
很多同學都有這個困擾。Java 和 Python 是現在開發和測試行業的兩大主流語言。目前 Java 的市場佔有率是第一,Python 還是第四,但 Java 的佔有率在走下坡路,尤其是在 Oracle 宣佈新版 JDK 收費後,會加速這種趨勢。Python 作為大數據工程和 AI 的主流開發語言,一直保持強勁的上升趨勢,即使目前 AI 還沒有大量的成功的商業案例(盈利的)就已經很火爆了,一旦成功的商業模式建立起來,Python 開發和測試的需求更會爆發性增長。
Java 和 Python 通常在大廠裡面都是並行存在的,但在創業型公司裡面,Python 做測試開發的比例比 Java 高,創業型公司裡面要求快速推進,推進速度會比大公司更激進。
Java 目前在市場上畢竟還是佔有率第一的,Java 測試開發的絕對需求量會比 Python 多,但會 Python 的人相對比較少,競爭也會小一些。Java 用來做測試開發,還是太重了點,技術點比較複雜,學習曲線長,編寫測試代碼的速度慢,Python 編寫速度快,非常適合測試資源不充足的情況下,快速開發測試工具。通常實現一個功能,Python 的代碼量是 Java 的 1/3-1/5。
很多大廠之所以一直還用 Java 做測試開發,主要前幾年積累下來的工具都是 Java 的,前幾年會 Python 做測試開發的人太少了,但現在大廠新工具的開發,更多人選擇了 Python。
對於小白和剛入行的同學,毫無疑問,直接學 Python,這個沒有其他要討論的。對於 Java 開發一年經驗以上,或者寫過 1W 行以上代碼的同學,在繼續深入學習 Java 的同時,也要開始學 Python。在實際工作當中,用Python 寫小工具,很方便。Python 對 Java、C、 C++ 的調用都有成熟的框架,而 Java 沒有。另,除了 Python 和 Java,如果大家還想學習一門新的語言,我建議大家學習 Go,那也是一個明日之星。
關於測試開發工程師如何做技術棧選擇的建議:關於測試技術,建議初級測試人員(1-2年),先在一個專項測試技術上發展,然後再擴展到全棧(API、Web、App、後臺、安全性測試、性能測試、數據庫、Linux、中間件等)。你的技術體系應該是 T 型結構,測試人員的知識體系應該比開發人員更全面,要學的東西很多。除了測試技術外,測試人員也要不停的學習開發技術,公司用什麼開發技術,你就要跟進學習。和開發人員的交流保持在一個頻道下,理解其設計就會更順暢。
---- @孫高飛 第四範式資深測試開發工程師
建議初學者先掌握 Python,而高級的測試開發者兩個都要會。一般高級工程師主 Java,副 Python。
另,語言跟某些業務場景也有綁定關係,比如 RPC 協議測試,在國內Dubbo 這個框架很流行,就是基於 Java 調用的。很多 2B 企業提供的 SDK 測試,也大都是基於 Java 的 SDK 測試。
而且,大型自動化項目通常是團隊多人協作的,Java 由於靜態語言特性不容易出錯,而 Python 容錯性相對來說就要差一些,代碼多了容易 hold 不住。
主要就是開發圈子裡 Java 太流行了,導致測試裡面 Java 系比較有好處。
---- @徐實 知乎測試技術專家
對於語言,第一選擇是最好和研發的語言技術棧一致。
在測試過程中,如果只是接口自動化,或者基礎平臺開發,Java 與 Python 兩者差異並不大。建議優先選擇更熟悉的語言。
一些開源自動化框架用 Python 的相對多些,在日常工作中一些腳本工具用 Python 寫會快很多。
其實個人覺著代碼技術棧的選擇方面,通過 Java 入門要比 Python更面向對象一些,對一些設計模式的學習也更友好一些。另外,從開發角度來講,Java 的穩定性和可靠性及現有解決方案會更好一些。
如果面向平臺開發,第一門入門語言可以選 Java,語言一通百通,Java 上手後學習 Python 的成本也不高。
但如果只是自動化測試框架,工具,兩者都可以,我個人更傾向Python,新手寫起來很快~。另外,如果是大數據方向的測開,最好用 Java。而如果策略算法領域的測開,Python 則更好。
---- @思寒 測試專家
Java 和 Python 都不錯。這是最大眾的語言。
Python 最直接,生態強大,但是沒有 Java 強大。
Java 的話是分兩層的。JVM + JVM 之上的各種語言。也就是說你用Python、Ruby、Java、Groovy、Kotlin、Scala 等都可以調用Java 編寫的庫,生態上有優勢。
但這個原因還是次要的,主要還是將來要做測試左移和測試右移,分析代碼、統計覆蓋率等都得跟研發保持一致,而國內用 Java 的公司可能佔了 90%;
另可參考 測試行業的編程語言之爭 by 思寒
---- @範令凱 58 到家測試專家
- 針對沒有接觸過代碼的小白,建議從 Python 入手,門檻低,學習成本比較低;
- 針對大數據的測試建議 Python;
- 本身 Python 和 Java 沒有特別大的優劣之分,都有足夠的庫和插件可以完成我們的測試。遇到問題也都可以從網上快速的找到解決方案。所以選擇 Python 還是 Java,最主要思路還是跟公司的技術棧保持一致。
比如我這邊有 Dubbo 的接口,建議選擇 Java,從接口測試到後續的代碼走讀,都比較方便(當然 Python 也可以實現 Dubbo 的接口測試,但可能成本比較高)。
---- @恆溫 測試專家
首先,編程語言本身沒有優劣之分,每種語言的粉絲都認為自己用的語言是最好的,就像 PHP 是世界上最好的語言一樣。在工業界,我們可以看[ TIOBE 的語言排名]
(http://www.cncms.com.cn/hardware/20181109/11091503.html)。
一般來說 Java 和 C 都是高居版首的。至於為什麼,網上的說法比較多,總結來說就是 Java 跨平臺,C 語言和底層彙編最接近。但是其實有一個林迪效應,對於會自然消亡的事物,生命每增加一天,其預期壽命就會縮短一些。而對於不會自然消亡的事物,生命每增加一天,則可能意味著更長的預期剩餘壽命。Java 和 C語言感覺就是這樣。
Python 其實還算門新語言,1991年出來的吧,在互聯網和移動互聯網兩個時代,也沒有太大的亮點,所以一直被人當做腳本語言使用。直到 Python 作者加入了谷歌,然後谷歌大力推 Python,你也知道,中國的技術都是熱鬧驅動和老外驅動,老外搞啥,就搞啥,然後慢慢地帶起了 Python,到了大數據時代,更是厲害,一躍到了前10,這主要得益於 Python 的學習曲線比 Java 簡單平滑,然後因為以前一直在科學計算這塊使用,有大量的數據生態庫。
至於在公司的使用情況呢,國外不知道,國內來看的話,據我所瞭解的公司來看,Java 居多,尤其是進入 IOT 時代,Android 稱王的時代又回來了,那用 Java 的更是多了。再去看看測試相關的開源項目或者類庫,也大部分是 Java 的。那最近最火的 Appium 來說,Java Client 是更新最快,實現最好的。WebDriver 也是如此。
如果讓我推薦用什麼語言的話,我會說,
- 你的公司大部分人用什麼,你就用什麼。
- 如果你精通 Python,那麼學個 Java 也不難。
- 如果你精通 Java,學 Python 也很容易。
- 如果你都不會,建議 Java 和 Python 都學一下。多一個技能,多一口飯。
- 認真學一門語言,別撿芝麻丟西瓜。
---- @大貓 測試技術專家
這兩門語言都是必須要學的,並且大部分自動化都支持雙版本,Python 更高級,Java 更底層點。二者都依賴生態庫,小型項目用 Python,其他用 Java。學習難度是 Java 高於Python。Java 反射和工程性高於 Python。常規的效率上都差不多。Python 和 Java 都有推導表達式。
建議就是都學,二門語言加一起認真學一年就很好了。只要有耐心。:)
---- @曉光 測試技術專家
跟被測物同語言最好。
- interop 不會有坑。
- 開發能讀懂,溝通不會有坑。
- 如果是單元測試或者結合很緊的接口測試可以跟生產代碼放在一起。加入 CI 經常跑,保持有效性。
(文章來源於霍格沃茲測試學院)