1. 程式人生 > >測試大佬談 如何進入BAT大廠做一個測試開發工程師?(轉)

測試大佬談 如何進入BAT大廠做一個測試開發工程師?(轉)

 

本文轉載自 百家號    念師        https://baijiahao.baidu.com/s?id=1593524964605066107&wfr=spider&for=pc

 

作為一名深愛測試開發工程師崗位的QA,本文總結了我在百度做測試的近兩年的一些經驗和對測試開發這一崗位的理解,以及如何有針對性的達到BAT對測試開發工程師的崗位要求。希望本文能讓大家對測試開發這一崗位有更深入的認識,同時也能幫助想做QA的同學們更快的進入測試開發這一領域。

什麼是測試開發工程師?是測試?還是開發?

對於沒有進入網際網路領域的同學,聽到測試開發工程師可能會感覺到十分困惑。它究竟是測試還是開發呢?

在不同的公司、甚至不同的部門中,測試開發工程師所負責的工作可能並不完全一致。比如百度QEC部門的測試開發工程師主要負責的就是純粹的測試平臺的開發,而不參與業務的測試。但是對於絕大部分的測試開發工程師而言,測試開發工程師最核心的任務是保證產品質量,也就是我們常說的測試。

本文中,我們主要討論的也是我們常說的測試人員。那既然是測試,為什麼又稱之為測試開發工程師呢?主要原因是對於現在的測試人員而言,不再是依靠單純的手工測試來發現和定位Bug,而更多的是通過編寫指令碼/專案/平臺來自動化測試、迴歸測試、效能測試等。因此,對於測試人員來說,其主要的精力和時間也在指令碼和工具開發中,因此通常稱之為測試開發工程師。

 

對BAT初級(百度T3,T4/阿里P5)測試開發工程師而言,應該掌握哪些技能?

首先,既然作為一個測試人員,基本的測試理論一定是需要了解的,包括黑盒測試、白盒測試以及通過等價類、邊界值等設計測試用例等。

 

其次,已經提到需要通過編寫程式碼來進行測試,那麼一定需要熟練掌握一門程式語言,例如Python,Java或者Go語言等。

效能測試是每個專案中必不可少的一部分,因此需要理解效能測試的基本原理、理解效能測試的目的並能夠獨立分析效能測試的指標。同時,還需要掌握某個效能測試的工具,例如Jmeter,Loadrunner等等。

在自動化測試中,通常介面測試是最常用的並且有效的。所以熟練精通介面測試及其HTTP相關原理和使用,可以使用某種程式語言或Jmeter等工具進行介面測試也是必備的技能之一。

此外,UI自動化測試是更多同學對自動化測試的理解。雖然在實際應用過程中,UI自動化測試受到各種侷限,但是作為最終UI級別的自動化測試對於一些核心功能頁面而言,也是不可或缺的。目前比較常用的UI自動化測試工具有:Selenium。

當我們準備了各種自動化測試指令碼後,為了避免每次手工執行指令碼帶來的重複的操作,就要求我們測試人員掌握持續整合的概念和理論,並熟悉使用某個持續整合工具,例如Jenkins。

同時,由於基本所有的服務都會部署在Linux機器上進行測試,因此,我們需要掌握Linux系統的基本使用和相關操作。

此外,我們在面試的過程中,通常還會對資料庫以及資料結構和演算法的方面進行考察作為加分項。主要原因是對於資料庫而言,是所有專案中核心的資料儲存的部分,因此無論測試什麼專案以及開發哪些測試平臺,都不可避免的需要了解相關的知識。而資料結構和演算法一方面可以考量一個同學的思維和邏輯能力,另一方面後續對於高水平的測試開發人員,熟悉資料結構和演算法更可以提升自己編寫的測試指令碼/工具的效率。

如何從零開始(對於非純計算機專業的學生)逐步成為一名合格的測試開發工程師?

我自己本身就是一個非純計算機專業畢業的學習(研究生的專業都是訊號處理)。在學校期間並沒有接觸到太多的程式設計。

Ps:大學期間學習過C語言課程(基本已經不記得了),研究生期間使用matlab做模擬模擬試驗。

下面,我就根據我個人的經驗來簡單的講講如何從零開始學習測試開發工程師的基本技能。

Step1:首先需要掌握一門程式語言和某種資料庫。推薦:Python,Go,NodeJS。資料庫可以從MySQL入手,後續可以學習一下MongoDB以及Redis。

原因:相比較C,C++以及Java等常用語言,Python,Go,NodeJS有一個共同的特點,使用簡單,功能強大。以Python為例,本身語法相對簡單,學習成本相對較低。對於Python有著大量的第三方庫的支援,通過這些第三方庫,我們能很快的實現一些相對複雜的功能。

要求:此處所說的掌握一門程式語言並不是僅僅瞭解其基本語法,而是指利用該語言去完成一些練習,例如開發一個完整的小型Web專案(個人部落格)等。

Ps:在學習語言開發專案的過程中,推薦使用TDD(測試驅動開發)的方式進行開發,一方面可以學習如何有針對性的設計測試用例,另一方面可以學習單測的基本知識(Ps:在大部分公式中,單測是由開發人員編寫,但是掌握如何編寫單測後有助於更好的推進開發人員完成單測)

Step2:學習測試相關的基本原理,推薦上文中提及的軟體測試一書。

Step3:利用測試理論對我們自己開發的小型Web專案進行測試,找出其中存在哪些問題並修復。

Step4:學習介面測試理論,利用我們掌握的程式語言對開發的小型Web專案進行介面測試

Step5:學習Jmeter或者Loadrunner的使用,來對我們的Web專案進行簡單的壓測,並找到我們專案能達到的最大併發數等資訊,90%響應時間等。

Step6:學習Selenium並針對我們的Web專案編寫UI自動化測試。

Step7:學習Linux系統的基本操作,將我們編寫好的專案部署在Linux機器上。

Step8:學習Jenkins的基本使用,在Linux機器上安裝Jenkins並配置Jenkins Job,使得其可以完成程式碼提交後自動部署並進行單元測試、介面測試、UI測試、效能測試。

 

To be a QA or RD?

上面提到的僅僅是對一個初/中級的測試開發人員所要求掌握的基本技能。看到這兒可能很多同學就會感到很糾結了。 是不是顛覆了很多同學對測試的認知?是不是覺得既然會程式設計那為什麼還要做測試……

的確,這是目前很多同學(甚至包括BAT大廠)對測試的理解,覺得測試並不需要很強的技術能力,只需要細心、耐心、認真即可。但是,隨著網際網路技術的一步步發展,手工測試已經無法滿足生產需要了。例如在一些每週都需要釋出新版本的專案中,手工測試是完全無法覆蓋所有功能點的。因此,隨著網際網路技術的發現,對測試開發人員的要求也不斷提高。 那對於一個有一定技術能力的同學而言,究竟是應該選擇做一個測試開發崗位還是一個純開發的崗位呢?

這個問題永遠沒有標準答案。那我就來聊聊我為什麼喜歡測試開發這一崗位吧:1. 能夠接觸更廣的知識。對於測試而言,我們有另一個稱呼:質量保證人員。不像開發僅僅是需要了解如何寫程式碼,同時還需要了解如何測試、如何進行持續整合甚至如何部署、如何監控等等。2. 更自由的實現方式。對於測試人員而言,我們的最終目的是保證產品質量,而具體通過什麼方法來保證產品質量則更加的自由。我們可以學習最新的框架,最近的方法和最流行的技術來達成我們的目標,而對於開發人員來說,則會受到更多來自公司、專案組的限制。