從外包菜鳥到測試開發,薪資一年翻三倍


本文為霍格沃茲測試學院優秀學員學習心得與面試經驗分享。

本人本科就讀於某普通院校(很普通的那種技術示范學院),畢業后懵懂的加入了軟件測試這個行業,至今有三年工作經驗。通過在霍格沃茲測試學院的這段學習經歷,我的職業角色完成了從功能測試到外包測試,再到測試開發的轉變,並順利拿下某互聯網企業測試開發崗位 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/\n/|/g;t1'
:1 ~ t1 指設置一個標記,若成功,則重復執行
N指追加前面的IP 例如:216.x.x.x \n 216.x.x.x
s/\n/|/g 指將換行符替換成|
 

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

對於計算機網絡

(1)網絡七層模型,TCP/IP模型

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 區別

  • 端口:http 80 ;https 443;

  • 資源:https 需要加解密需要消耗更多 CPU 內存;

  • 安全:https 需要認證證書,http 無法驗證身份;

(4)HTTPS 的通信加解密過程,證書為什么更安全

HTTPS 含有證書,CA 證書需層層認證,用上層公鑰解開 CA 的 hash 簽名獲取 hash 值;且與權威機構存儲 hash 值對比,判斷認證可信;

過程:

  1. 客戶端使用 HTTPS 的 URL 訪問服務器,要求建立 SSL 連接,發送相關數據及隨機數給服務端

  2. 服務端收到請求,發送相關數據,隨機數,證書信息(含公鑰)給客戶端

  3. 客戶端校驗證書,生成隨機數 pre-master,並用服務器公鑰進行加密,發送已加密隨機數 pre-master 與客戶端證書給服務端

  4. 服務端校驗證書

  5. 客戶端,服務端通過對端隨機數,已方隨機數,pre-master推算出對稱密鑰

  6. 通過對稱密鑰加密傳輸

(5)http1.0與https1.1有什么區別

  1. http1.0為短連接;http1.1請求頭攜帶connetion:keep-alive,建立長鏈接

  2. http1.0一個連接對應一個請求一個響應;1.1連接過程中可實現多個請求多個響應,且不需等待響應可發送下一個請求

  3. http1.1增加了100狀態碼,允許客戶端向服務端發送請求頭待確認后再發送請求體內容,節省了帶寬

  4. http1.0認為一個主機擁有唯一IP;http1.1中一個IP對應多個主機,增加了host指明主機名

  5. 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)請求一個網址發生的完整過程

  1. DNS解析:通過瀏覽器緩存->操作系統緩存->路由器緩存->DNS緩存(運營商)->根域名服務器

  2. 建立TCP連接,發起三次握手

  3. 發送HTTP請求

  4. 服務器處理請求

  5. 瀏覽器解析渲染頁面:

    • 瀏覽器讀取響應加載 HTML

    • 靜態資源加載

    • 動態資源加載

  6. 釋放TCP連接,四次揮手

(10)常見網絡狀態響應碼

  • 1XX 指示信息,請求已接受,等待繼續處理

  • 2XX 請求接受

  • 3XX 重定向

  • 4XX 客戶端錯誤

  • 5XX 服務端錯誤

  • 301 永久性轉移,302 暫時性轉移,400 客戶端請求有錯(安全攔截),401 請求未授權,403 禁止訪問,404 資源未找到

  • 501 服務器內部錯誤,502 錯誤網關,503 服務器不可用,504 網關超時

(11)HTTP 請求,響應結構

 

 

 

 

對於自動化測試原理

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

對於數據庫 MySQL

重點復習 inner join,left join ,right join,union,子查詢,order by,group by …having,distinct,事務,索引類型、原理,存儲過程,慢 SQL,優化等。

對於排序與數據結構

主要掌握冒泡法,插入排序,選擇排序,快排,歸並算法,希爾排序等(大部分面試過程,快排是最核心的,其余排序掌握兩三種即可)。

個人學習題目:https://github.com/testQx/math

主要掌握順序表,鏈表(單向,雙向,循環等),棧,隊列,樹

對於算法,除上方的數據結構外,還需掌握 hash 散列表,動態規划等,建議刷 LeetCode 初中級題目,刷一百題左右足夠了。

對於 Python 學習

  1. 深淺拷貝

  2. 各數據結構特點、區別

  3. 垃圾回收機制

  4. Python 緩沖池

  5. 裝飾器原理與實現

  6. 線程,進程,協程區別、實現

  7. 迭代器與生成器等

對於 Shell 腳本

Shell 語法編寫規則:

同一個 shell 中編寫函數 a,function a() ,不需要事先定義有多少個變量,需要調用函數時,直接傳參 a 123,則此"123" 想要在 function a 中體現時,則 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. 判斷條件邏輯符號:&& 與,|| 或,!非 ;

  6. 判斷條件數值大小符號:-eq 等於,-ne 不相等, -gt 大於, -ge 大於等於,-lt 小於,-le 小於等於;

  7. 跟蹤 shell 執行:sh +x xxxx.sh (會將可能輸出的結果進行打印);

  8. a='123' 想要輸出a的變量 盡量使用${a} 而不是$a ,避免拼接變量時搞錯值 $( )與等同,執行里面的程序命令 執行一串命令,可用()和{} 當使用(xxxx;xxx)中間使用;隔開使用{xxx;xxxx;},中間、尾部必須使用;隔開,且第一個命令前必須有空格;

  9. $(( )) 表示進行整數計算;

  10. 條件語句中[ ]表示匹配中括號的字符,[!…]表示不匹配中括號的字符;

  11. =代表賦值,==代表判斷;

對於 Docker

重點復習學院課程的 dockerfile,docker 網絡模式,dockercompose,docker 文件管理系統等。

對於持續集成/交付

這部分主要復習學院課程相關視頻即可,掌握 Jenkins 的構建,插件,Maven 打包等。

對於安全

  • 命令注入:只用;拼接 shell 命令;

  • SQL注入:使用 OR 類似拼接引號達到繞過;

  • XSS漏洞:注入 HTML 閉合 JS 這些 &gt;

  • CSRF漏洞:偽造請求,將鏈接發給已登錄的瀏覽器,點擊時自動觸發更改;利用 URL,圖片這些點擊;

  • 使用 zap、appcran 等工具掃描,zap 可集成到 Jenkins 中,也可以通過調用 API 實現自身特殊的安全掃描;

對於測試思維

面試時候大部分會詢問你以往工作經驗中某一個模塊功能,讓你說出你是如何設計測試計划(此處需重點查看,面試官非常喜歡問)和測試用例

例如從點線面出發編寫功能性用例,UI層用例,兼容性用例,安全性用例,性能用例,接口用例等。

對於中間件

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

對於 Socket

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

對於 pandas

通過 Python 進行數據分析,后續課程中也有涉及,這部分為擴展加分項;

對於前后端框架

學院的測試開發后續課程中也有涉及,這部分為擴展加分項;

面試測試開發的時候,大家也不需要太緊張,除了以往的測試經驗外,更多會考察你對開發方面的理解,對語言的熟悉程度,以及你站在測試開發方向,對軟件測試和質量保障全局的一個理解。

另,Python 開發進階,個人比較推薦《流暢的 Python》這一本書。

最后,再次感謝學院各位老師尤其是思寒大佬的指導,祝學院越辦越好,也祝大家都學有所成,找到心儀的工作~~(end)

 

更多技術文章分享及測試資料

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM