1. 程式人生 > 其它 >測試人生 | 從外包菜鳥到測試開發,薪資一年翻三倍,連自己都不敢信!

測試人生 | 從外包菜鳥到測試開發,薪資一年翻三倍,連自己都不敢信!

⬇️ 點選“下方連結”,提升測試核心競爭力!

>>更多技術文章分享和免費資料領取原文連結

本文為霍格沃茲測試學院優秀學員學習心得與面試經驗分享,進階學習文末加群!
本人本科就讀於某普通院校(很普通的那種技術示範學院),畢業後懵懂的加入了軟體測試這個行業,至今有三年工作經驗。通過在霍格沃茲測試學院的這段學習經歷,我的職業角色完成了從功能測試到外包測試,再到測試開發的轉變,並順利拿下某網際網路企業測試開發崗位Offer,年薪35W+(跳槽兩次,薪資一年內翻了近三倍)!這裡特別感謝各位老師和同學的幫助,也分享下自己的一點學習心得和成長經驗。

吃過手工測試的苦,才懂測試開發的甜

我之前主要在兩家公司呆過,工作的第一家公司是某通訊服務小公司,在接近2年時間裡,大部分都是以功能測試為主,還一度被派出差,以及兼職各種產品、運維、運營的活,感覺自己都不像一個測試人員。出差期間(半年左右),根據工作需要學習各種技能,對Linux操作逐漸熟練起來,這也為我後面學Docker、持續整合等打下了基礎。
出差歸來,我主動提議公司去搞UI自動化測試。雖然當時用公司提供的Java程式碼框架,還非常落後低階(需要由測試人員來維護Excel編寫用例元素定位),但總算是初步接觸了自動化。而且,在編寫用例時候遇到很多方法在框架裡沒實現,更是一度激發起自己修改程式碼的衝動。尤其是在後期的時候,面對越來越多的本地化客戶環境,卻無時間去編寫自動化,每天都加班加點到各個環境去手動點選,實在是忙不過來,非常痛苦也愈發感到自動化測試和持續整合的好處。
2020疫情期間的大膽抉擇:跳槽+報班學習
在2020過年放假期間冷靜思考下,覺得自己不能再這麼點點點下去了。雖然當時正趕上疫情爆發,身邊大多數親友都建議不要跳槽,然而恐懼最終被自己內心深處的那個聲音所戰勝,決定不再遷就,開始尋找新的工作機會。

乾貨公開課,助力我第一次成功跳槽

在找工作的時候,在網上看到了霍格沃茲測試學院的《測試開發實戰進階》課程簡介,課程內容很系統,與自己想學的很接近,但一開始考慮價格原因並沒有直接報名,只是加了助教好友,蹭了很多公開課。然後驚喜的發現只是公開課所學就很有裨益,直接用到了找工作面試中,併成功讓我在疫情期間收穫到多家公司的Offer,然後就正式報名了測試開發課程。
第一次跳槽,我從多個Offer中最終選擇了去某網際網路大廠做外包測試。雖然是外包崗位,薪資也較低,但感覺大廠的技術體系和學習氛圍要更好,自己也想親身體驗下在大廠工作是怎樣的體驗,也利於進一步深入的學習先進測試技術。

外包隨時離崗的壓力,成為我努力學習的動力

外包期間,無論是工作還是心態上,都經歷了不少挑戰。
由於我是第一批測試外包人員,當時公司很多測試流程還不完善,測試用例時間來不及編寫,同時提測多個需求,一度是吃老本直接提測。於是,我跟相關的部門領導多次提議,並利用在學院所學,自己加班編寫了介面自動化測試框架,成功地幫助專案解決了一部分痛點問題。
然而,外包人員的流動性真的太大了,隨著專案結束和外包合同終止,隨時都可能被離崗。這種不安定和惶恐的感覺一方面讓我倍感壓力,一方面也促使我狠下心來努力學習,立志成為大廠正式的全職測試開發人員。在每天加班回家後,我仍然會學習霍格沃茲測試學院的測試開發實戰課程,經常學到凌晨兩三點,持續了接近半年時間。在看到不少同班同學都成功拿到BAT大廠Offer,自己也開始了嘗試投遞簡歷,並最終很幸運可以收穫了某網際網路企業測試開發崗位Offer(第二次跳槽後年薪達到35W+,是原來的三倍左右)。說實話,能拿到這麼滿意的薪資,我自己也被震驚了,當時都有點不敢相信。從鼓起勇氣選擇改變,到默默無聞的堅持學習,再到努力實踐應用,直至能被企業所認可,內心其實非常感動。

懂得為什麼學,找到專精方向

也真的很感謝霍格沃茲測試學院的導師和測試開發班的各位同學。在報名學院的4個多月時間裡,真心學到了非常多的乾貨知識,我也第一次體會到了有大咖導師帶著學習,目標清晰,方向正確,不走彎路的美好感受。這也是我認為報班學習的最大價值——重要的不是學到知識,而是要懂得為什麼學;可怕的不是不努力,而是不知道努力的方向。
霍格沃茲測試學院的課程體系覆蓋非常全,讓我知道了測試技術的發展方向。在學員群裡,有問題隨時@導師,回覆非常迅速,另外同班的一堆大佬們,也是才富五車,個個搶著給答案。即便沒有任何問題,在群裡看各位大佬分享平常的工作心得,面試經驗等,都會有很大的啟發。而且課程內容一直在更新,至今還在加課,第一次見這麼良心的培訓班~~平常學院的各種活動,例如知識分享,答疑區,金羽毛杯,內推活動,報名當學習委員(以教促學)等等,都很有意思。
課程內容真的非常多,個人建議如果錄播課程暫時無法跟上,可以先放一放後面再補,但是直播內容一定要堅持跟下來,直播課大部分是精華講解和實戰演練,一定不能錯過。尤其是要選擇自己想專長的方向,專精一部分去學習提升,我自己選擇的是UI與介面自動化測試。我認為尤其要掌握好自動化測試、效能測試這部分實戰技能,對於平臺開發可以暫時放緩,畢竟我們測開的定位還是傾向於測試左右移,對程式碼的精準測試,而非一個三流的開發。
以下分享我個人的學習心得和麵試經驗:

測試開發成長路線和麵試經驗

首先,我認為一定要有自己的學習方向,目標是要做到T字型人才,保證廣度的時候也一定要有一兩項專精,這樣才能夠在面試時候脫穎而出。
分享下我個人的學習路線和麵試前重點準備技能:
pytest->完善介面自動化框架->UI自動化框架->Linuxs三劍客->計算機網路->自動化原理->MySQL->排序演算法->資料結構->Python->Shell指令碼->Docker->持續整合/交付->安全->測試用例計劃思維->中介軟體->socket->pandas->前後端框架
重要是完善介面,UI自動化測試框架實戰技能,這部分是一定要去落地實施的,不然你無法真正接觸到業務核心難點。所謂師傅領進門,修行在個人。

pytest

是最流行的Python自動化測試框架,需要重點掌握。
UI自動化測試
除了學院教授的PO思想,簡單完成頁面封裝後。我們要去增加用例,只有用例數足夠多時候,你會發現還需要如何在多個py檔案中管理用例順序?driver排程是否合理這一系列問題。也可以去增加相關的日誌,報告模組的封裝,將部分JS處理同步整合到Basepage模組中,還有一系列的系統操作,SeleniumGrid的整合等等。
UI自動化擴充套件:增加log儲存,Allure報告儲存(此處的Allure必須要結合趨勢圖,例如這一次生成報告後,你需要儲存result中的history檔案,等下一次生成時,覆蓋到report中的histroy中),seleniumgrid的執行命令,使用pytest.ini進行定製,使用pytest鉤子函式定製,使用pytest-xdist進行併發用例等)。

對於介面自動化

