一、測試常見問題和流程篇
1.介紹一下測試流程(重點,常見?。?/p>
- 需求評審、測試計劃、測試用例、用例評審、冒煙測試、測試執(zhí)行、驗收測試、風(fēng)險評估、上線觀察、問題跟進、測試報告、復(fù)盤會議;
- 根據(jù)自己的日常經(jīng)驗來回答,每個點的工作內(nèi)容都需要清晰掌握,有可能就某個點如何工作進行提問。
2.介紹一下測試方法
- 按階段:單元測試、集成測試、系統(tǒng)測試、驗收測試
- 按手段:黑盒測試、白盒測試、灰盒測試
- 其他:冒煙測試、回歸測試
3.介紹一下測試用例設(shè)計方法(用例設(shè)計方法&測試方法需要分清楚)
- 黑盒測試用例設(shè)計:等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、正交試驗分析法、流程分析法
- 白盒測試:語句覆蓋、判定覆蓋、條件覆蓋、條件組合覆蓋、判定/條件覆蓋、路徑覆蓋
4.設(shè)計一個登錄頁面的用例(提供某個場景的設(shè)計用例,重點?。?/p>
- 功能測試:正確輸入、為空輸入、字符類型校驗、長度校驗、密碼是否加密顯示、大寫提示、跳轉(zhuǎn)頁面是否成功、登出后用另一個賬號登錄
- UI:界面布局合理、風(fēng)格統(tǒng)一、界面文字簡潔好理解、沒有錯別字
- 性能測試:打開登錄頁面需要幾秒、點擊登錄跳轉(zhuǎn)首頁需要幾秒、多次點擊、多人點擊
- 安全性:用戶名和密碼是否加密發(fā)送給服務(wù)器、錯誤登錄的次數(shù)限制(防止暴力破解)、一臺機器登錄多個用戶、一個用戶多方登錄、檢查元素能否看到密碼
- 兼容性測試:不同瀏覽器、不同的平臺(Windows、Mac)、移動設(shè)備能否工作
- 易用性:輸入框可否tab鍵切換、回車能否登錄等
5.舉例說明項目推進的能力(針對個人評價的舉例說明)
- (例)推動開發(fā)解決菜單權(quán)限需退出登錄才可應(yīng)用的問題。
- 描述:XX項目上線后,由于權(quán)限更新導(dǎo)致用戶無法使用舊界面+用戶不懂得自己退出登錄以應(yīng)用新菜單權(quán)限,線上多個用戶反饋平臺相關(guān)功能無法使用。處理:遠(yuǎn)程操作+線上指導(dǎo)出現(xiàn)問題的用戶退出登錄,凌晨腳本批量強制用戶退出登錄。推進:在下一次版本中,推動開發(fā)處理菜單權(quán)限更新問題,以防每次更新菜單都出現(xiàn)用戶使用不了功能的問題。結(jié)果:處理為用戶登錄期間仍可使用舊界面,直到用戶退出重新登錄后,才應(yīng)用新菜單權(quán)限;
- 推動冒煙測試:冒煙不通過,測試召開會議羅列項目不同的模塊、存在的問題,一一對應(yīng)到每個人去跟進,得到解決的時間,后續(xù)項目群說明并艾特每個人跟進。測試準(zhǔn)時驗收。
- 推動文檔質(zhì)量:在日常工作中遇到需求文檔、設(shè)計文檔、接口文檔不規(guī)范或不詳細(xì)地存在絕大多數(shù),這個時候就要通過溝通或以bug的形式,促使各個崗位將各自的文檔完善。
- 結(jié)合自己的個人經(jīng)驗,從問題描述+處理過程+推進表現(xiàn)+結(jié)果,一一說明。
6.考試中遇到的比較難的一個項目是?(掌握自己簡歷上的項目)
- XX項目:這個項目是一個新項目、需要對接第三方、從協(xié)助測試產(chǎn)品模塊到轉(zhuǎn)手負(fù)責(zé)整個項目加強了一定的需求理解難度、訂單邏輯不熟悉、其中需求的問題推進比較困難。
- 針對這些困難,測試方面:先快速了解需求,并與原先的測試負(fù)責(zé)人了解具體的進度和需要注意的測試點。開發(fā)方面:迅速與開發(fā)人員了解訂單邏輯,以及與第三方對接的過程。產(chǎn)品方面:遇到某個需求問題產(chǎn)品不接受、最后匯報領(lǐng)導(dǎo)+開會討論了較好的處理方案。雖然過程問題比較多,但是通過項目組的集體努力,最后項目得以按時上線
- 說明項目(最好是簡歷上的項目方便面試官進一步提問)。描述有難度的地方+如何處理+結(jié)果
7.印象深刻的一個bug?
- 隱藏得比較深的bug、影響比較大的bug、處理過程比較曲折的bug。根據(jù)自己的經(jīng)驗描述:如何發(fā)現(xiàn)的、如何處理、影響、結(jié)果、反思。
- 舉例說明:如升級版本兼容性問題、接口安全性問題、數(shù)據(jù)庫安全性問題、服務(wù)器資源占用溢出問題、代碼邏輯問題等
8.你們公司是不是敏捷開發(fā)?介紹一下敏捷開發(fā)?
- 是,敏捷快速迭代、多版本同時迭代
- 敏捷開發(fā)屬于增量式開發(fā),對于需求范圍不明確、需求變更較多的項目而言可以很大程度上響應(yīng)和擁抱變化、主張簡單、擁抱變化、可持續(xù)性、遞增的變化、高質(zhì)量的工作、快速反饋、軟件是你的主要目標(biāo)
9.復(fù)盤會議的主要內(nèi)容有哪些?
- 這點需要結(jié)合自己平時參與的項目會議舉例說明。如線上bug分析、優(yōu)化改進策略、bug優(yōu)先級等等
10.App 的兼容性怎么測,App 的接口測試怎么測?
- 系統(tǒng)兼容(ios、安卓)、機型兼容(iPhone、華為、小米、三星、vivo、OPPO)、分辨率兼容、軟件本身向前向后兼容
- 接口測試:獲取接口文檔,使用fiddler抓包工具獲取接口的請求方式、url、請求參數(shù)、返回參數(shù),然后使用postman、jmeter進行測試
11.Web 端測試和 App 端測試有何不同(常見)
- 系統(tǒng)結(jié)構(gòu)方面
- Web 項目,b/s架構(gòu),基于瀏覽器的;Web 測試只要更新了服務(wù)器端,客戶端就會同步更新;
- App 項目,c/s結(jié)構(gòu)的,必須要有客戶端;App 修改了服務(wù)端,則客戶端用戶所有核心版本都需要進行回歸測試一遍;
- 兼容方面
- Web項目:a. 瀏覽器(火狐、谷歌、IE等)b. 操作系統(tǒng)(Windows7、Windows10、Linux等)
- App項目:a. 設(shè)備系統(tǒng): iOS(ipad、iphone)、Android(三星、華為、聯(lián)想等) 、Windows(Win7、Win8)、OSX(Mac)b. 手機設(shè)備可根據(jù) 手機型號、分辨率不同
- 性能方面
- web項目 需監(jiān)測 響應(yīng)時間、CPU、Memory
- app項目 除了監(jiān)測 響應(yīng)時間、CPU、Memory外,還需監(jiān)測流量、電量等
- 相對于 Wed 項目,APP有專項測試
- 干擾測試:中斷,來電,短信,關(guān)機,重啟等
- 弱網(wǎng)絡(luò)測試(模擬2g、3g、4g,wifi網(wǎng)絡(luò)狀態(tài)以及丟包情況);網(wǎng)絡(luò)切換測試(網(wǎng)絡(luò)斷開后重連、3g切換到4g/wifi 等)
- 安裝、更新、卸載
- 安裝:需考慮安裝時的中斷、弱網(wǎng)、安裝后刪除安裝文件等情況
- 卸載:需考慮 卸載后是否刪除 App 相關(guān)的文件
- 更新:分強制更新、非強制更新、增量包更新、斷點續(xù)傳、弱網(wǎng)狀態(tài)下更新
- 界面操作:關(guān)于手機端測試,需注意手勢,橫豎屏切換,多點觸控,前后臺切換
- 安全測試:安裝包是否可以編譯代碼、安裝包是否簽名、權(quán)限設(shè)置,例如訪問通訊錄等
- 邊界測試:可用存儲空間少、沒有SD卡/雙SD卡、飛行模式、系統(tǒng)時間有誤、第三方依賴(QQ、微信登錄)等
- 權(quán)限測試:設(shè)置某個 App 是否可以獲取該權(quán)限,例如是否可以訪問通訊錄、相冊、照相機等
數(shù)據(jù)庫篇
1. 工作中常使用的 SQL 語法有哪些?
- create table、create view、 select from where、insert into、update set values、delete、alter、order by、having
2.數(shù)據(jù)庫存儲過程
- 一組數(shù)據(jù)庫操作命令,當(dāng)作是自己寫的一個方法,一系列步驟自己去封裝(個人理解)
3.SQL 常見查詢語句編寫(此處僅舉例常見的查詢語句,如有更多坑,希望補充)
a.查詢所有學(xué)生的數(shù)學(xué)成績,顯示學(xué)生姓名 name, 分?jǐn)?shù), 由高到低。
SELECT a.name, b.score FROM student a, grade b WHERE a.id = b.id AND kemu = ‘數(shù)學(xué)’ ORDER BY score DESC;
b.統(tǒng)計每個學(xué)生的總成績(由于學(xué)生可能有重復(fù)名字),顯示字段:學(xué)生 id,姓名,總成績。
SELECT a.id, a.name, c.sum_score from student a, (SELECT b.id, sum(b.score) as sum_score FROM grade b GROUP BY id) c WHERE a.id = c.id ORDER BY sum_score DESC;
c.列出各門課程成績最好的學(xué)生, 要求顯示字段: 學(xué)號,姓名,科目,成績
SELECT c.id , a.name, c.kemu, c.score FROM grade c, student a,(SELECT b.kemu, MAX(b.score) as max_score FROM grade b GROUP BY kemu) t WHERE c.kemu = t.kemu AND c.score = t.max_score AND a.id = c.id
4.慢查詢是什么意思?
- 開啟慢查詢?nèi)罩?,可以?MySQL 記錄下查詢超過指定時間的語句,通過定位分析性能的瓶頸,才能更好的優(yōu)化數(shù)據(jù)庫系統(tǒng)的性能。
5.導(dǎo)致數(shù)據(jù)庫性能差的可能原因有哪些?
- 硬件環(huán)境問題,如磁盤IO
- 查詢語句問題,如join、子查詢、沒建索引
- 索引失效,建了索引,查詢的時候沒用上
- 查詢關(guān)聯(lián)了太多的join
- 服務(wù)器關(guān)聯(lián)緩存,線程數(shù)等
- 表中存在冗余字段,在生成笛卡爾積時耗費多余的時間
6.Redis 緩存應(yīng)用場景
- 需要將數(shù)據(jù)緩存在內(nèi)存中,提升查詢效率
- 這里希望大家補充
7.怎么定位 Redis 緩存失效問題(緩存壞了)
- Redis 的知識,了解的不是很多
- 拋磚引玉,請大家指正和補充。
Linux 技能篇
1. 工作中常用的 Linux 命令有哪些?
awk、sed、vim、iotop、dstat、cp、top、ifconfig、pwd、cd、ll、ls、cat、tail、grep、mv、rm、mkdir、df、du
2.什么命令可以幫助 Linux 執(zhí)行 Windows 上傳的腳本?
- 改變編碼格式
- vim test.sh
- :set ff?// 顯示dos的話
- :set ff=unix:wq
3簡述 Linux 三劍客
- grep 命令
- 根據(jù)用戶指定的模式 pattern 對目標(biāo)文本進行過濾,顯示被模式匹配到的行;
- grep [options] pattern [file]
- 常用參數(shù):
- -v 顯示不被pattern匹配到的行
- -i 忽略字符的大小寫
- -n 顯示匹配的行號
- -c 統(tǒng)計匹配的行數(shù)
- -o 僅顯示匹配到的字符串
- -E 使用ERE,相當(dāng)于egrep(可以識別更多的正則表達式規(guī)則)
- sed 命令
- 流編輯器,用來處理一行數(shù)據(jù)。將一行數(shù)據(jù)存儲在模式空間中->用sed命令處理->送入屏幕->清空空間。
- 常用參數(shù):
- -h 顯示幫助
- -n 僅顯示script處理后的結(jié)果
- -e 指定的腳本來處理輸入的文本文件
- -f 以指定的腳本文件來處理
- 常用動作:
- a: 新增 sed -e ‘4 a newline’
- c: 取代 sed -e ‘2,5c No 2-5 number’
- d: 刪除 sed -e ‘2,5d’
- i: 插入 sed -ed ‘2i newline’
- p: 打印 sed -n ‘/root/p’
- s: 取代 sed -e ‘s/old/new/g’
- g: 代表全局
- awk 命令
- 把文件逐行的讀入,以空格為默認(rèn)分隔符將每行切片。把行作為輸入,并賦值給$0->將行切段,從$1開始->對行匹配正則/執(zhí)行動作->打印內(nèi)容;
- awk ‘pattern + action’ [filenames]
- 常用語法:
- filename awk 瀏覽的文件名
- begin 處理文本前要執(zhí)行的操作
- end 處理文本之后要執(zhí)行的操作
- fs 設(shè)置輸入域分隔符,等價于命令行-F選項
- nf 瀏覽記錄的域的個數(shù)(列數(shù))
- nr 已讀的記錄數(shù)(行數(shù))
- 常用參數(shù):
- ofs 輸出域分隔符
- ors 輸出記錄分隔符
- rs 控制記錄分隔符,換行標(biāo)志
- $0 整條記錄
- $1 第一條分隔后的記錄
4.如何通命令定位 Linux 服務(wù)器下的日志?
- 如果要監(jiān)控日志,那么使用 tail -f | grep xxx 命令,過濾需要的字段;
- 如果在完整日志中查看內(nèi)容,使用 cat xxx.log | grep xxxx | awk ‘{print $1}’ 等命令過濾自己需要的內(nèi)容;
5.簡述項目中的環(huán)境搭建和維護
- 結(jié)合自身經(jīng)驗先從系統(tǒng)安裝開始,如常用的 CentOS 和 Ubuntu 說起,系統(tǒng)安裝主要是磁盤分區(qū)和磁盤陣列問題;
- 基礎(chǔ)環(huán)境依賴,如 MySQL、Redis、Jenkins、Docker、項目中用到的其他依賴環(huán)境等;
- 維護方便主要從遇到的錯誤說起,如無法遠(yuǎn)程連接、服務(wù)器加固等;
測試面試之測試工具考點
自動化測試相關(guān)
包含 Selenium、Appium 和接口測試。
1. 自動化代碼中,用到了哪些設(shè)計模式?
- 單例模式
- 工廠模式
- PO模式
- 數(shù)據(jù)驅(qū)動模式
2. 什么是斷言?
- 檢查一個條件,如果它為真,就不做任何事,用例通過。如果它為假,則會拋出 AssertError 并且包含錯誤信息。
3. UI 自動化測試中,如何做集群?
- Selenium Grid,分布式執(zhí)行用例
- Appium 使用 STF 管理多設(shè)備
- Docker+K8S 管理集群
4. 怎么對含有驗證碼的功能進行自動化測試?
- 萬能驗證碼
- 測試環(huán)境屏蔽驗證
- 其他操作不推薦
5. 如何優(yōu)化和提高 Selenium 腳本的執(zhí)行速度?
- 盡量使用 by_css_selector() 方法
- by_css_selector() 方法的執(zhí)行速度比 by_id() 方法的更快,因為源碼中 by_id() 方法會被自動轉(zhuǎn)成 by_css_selector() 方法處理;
- 使用等待時,盡量使用顯示等待,少用 sleep(),盡量不用隱式等待;
- 盡量減少不必要的操作:可以直接訪問頁面的,不要通過點擊操作訪問;
- 并發(fā)執(zhí)行測試用例:同時執(zhí)行多條測試用例,降低用例間的耦合;
- 有些頁面加載時間長,可以中斷加載;
6. 接口測試能發(fā)現(xiàn)哪些問題?
- 可以發(fā)現(xiàn)很多在頁面上操作發(fā)現(xiàn)不了的 bug;
- 檢查系統(tǒng)的異常處理能力;
- 檢查系統(tǒng)的安全性、穩(wěn)定性;
- 前端隨便變,接口測好了,后端不用變;
- 可以測試并發(fā)情況,一個賬號,同時(大于 2 個請求)對最后一個商品下單,或不同賬號,對最后一個商品下單;
- 可以修改請求參數(shù),突破前端頁面輸入限制(如金額);
7. Selenium 中隱藏元素如何定位?
- 如果單純的定位的話,隱藏元素和普通不隱藏元素定位沒啥區(qū)別,用正常定位方法就行了(這個很多面試官也搞不清楚);
- 元素的屬性隱藏和顯示,主要是 type=”hidden” 和 屬性來控制的,接下來在元素屬性里面讓它隱藏,隱藏元素可以正常定位到,只是不能操作(定位元素和操作元素是兩碼事,很多初學(xué)者傻傻分不清楚),操作元素是 click,clear,send_keys 這些方法;
- JS 操作隱藏元素;
8. 如何判斷一個頁面上元素是否存在?
- 方法一:用 try…except…
- 方法二:用 elements 定義一組元素方法,判斷元素是否存在,存在返回 True,不存返回 False
- 方法三:結(jié)合 WebDriverWait 和 expected_conditions 判斷(推薦)
9. 如何提高腳本的穩(wěn)定性?
- 不要右鍵復(fù)制 xpath(十萬八千里那種路徑,肯定不穩(wěn)定),自己寫相對路徑,多用 id 為節(jié)點查找;
- 定位沒問題,第二個影響因素那就是等待了,sleep 等待盡量少用(影響執(zhí)行時間);
- 定位元素方法重新封裝,結(jié)合 WebDriverWait 和 expected_conditions 判斷元素方法,自己封裝一套定位元素方法;
10. 如何定位動態(tài)元素?
- 動態(tài)元素有 2 種情況,一個是屬性動態(tài),比如 id 是動態(tài)的,定位時候,那就不要用 id 定位就是了;
- 還有一種情況動態(tài)的,那就是這個元素一會在頁面上方,一會在下方,飄忽不定的動態(tài)元素,定位方法也是一樣,按 f12,根據(jù)元素屬性定位(元素的 tag、name的步伐屬性是不會變的,動的只是 class 屬性和 styles 屬性);
11. 如何通過子元素定位父元素
- 使用element.parent方法
12. 平常遇到過哪些問題? ?如何解決的
- 可以把平常遇到的元素定位的一些坑說下,然后說下為什么沒定位到,比如動態(tài) id、有 iframe、沒加等待等因素;
13. 一個元素明明定位到了,點擊無效(也沒報錯),如果解決?
- 使用 JS 點擊,Selenium 有時候點擊元素是會失效;
14. 測試的數(shù)據(jù)你放在哪?
- 對于賬號密碼,這種管全局的參數(shù),可以用命令行參數(shù),單獨抽出來,寫的配置文件里(如 ini);
- 對于一些一次性消耗的數(shù)據(jù),比如注冊,每次注冊不一樣的數(shù),可以用隨機函數(shù)生成;
- 對于一個接口有多組測試的參數(shù),可以參數(shù)化,數(shù)據(jù)放 YAML,Text,JSON,Excel 都可以;
- 對于可以反復(fù)使用的數(shù)據(jù),比如訂單的各種狀態(tài)需要造數(shù)據(jù)的情況,可以放到數(shù)據(jù)庫,每次數(shù)據(jù)初始化,用完后再清理;
- 對于郵箱配置的一些參數(shù),可以用 ini 配置文件;
- 對于全部是獨立的接口項目,可以用數(shù)據(jù)驅(qū)動方式,用 excel/csv 管理測試的接口數(shù)據(jù);
- 對于少量的靜態(tài)數(shù)據(jù),比如一個接口的測試數(shù)據(jù),也就 2-3 組,可以寫到 py腳本的開頭,十年八年都不會變更的;
15. 什么是數(shù)據(jù)驅(qū)動,如何參數(shù)化?
- 參數(shù)化的思想是代碼用例寫好了后,不需要改代碼,只需維護測試數(shù)據(jù)就可以了,并且根據(jù)不同的測試數(shù)據(jù)生成多個用例;
16. 其他接口都需要登錄接口的信息,怎么去讓這個登錄的接口只在其他接口調(diào)用一次?
- 使用單例模式
- 使用自定義緩存機制
- 使用測試框架中的 setup 機制
- pytest 中 fixture 機制
17. 接口產(chǎn)生的垃圾數(shù)據(jù)如何清理?
- 造數(shù)據(jù)和數(shù)據(jù)清理,需用 python 連數(shù)據(jù)庫了,做增刪改查的操作測試用例前置操作,setUp 做數(shù)據(jù)準(zhǔn)備后置操作,tearDown 做數(shù)據(jù)清理
18. 怎么用接口案例去覆蓋業(yè)務(wù)邏輯?
- 考慮不同的業(yè)務(wù)場景,一個接口走過的流程是什么樣的,流程的邏輯是什么樣的,什么樣的參數(shù)會有什么樣的結(jié)果,多場景覆蓋;
性能篇
1. 性能測試指標(biāo)包括哪些
- 最大并發(fā)用戶數(shù),HPS(點擊率)、事務(wù)響應(yīng)時間、每秒事務(wù)數(shù)、每秒點擊量、吞吐量、CPU 使用率、物理內(nèi)存使用、網(wǎng)絡(luò)流量使用等。
- 前端需主要關(guān)注的點是:
- 響應(yīng)時間:用戶從客戶端發(fā)出請求,并得到響應(yīng),以及展示出來的整個過程的時間。
- 加載速度:通俗的理解為頁面內(nèi)容顯示的快慢。流量:所消耗的網(wǎng)絡(luò)流量。
- 后端需主要關(guān)注的是:
- 響應(yīng)時間:接口從請求到響應(yīng)、返回的時間。
- 并發(fā)用戶數(shù):同一時間點請求服務(wù)器的用戶數(shù),支持的最大并發(fā)數(shù)。
- 內(nèi)存占用:也就是內(nèi)存開銷。
- 吞吐量(TPS):Transaction Per Second, 每秒事務(wù)數(shù)。在沒有遇到性能瓶頸時:TPS=并發(fā)用戶數(shù)*事務(wù)數(shù)/響應(yīng)時間。
- 錯誤率:失敗的事務(wù)數(shù)/事務(wù)總數(shù)。
- 資源使用率:CPU占用率、內(nèi)存使用率、磁盤I/O、網(wǎng)絡(luò)I/O。
- 從性能測試分析度量的度角來看,主要可以從如下幾個大的維度來收集考察性能指標(biāo):
- 系統(tǒng)性能指標(biāo)、資源性能指標(biāo)、穩(wěn)定性指標(biāo)
2. 如果一個需求沒有明確的性能指標(biāo),要如何開始進行性能測試?
- 先輸出業(yè)務(wù)數(shù)據(jù),如 pv、pu、時間段等,計算出大概的值,然后不斷加壓測到峰值
3. 介紹 JMeter 聚合報告包括哪些內(nèi)容?
- 請求名、線程數(shù)、響應(yīng)時間(50 95 99 最小 最大)錯誤率、吞吐量
4. 如果有一個頁面特別卡頓,設(shè)想一下可能的原因?
- 后臺:接口返回數(shù)據(jù)慢,查詢性能等各種問題
- 前端:使用 Chrome 工具調(diào)試,判斷 JS 執(zhí)行久或是其他問題
- 網(wǎng)絡(luò)問題
5. 說一說項目中的實際測試內(nèi)容
- 根據(jù)自己項目中的經(jīng)驗實話實說,有沒有經(jīng)驗很容易露餡。
6. 介紹一下 JMeter 進行性能測試的過程
- 結(jié)合自己的項目經(jīng)驗聊。大家也可以自行搜索。
7. 介紹一下 JMeter 和 LoadRunner 的區(qū)別
- 詳細(xì)的不展開了,最重要的是相對來說 LoadRunner 的笨重、昂貴、閉源,理念和生態(tài)都落后,而 JMeter 是開源、可定制化開發(fā),功能強大易用,并且在互聯(lián)網(wǎng)大廠都已經(jīng)有非常成熟的落地方案(主流的互聯(lián)網(wǎng)公司基本都在使用 JMeter+ELK+Grafana+Influxdb 這套架構(gòu)),可以說是進 BAT 大廠必備技能。還不會 JMeter 的同學(xué)建議抓緊補起來。
如果你想成為備受企業(yè)青睞的IT人才
想要高薪offer(面試寶典免費送)
沒有項目實戰(zhàn)經(jīng)驗怎么辦?
點擊下方我來教你
全套【軟件測試/自動化測試】海量資料免費領(lǐng)取