盤:題型拆解與備考策略)
搜狗2020校招測試崗筆試第一場我到現(xiàn)在還記得那套題的風(fēng)格——不堆砌偏題怪題卻能在兩小時(shí)內(nèi)把你的真實(shí)水平摸得明明白白。后臺也一直有學(xué)弟學(xué)妹問這類校招測試筆試到底考什么、怎么準(zhǔn)備今天就把這輪筆試的考察結(jié)構(gòu)、核心知識點(diǎn)、場景題套路和編程題思路完整拆一遍。無論你是正在備戰(zhàn)校招的應(yīng)屆生還是想從功能測試轉(zhuǎn)測試開發(fā)的老手這份復(fù)盤都能幫你把測試筆試到底在考什么這件事理順。這輪筆試整體給人的感覺是題型跨度大但層次清楚既有送分的基礎(chǔ)題也有專門拉差距的綜合題。如果你只是背了幾道測試?yán)碚擃}就上場大概率會(huì)在場景設(shè)計(jì)和編程題上卡住。反過來如果你有實(shí)際項(xiàng)目經(jīng)驗(yàn)?zāi)呐骂}沒刷完也能靠思路拿分。下面我按模塊把筆試內(nèi)容拆開講每一塊都會(huì)說清楚考什么、為什么考、怎么答才穩(wěn)。1. 筆試整體架構(gòu)與考察重點(diǎn)回顧1.1 題型分布與時(shí)間分配這輪筆試的題型大致分四類選擇題與判斷題、簡答題、測試場景設(shè)計(jì)題、編程題。選擇題覆蓋計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)這些計(jì)算機(jī)基礎(chǔ)偶爾穿插一兩道測試?yán)碚摵喆痤}主要考測試基礎(chǔ)概念比如黑盒白盒的區(qū)別、測試的生命周期場景設(shè)計(jì)題是重頭戲要求針對某個(gè)具體功能寫出完整的測試用例編程題通常是兩道左右難度在LeetCode中等偏下但要求手寫且思路清晰。整體時(shí)間大概兩小時(shí)我個(gè)人建議的分配比例是選擇判斷題控制在30分鐘內(nèi)簡答題20分鐘場景設(shè)計(jì)題40分鐘編程題留出30分鐘。實(shí)際考試中很多人折在時(shí)間分配上——前面選擇題糾結(jié)太久后面編程題只能草草收場。我的經(jīng)驗(yàn)是選擇題里拿不準(zhǔn)的先按第一印象選做個(gè)標(biāo)記全卷寫完再回頭琢磨。這輪筆試的題目量不算特別大但信息密度高尤其是場景題一個(gè)題目里往往埋了三四個(gè)隱藏需求。審題一定要慢落筆一定要快。我見過太多同學(xué)一上來就寫用例寫到一半發(fā)現(xiàn)把需求理解偏了整段重來非常浪費(fèi)時(shí)間。1.2 從筆試題看測試團(tuán)隊(duì)的用人傾向這套題出得挺有水平它不考死記硬背的概念而是考你能不能站在一個(gè)測試工程師的角度去思考問題。比如簡答題里不會(huì)直接問什么是回歸測試而是給你一個(gè)版本迭代場景問你哪些用例需要回歸、怎么評估回歸范圍。這種問法背后的潛臺詞是團(tuán)隊(duì)需要的不只是會(huì)執(zhí)行用例的手而是能思考為什么測這些、怎么測更高效的人。另外編程題的存在本身就傳遞了一個(gè)信號——搜狗的測試崗位不是純手工測試而是要求具備測試開發(fā)能力的。你可以用任何語言寫但代碼質(zhì)量、邊界處理、思路清晰度都會(huì)被綜合評估。這跟行業(yè)趨勢是一致的測試崗位的門檻正在向測開一體化靠攏只會(huì)點(diǎn)功能測試已經(jīng)很難過了。還有一個(gè)細(xì)節(jié)值得注意整套題里沒有出現(xiàn)任何偏門框架或工具題而是聚焦在計(jì)算機(jī)基礎(chǔ)、測試方法論和邏輯思維上。這說明筆試階段他們不指望你什么工具都會(huì)工具可以進(jìn)公司再學(xué)但基礎(chǔ)不牢就很難補(bǔ)。這也是我給所有備戰(zhàn)校招的同學(xué)的建議——優(yōu)先夯實(shí)基礎(chǔ)工具和框架是錦上添花。2. 測開基本功核心知識點(diǎn)逐項(xiàng)拆解2.1 測試?yán)碚摶A(chǔ)與用例設(shè)計(jì)方法測試基礎(chǔ)理論是筆試的基本盤。黑盒測試和白盒測試的區(qū)別、測試用例的八大要素、缺陷的生命周期、測試計(jì)劃包含哪些內(nèi)容這些屬于必背內(nèi)容送分題不能丟。但真正拉開差距的是用例設(shè)計(jì)方法——等價(jià)類、邊界值、因果圖、判定表、場景法、正交實(shí)驗(yàn)?zāi)愕弥烂糠N方法適合什么場景并且能在題目里綜合運(yùn)用。舉個(gè)例子筆試題里如果讓你測一個(gè)用戶注冊功能很多人的第一反應(yīng)是列出賬號、密碼、手機(jī)號、郵箱這些字段然后每個(gè)字段寫幾條正常和異常用例。這種答法只能拿基礎(chǔ)分。更好的做法是先用等價(jià)類把輸入域劃清楚再用邊界值把每個(gè)等價(jià)類的邊界卡死比如密碼長度6-20位那5、6、7、19、20、21這六個(gè)值必須覆蓋然后考慮業(yè)務(wù)規(guī)則之間的組合比如用戶名已存在、密碼過于簡單、驗(yàn)證碼錯(cuò)誤這些屬于流程異常分支要用場景法把主流程和備選流程都走一遍。我當(dāng)時(shí)刷題的一個(gè)體會(huì)是不要背用例要背設(shè)計(jì)用例的方法。方法掌握以后不管題目換成什么功能你都能往里面套。另外邊界的選取要結(jié)合業(yè)務(wù)語義比如金額的邊界是0.01和最大限額而不是只看數(shù)據(jù)類型字符串的空值、空格、全角半角、超長輸入這些邊界也需要刻意積累。2.2 計(jì)算機(jī)網(wǎng)絡(luò)考點(diǎn)盤點(diǎn)測試工程師筆試?yán)锏木W(wǎng)絡(luò)題不會(huì)像開發(fā)崗那樣深挖TCP擁塞控制的數(shù)學(xué)推導(dǎo)但基本概念必須扎實(shí)。高頻考點(diǎn)集中在TCP和UDP的區(qū)別、三次握手四次揮手過程及狀態(tài)變化、HTTP和HTTPS的區(qū)別、HTTP常見狀態(tài)碼含義、GET和POST的區(qū)別、Cookie和Session的區(qū)別、DNS解析過程。這輪筆試?yán)镉幸坏李}是給一段網(wǎng)絡(luò)抓包日志問你TCP建連過程分別對應(yīng)第幾個(gè)包、每個(gè)包里的標(biāo)志位是什么。這類題在平時(shí)可以這樣練用Wireshark抓一次自己訪問網(wǎng)頁的包對照三次握手的時(shí)序圖看一遍印象會(huì)非常深刻。純靠背狀態(tài)轉(zhuǎn)換圖也能過但遺忘速度快。關(guān)于GET和POST的區(qū)別現(xiàn)在面試官和筆試都越來越不喜歡教材上的標(biāo)準(zhǔn)答案而是希望你結(jié)合應(yīng)用場景說。比如GET請求參數(shù)在URL里有長度限制會(huì)被瀏覽器緩存適合冪等的查詢操作POST請求參數(shù)在body里相對安全適合提交數(shù)據(jù)。筆試答題時(shí)盡量從語義層面答再結(jié)合場景舉例會(huì)比只列三個(gè)官方區(qū)別得分高。2.3 Linux與命令行筆試高頻題Linux命令是測試崗筆試的??彤吘购蠖巳罩静榭?、環(huán)境部署、自動(dòng)化腳本執(zhí)行都離不開命令行。高頻考點(diǎn)包括文件操作ls、cd、cp、mv、rm、find、權(quán)限管理chmod、chown、chgrp、進(jìn)程管理ps、top、kill、網(wǎng)絡(luò)命令ping、curl、netstat、telnet、文本處理grep、sed、awk、sort、uniq、tail、head、壓縮與打包tar、zip、gzip、系統(tǒng)資源查看free、df、du。筆試?yán)镒畛?嫉男问绞墙o定一個(gè)場景寫出對應(yīng)的命令——比如統(tǒng)計(jì)日志文件中某關(guān)鍵字出現(xiàn)的次數(shù)、查找當(dāng)前目錄下所有大于100M的文件、查看某端口是否被占用。這類題的答案通常不唯一但考察點(diǎn)很明確你知道用什么命令完成什么目標(biāo)并且能組合起來處理真實(shí)問題。我建議你把這些命令按目的整理成速查表而不是按命令本身排列。比如我想看日志對應(yīng)的命令組合是tail -f、grep、awk我想查服務(wù)狀態(tài)對應(yīng)ps -ef|grep xxx、netstat -anp|grep port這樣記憶負(fù)擔(dān)小答題也快。筆試時(shí)如果記不清某個(gè)參數(shù)寫一個(gè)能解決問題的替代方案也比留空強(qiáng)。2.4 數(shù)據(jù)庫與SQL考察方式數(shù)據(jù)庫題在測試筆試?yán)飵缀醣乜贾饕獓@SQL編寫展開。高頻場景包括單表查詢where、order by、group by、having、多表連查inner join、left join、right join、子查詢、聚合函數(shù)、去重、分頁、增刪改查。有些嚴(yán)格一點(diǎn)的筆試還會(huì)讓你寫一條查出每門課成績都大于80分的學(xué)生姓名這類經(jīng)典題目考查分組和條件的嵌套。這里有個(gè)很容易踩的坑很多人寫SQL時(shí)只在腦海中模擬數(shù)據(jù)量很小的情況沒考慮重復(fù)數(shù)據(jù)、NULL值、空表這些邊界。筆試閱卷雖然不執(zhí)行代碼但要展示你對邊界條件的考慮。比如分組統(tǒng)計(jì)時(shí)NULL字段會(huì)被group by單獨(dú)分到一組這在統(tǒng)計(jì)結(jié)果里經(jīng)常是隱藏bug。推薦刷題方式是去在線SQL練習(xí)平臺每天寫10條重點(diǎn)練連表查詢和子查詢因?yàn)檫@是筆試區(qū)分度的重災(zāi)區(qū)。還可以嘗試把需求先翻譯成中文邏輯再翻譯成SQL這樣思路不容易亂。3. 場景題與手寫測試設(shè)計(jì)真正拉開差距的地方3.1 測試場景設(shè)計(jì)的答題套路場景題的典型形式是請針對XX功能設(shè)計(jì)測試用例至少寫15條。這個(gè)XX可能是搜索框、購物車、文件上傳、掃碼支付、消息推送幾乎覆蓋互聯(lián)網(wǎng)產(chǎn)品的常見功能。很多人一看到至少寫15條就慌了其實(shí)只要按套路走30條都寫得出來。我有一個(gè)用了很久的答題框架分六層功能測試、界面測試、易用性測試、兼容性測試、安全性測試、性能及異常測試。每一層都往下鉆功能層先走主流程正常輸入得到正常結(jié)果再走分支流程取消、刪除、斷網(wǎng)、超時(shí)、重復(fù)提交。界面層關(guān)注布局、文案、錯(cuò)別字、提示語是否清晰、按鈕狀態(tài)是否置灰。兼容性考慮不同操作系統(tǒng)、瀏覽器、分辨率、機(jī)型。安全性考慮越權(quán)訪問、SQL注入、XSS、敏感信息明文展示。異常場景考慮弱網(wǎng)、無網(wǎng)、服務(wù)器異常、返回超時(shí)。數(shù)據(jù)維度考慮邊界值、超長輸入、特殊字符、空值、重復(fù)數(shù)據(jù)。以搜索框?yàn)槔眠@個(gè)框架可以輕松寫出覆蓋正常搜索、空搜索、特殊字符、超長關(guān)鍵詞、連續(xù)空格、前后空格、搜索結(jié)果為空、搜索歷史、熱門推薦、點(diǎn)擊搜索按鈕、回車觸發(fā)、弱網(wǎng)、斷網(wǎng)、服務(wù)器超時(shí)、大量并發(fā)搜索等20多條用例。關(guān)鍵在于你不是想到哪寫到哪而是按維度枚舉這樣既不容易漏也不會(huì)亂。3.2 自動(dòng)化測試思路題怎么做自動(dòng)化相關(guān)的內(nèi)容在筆試中一般不會(huì)讓你直接寫Appium或pytest代碼更常見的問法是如何對XX功能做自動(dòng)化測試請描述你的實(shí)現(xiàn)思路。這類題考的不是代碼能力而是你對自動(dòng)化測試體系的理解選型、分層、用例管理、報(bào)告輸出、持續(xù)集成。比如問如何對登錄功能做自動(dòng)化測試建議按層級來答。第一層說清楚UI自動(dòng)化用什么框架比如Selenium、Appium怎么定位元素、怎么處理等待第二層說清楚接口自動(dòng)化怎么做把登錄抽象為一個(gè)接口用例用pytest管理數(shù)據(jù)驅(qū)動(dòng)第三層說清楚怎么集成到CI/CD流水線里什么時(shí)候跑冒煙集、什么時(shí)候跑全量回歸。如果能說到登錄驗(yàn)證碼怎么處理接口層屏蔽、測試環(huán)境關(guān)閉、萬能驗(yàn)證碼就是加分項(xiàng)。還有一個(gè)容易忽略的點(diǎn)自動(dòng)化用例的穩(wěn)定性設(shè)計(jì)。筆試?yán)锶绻麊栍美紶柺≡趺磁挪榭疾禳c(diǎn)其實(shí)是等待策略顯式等待vs強(qiáng)制sleep、測試數(shù)據(jù)隔離、用例依賴管理。這些屬于實(shí)戰(zhàn)經(jīng)驗(yàn)沒跑過自動(dòng)化測試框架的人很容易答空所以建議在準(zhǔn)備階段自己搭一個(gè)小型pytest項(xiàng)目哪怕只有10個(gè)用例也能把fixture、conftest、斷言、報(bào)告這些概念串起來。3.3 安全測試和性能測試的入門考點(diǎn)安全測試和性能測試在筆試中占比不高但出現(xiàn)頻率很高屬于懂的人能拉開差距不懂的人只能瞎編的模塊。安全測試的入門考點(diǎn)主要是SQL注入、XSS、CSRF、越權(quán)訪問、文件上傳漏洞。筆試??嫉氖墙o一個(gè)接口你會(huì)做哪些安全測試或者列舉你聽說過的主流Web安全漏洞。性能測試的考點(diǎn)更偏概念和流程性能測試的類型負(fù)載測試、壓力測試、并發(fā)測試、穩(wěn)定性測試、常用指標(biāo)QPS、TPS、響應(yīng)時(shí)間、吞吐量、錯(cuò)誤率、CPU使用率、內(nèi)存使用率、性能測試的大致流程腳本錄制、參數(shù)化、場景設(shè)置、監(jiān)控、分析調(diào)優(yōu)。高頻簡答題是發(fā)現(xiàn)系統(tǒng)響應(yīng)時(shí)間過長你如何定位問題。這類題不需要你實(shí)際做過性能項(xiàng)目才能答但需要你理解測試目標(biāo)。比如回答如何定位響應(yīng)時(shí)間過長可以從前端、網(wǎng)絡(luò)、后端三層拆解先看是否資源加載耗時(shí)再看是否網(wǎng)絡(luò)擁塞最后看后端接口耗時(shí)和數(shù)據(jù)庫慢查詢。分析鏈路清晰比堆砌術(shù)語更容易拿高分。4. 編程題與手撕代碼比的是熟練度不是智商4.1 高頻算法題整理與思路搜狗測試筆試的編程題一般不會(huì)上動(dòng)態(tài)規(guī)劃、圖論這種對測試崗位來說過于偏門的算法更多集中在字符串處理、數(shù)組操作、鏈表、棧與隊(duì)列、二分查找、簡單遞歸、哈希表去重。難度大概在LeetCode簡單到中等之間但限時(shí)手寫考察熟練度。有一類特別高頻的題是字符串中第一個(gè)不重復(fù)的字符、反轉(zhuǎn)鏈表、有效的括號、合并兩個(gè)有序數(shù)組這類經(jīng)典題。我的建議是筆試前一周把LeetCode Top 100里的簡單題和中等偏下題過一遍重點(diǎn)看雙指針、哈希表、棧這三種數(shù)據(jù)結(jié)構(gòu)對應(yīng)的題型測試崗的算法題基本繞不開這些套路。寫代碼時(shí)還要注意風(fēng)格。即使是在筆試中變量命名、縮進(jìn)、注釋也展示了你的工程素養(yǎng)。建議從第一行就保持規(guī)范的命名不要在最后整理代碼。另外不要在核心邏輯里寫一堆無用的判斷分支代碼要簡潔清晰讓閱卷人一眼看懂你的思路。4.2 手寫SQL與Shell腳本除了算法編程題測試筆試偶爾還會(huì)讓你手寫SQL和Shell腳本。SQL前面講過了Shell腳本的常見題目是寫一個(gè)腳本監(jiān)控某個(gè)進(jìn)程是否存在不存在則告警或者統(tǒng)計(jì)日志文件中某字段的出現(xiàn)次數(shù)并排序。這類題目的考點(diǎn)是命令組合和基本語法變量、循環(huán)、函數(shù)、if判斷、定時(shí)任務(wù)。我的經(jīng)驗(yàn)是準(zhǔn)備一個(gè)常用Shell模板文件開頭聲明#!/bin/bash定義日志函數(shù)邏輯入口用main函數(shù)包起來這樣即使忘記個(gè)別命令參數(shù)整體結(jié)構(gòu)也在能拿基礎(chǔ)分。如果完全忘了某個(gè)命令的寫法可以用sleep ps grep等兜底組合實(shí)現(xiàn)類似效果盡量別留白。另外SQL和Shell的筆試答案最好加上注釋說明這條語句的目標(biāo)是XX既方便閱卷人也顯得專業(yè)。有時(shí)候你的SQL寫得不是最優(yōu)解但注釋里體現(xiàn)了清晰的分析思路反而比悶頭寫一大段強(qiáng)。4.3 寫用例時(shí)的代碼規(guī)范問題這里說的代碼規(guī)范不是指編程題而是指測試場景設(shè)計(jì)題里如果你需要用偽代碼或腳本片段來描述校驗(yàn)邏輯同樣要注意規(guī)范。比如讓你設(shè)計(jì)一個(gè)校驗(yàn)身份證號的測試方案你可以在用例里加入類似正則匹配^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$的描述這比一句話帶過更顯專業(yè)。筆試閱卷時(shí)語言表達(dá)清晰度直接影響印象分。場景題中建議用表格或清單式的方式列出用例每條用例包含前置條件、操作步驟、預(yù)期結(jié)果三列。這三大件缺一不可不要只寫輸入錯(cuò)誤密碼提示錯(cuò)誤要寫清楚前置環(huán)境、輸入數(shù)據(jù)、期望提示文案。5. 備考復(fù)盤與避坑指南5.1 我在準(zhǔn)備過程中踩過的坑第一次準(zhǔn)備測試崗筆試時(shí)我犯過一個(gè)典型的錯(cuò)誤花大量時(shí)間刷測試?yán)碚擃}把等價(jià)類邊界值的定義背得滾瓜爛熟結(jié)果一到場景設(shè)計(jì)題就眼高手低。后來才意識到理論是工具不是答案。真正要練的是拿到一個(gè)具體功能后能不能迅速把它拆解成多個(gè)可執(zhí)行的用例。第二個(gè)坑是忽視了計(jì)算機(jī)網(wǎng)絡(luò)和操作系統(tǒng)的基礎(chǔ)題??傄詾闇y試崗不會(huì)深挖這些內(nèi)容結(jié)果筆試時(shí)選擇題里一半以上都是基礎(chǔ)題。尤其是Linux命令和HTTP狀態(tài)碼幾乎是送分題如果因?yàn)闆]復(fù)習(xí)而丟分非??上А,F(xiàn)在回過頭看準(zhǔn)備校招筆試應(yīng)該以計(jì)算機(jī)基礎(chǔ)為主測試?yán)碚摓檩o不能本末倒置。第三個(gè)坑是編程題沒限時(shí)練習(xí)。筆試和平時(shí)刷題的區(qū)別是實(shí)時(shí)答題、有壓力、需要一次寫對。如果你平時(shí)刷題不計(jì)時(shí)、不手寫到了筆試現(xiàn)場很可能因?yàn)榫o張而卡殼。建議找一套歷年題嚴(yán)格按兩小時(shí)時(shí)間模擬一遍再復(fù)盤失分點(diǎn)。5.2 校招測試崗筆試的通用建議如果你現(xiàn)在才開始準(zhǔn)備我建議按優(yōu)先級排序先補(bǔ)計(jì)算機(jī)基礎(chǔ)網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)這是筆試的大頭再刷測試基礎(chǔ)題和場景設(shè)計(jì)題這是你區(qū)別于純開發(fā)候選人的地方最后刷編程題保持手感。工具框架可以等筆試通過后再深入。還有一點(diǎn)心態(tài)上的建議測試崗筆試考的是質(zhì)量思維和工程思維不是考天才。如果你覺得某道場景題不知道怎么答先回到最本源的思路——用戶會(huì)怎么用這個(gè)功能哪里可能出問題怎么證明它沒問題這三個(gè)問題想清楚了題就答出來一半。另外準(zhǔn)備一個(gè)屬于自己的用例設(shè)計(jì)模板把上面說的六層框架功能、界面、易用性、兼容性、安全、性能記在腦子里。不管筆試還是面試這個(gè)模板都能讓你瞬間進(jìn)入狀態(tài)不用臨場想。5.3 從筆試到面試的銜接準(zhǔn)備筆試結(jié)束到面試通知之間往往只有幾天時(shí)間這個(gè)窗口期不要干等。把筆試?yán)锏腻e(cuò)題重新整理一遍特別是那些看了答案才恍然大悟的題這些都是你知識體系的漏洞。面試官常問的你筆試?yán)锬堑李}是怎么想的其實(shí)是在考察你有沒有復(fù)盤能力。我當(dāng)時(shí)在筆試結(jié)束后做的第一件事是把場景設(shè)計(jì)題里沒寫完整的用例重新補(bǔ)全然后模擬面試官追問哪些用例優(yōu)先級最高哪些場景可以自動(dòng)化把這些想清楚以后面試時(shí)遇到類似問題就非常有底氣。還有一個(gè)小技巧準(zhǔn)備幾個(gè)真實(shí)項(xiàng)目里的測試故事。面試官更想聽到的是你怎么在項(xiàng)目中發(fā)現(xiàn)問題、推動(dòng)解決而不是背概念。筆試刷題幫你過關(guān)面試講故事幫你拿offer兩者要并行準(zhǔn)備。最后再分享一個(gè)我在筆試和面試中反復(fù)用到的思路測試工程師的核心競爭力不是會(huì)找bug而是能系統(tǒng)性地找到重要的bug。筆試?yán)锏拿恳坏缊鼍邦}、每一個(gè)邊界值、每一種異常分支本質(zhì)上都在考這個(gè)能力。把這個(gè)主線想清楚你會(huì)發(fā)現(xiàn)刷題不再是死記硬背而是在訓(xùn)練解決問題的肌肉記憶。