其實很多時候,企業不僅限於滿足只斷言介面狀態響應碼,部分欄位等。對於編寫速度,穩定性,資料真實性也是有很多的要求。對於速度,我們可以通過mustache模板技術生成測試用例,可以通過Charles生成的chls檔案進行部分處理生成JSON或者YAML檔案;對於穩定性,可以通過在設計階段,生成對應介面正確的jsonschema進行對比;對於資料真實性,可以通過mitmproxy,讓流量走特地介面,直接生成線上資料,真實模擬使用者操作回放。
介面自動化擴充套件:(增加log儲存,Allure報告儲存,異常處理機制,連結資料庫,失敗用例重跑pytest-rerunfailures,用例執行控制pytest-ordering,重複執行pytest-repeat,使用jsonschema進行斷言,通過charles檔案自動生成YAML或JSON檔案,通過mitmproxy進行線上流量回放等)。
對於Linux三劍客

  • (1)匹配 nginx.log 中 404 和 500 有多少行?
cat nginx.log |awk '{print$9}' |grep -E '404|500' |wc -l  // 過濾輸出了$9一列 awk '$9~/404|500/' nginx.log | wc-l  // 只將$9匹配,輸出的仍是完整行
  • (2)統計 nginx.log中 出現次數最多的 IP
cat nginx.log |awk '{print $1}' | sort |uniq -c |sort -rn |head -3|awk '{print$2}'
sort 排序  sort -n 按數字排序  sort-r 反轉
uniq 去重  uniq -c 去重並統計重複次數
head -3 頭三個   tail -3 尾三個
  • (3)將 nginx.log 中的 topics 後面的數字替換成 number
sed -E 's/topics/[0-9]*/topics/number/g' nginx.log
-E 採用正則   's/old/new/g' 固定替換公式
[0-9]匹配數字,[0-9]*匹配 0個或者多個數字
/ 表示 / 符號,進行轉義
  • (4)講 nginx.log 中的 ip 地址橫向列印
awk '{print $1}' nginx.log  | sed -e ':1;N;s/
/|/g;t1'
:1 ~ t1 指設定一個標記,若成功,則重複執行
N指追加前面的IP 例如:216.x.x.x 
 216.x.x.x
s/
/|/g 指將換行符替換成|

三劍客方面除了常見的一些命令之外,建議熟練掌握正則使用,正則非常強大。

對於計算機網路

(1)網路七層模型

|OSI七層模型|TCP/IP模型|5層結構|| |---|---|---|---| |應用層|應用層|應用層|TELENT,HTTP,DNS,FTP,SMTP,POP3| |表示層|---|---|---| |會話層|---|---|---| |傳輸層|傳輸層|傳輸層|TCP/UDP| |網路層|網路層|網路層|P,ARP,RARP,ICMP,IGMP| |資料鏈路層|網路介面層|資料鏈路層|乙太網,物理網路,LAN/WAN| |物理層||物理層||

(2)UDP與TCP區別
  • TCP有連線;UDP無連線(基於無狀態傳輸); - TCP需要建立三次握手,含有確認、擁塞、重傳機制,對系統資源要求多; - UDP不需要一系列複雜認證,速度快;TCP速度慢; - TCP含有確認機制,資料可靠,有序; - UDP不可靠,無序;TCP面向位元組流(流模式);UDP面向報文(資料報模式);
(3)HTTP與HTTPS區別
  • 埠:http80;https443; - 資源:https需要加解密需要消耗更多CPU記憶體; - 安全:https需要認證證書,http無法驗證身份;
(4)HTTPS的通訊加解密過程,證書為什麼更安全
  • HTTPS含有證書,CA證書需層層認證,用上層公鑰解開CA的hash簽名獲取hash值;且與權威機構儲存hash值對比,判斷認證可信; - 過程: - 客戶端使用HTTPS的URL訪問伺服器,要求建立SSL連線,傳送相關資料及隨機數給服務端 - 服務端收到請求,傳送相關資料,隨機數,證書資訊(含公鑰)給客戶端 - 客戶端校驗證書,生成隨機數pre-master,並用伺服器公鑰進行加密,傳送已加密隨機數pre-master與客戶端證書給服務端 - 服務端校驗證書 - 客戶端,服務端通過對端隨機數,已方隨機數,pre-master推算出對稱金鑰 - 通過對稱金鑰加密傳輸
(5)http1.0與https1.1有什麼區別
  • http1.0為短連線;http1.1請求頭攜帶connetion:keep-alive,建立長連結 - http1.0一個連線對應一個請求一個響應;1.1連線過程中可實現多個請求多個響應,且不需等待響應可傳送下一個請求 - http1.1增加了100狀態碼,允許客戶端向服務端傳送請求頭待確認後再發送請求體內容,節省了頻寬 - http1.0認為一個主機擁有唯一IP;http1.1中一個IP對應多個主機,增加了host指明主機名 - http1.1增加更多新請求頭,錯誤響應狀態碼與快取機制
(6)get和post區別
  • GET請求引數在URL中;POST請求引數放在請求正文中 - GET請求引數有限制(例如瀏覽器對URL長度限制); - POST無限制GET引數存放在連結中直接儲存在瀏覽器歷史記錄中,較不安全 - GET大多數用於資訊獲取,POST用於資訊修改,對伺服器安全影響程度不同
(7)session,token,cookies區別
  • Cookie:由伺服器生成,儲存在客戶端中 - Session:一般通過Cookie傳輸,用於區分使用者,儲存在伺服器中(容易佔用伺服器資源,且伺服器故障,負載均衡等容易丟失或請求到其他伺服器中) - Token:一般通過Cookie傳輸,將使用者資料進行簽名(加密),並將簽名和使用者資料整合成token傳送給客戶端,客戶端攜帶token請求時,將token中使用者資料再次簽名,與token中的簽名進行對比,一致認為使用者已認證登入,不需要儲存在伺服器中
(8)http三次握手四次揮手過程
  • 認知概念: - 序號:Seq序號,用來標識從TCP端向目的端傳送的位元組流 - 確認號:Ack序號,當ACK標誌位為1時,確認號有效,Ack=Seq+1 - 標誌位:URG(緊急指標有效),ACK(確認序號有效),PSH(接受方應儘快把報文交給應用層),RST(重置連線),SYN(發起新連線),FIN(釋放連結)
  • 三次握手與四次揮手:
  • 補充說明:在客戶端與服務端傳輸TCP報文中,雙方Ack與Seq都在彼此Ack與Seq基礎上計算,這樣保證了TCP報文傳輸的連貫性,一旦報文丟失,則無法繼續握手
  • 四次揮手:
  • 補充說明: - 與“三次握手”一致,在彼此Seq,Ack上計算,保證TCP連貫性 - “三次握手”被動伺服器方不需要任何準備 - “四次揮手“被動伺服器方不能立即釋放連線,還有必要資料處理,經過CLOSE-WAIT階段準備 - 客戶端在最後需等待2MSL,確保客戶端收到伺服器端FIN,FIN傳送後,若2MSL內未收到ACK則再次傳送FIN

(9)請求一個網址發生的完整過程

  • DNS解析:通過瀏覽器快取->作業系統快取->路由器快取->DNS快取(運營商)->根域名伺服器 - 建立TCP連線,發起三次握手 - 傳送HTTP請求 - 伺服器處理請求瀏覽器解析渲染頁面: - 瀏覽器讀取響應載入HTML - 靜態資源載入 - 動態資源載入 - 釋放TCP連線,四次揮手
(10)常見網路狀態響應碼
  • 1XX指示資訊,請求已接受,等待繼續處理 - 2XX請求接受 - 3XX重定向 - 4XX客戶端錯誤 - 5XX服務端錯誤 - 301永久性轉移,302暫時性轉移,400客戶端請求有錯(安全攔截),401請求未授權,403禁止訪問,404資源未找到 - 501伺服器內部錯誤,502錯誤閘道器,503伺服器不可用,504閘道器超時
(11)HTTP請求,響應結構


對於自動化測試原理

  • 重點掌握Selenium自動化原理,介面Request原理,介面Mitmproxy代理原理(中間人攻擊),Appium自動化測試原理;

對於資料庫MySQL

  • 重點複習innerjoin,leftjoin,rightjoin,union,子查詢,orderby,groupby…having,distinct,事務,索引型別、原理,儲存過程,慢SQL,優化等。

對於排序與資料結構

  • 主要掌握冒泡法,插入排序,選擇排序,快排,歸併演算法,希爾排序等(大部分面試過程,快排是最核心的,其餘排序掌握兩三種即可)。 - 個人學習題目:https://github.com/testQx/math - 主要掌握順序表,連結串列(單向,雙向,迴圈等),棧,佇列,樹
    對於演算法,除上方的資料結構外,還需掌握hash散列表,動態規劃等,建議刷LeetCode初中級題目,刷一百題左右足夠了。

對於Python學習

  • 深淺拷貝 - 各資料結構特點、區別 - 垃圾回收機制 - Python緩衝池 - 裝飾器原理與實現 - 執行緒,程序,協程區別、實現 - 迭代器與生成器等

對於Shell指令碼

  • Shell語法編寫規則: - 同一個shell中編寫函式a,functiona(),不需要事先定義有多少個變數,需要呼叫函式時,直接傳參a123,則此'123'想要在functiona中體現時,則echo$1,引數由1開始計數,呼叫函式返回值,則在執行完函式時,echo$?則輸出上一個運算的返回值。 - 編寫迴圈語句:
1.while xxx ; do xxxxx done結構
2.for i in {0..9}; do xxx done 或者 for i in ((i=1;i<=j;i++)) 編寫條件判斷語句;
3.if ['xxx'='xxx'];then xxxxx fi 注意[]中間各個空格必須隔開
4.多重判斷:if['xxxx'='xxxxx'];then xxxxx else if['xxxx'='xxxx'];then else xxxxx fi判斷條件邏輯符號:&&與,||或,!非;
5.判斷條件數值大小符號:-eq等於,-ne不相等,-gt大於,-ge大於等於,-lt小於,-le小於等於;
6.跟蹤shell執行:sh+xxxxx.sh(會將可能輸出的結果進行列印);
7.a='123'想要輸出a的變數儘量使用${a}而不是$a,避免拼接變數時搞錯值$()與等同,執行裡面的程式命令執行一串命令,可用()和{}當使用(xxxx;xxx)中間使用;隔開使用{xxx;xxxx;},中間、尾部必須使用;隔開,且第一個命令前必須有空格;
8.$(())表示進行整數計算;條件語句中[]表示匹配中括號的字元,[!…]表示不匹配中括號的字元;
9.=代表賦值,==代表判斷;

對於Docker

  • 重點複習學院課程的dockerfile,docker網路模式,dockercompose,docker檔案管理系統等。

對於持續整合/交付

  • 這部分主要複習學院課程相關視訊即可,掌握Jenkins的構建,外掛,Maven打包等。

對於安全

  • 命令注入:只用;拼接shell命令; - SQL注入:使用OR類似拼接引號達到繞過; - XSS漏洞:注入HTML閉合JS這些> - CSRF漏洞:偽造請求,將連結發給已登入的瀏覽器,點選時自動觸發更改; - 利用URL,圖片這些點選; - 使用zap、appcran等工具掃描,zap可整合到Jenkins中,也可以通過呼叫API實現自身特殊的安全掃描;

對於測試思維

  • 面試時候大部分會詢問你以往工作經驗中某一個模組功能,讓你說出你是如何設計測試計劃(此處需重點檢視,面試官非常喜歡問)和測試用例。 - 例如從點線面出發編寫功能性用例,UI層用例,相容性用例,安全性用例,效能用例,介面用例等。

對於中介軟體

  • 這部分個人也仍在探索,需要多看一下Kafka,Zookeeper,Redis,mq原理,相關消費機制,優化機制等(面試測試開發是很好的一個加分項);

對於Socket

  • 如何簡單建立一個服務端與客戶端的通訊等等;

對於pandas

  • 通過Python進行資料分析,後續課程中也有涉及,這部分為擴充套件加分項;

對於前後端框架

  • 學院的測試開發後續課程中也有涉及,這部分為擴充套件加分項;
    面試測試開發的時候,大家也不需要太緊張,除了以往的測試經驗外,更多會考察你對開發方面的理解,對語言的熟悉程度,以及你站在測試開發方向,對軟體測試和質量保障全域性的一個理解。
    另,Python開發進階,個人比較推薦《流暢的Python》這一本書。
    最後,再次感謝學院各位老師尤其是思寒大佬的指導,祝學院越辦越好,也祝大家都學有所成,找到心儀的工作~~(end)

⬇️ 點選“下方連結”,提升測試核心競爭力!

>>更多技術文章分享和免費資料領取