本系列文章總結(jié)歸納了一些軟件測試工程師常見的面試題,主要來源于個人面試遇到的鼻种、網(wǎng)絡(luò)搜集(完善)反番、工作日常討論等,分為以下十個部分叉钥,供大家參考罢缸。如有錯誤的地方,歡迎指正沼侣。有更多的面試題或面試中遇到的坑祖能,也歡迎補(bǔ)充分享。希望大家都能找到滿意的工作蛾洛,共勉之养铸!~
1.測試常見問題與流程篇
2.測試工具篇
3.計(jì)算機(jī)網(wǎng)絡(luò)知識與數(shù)據(jù)庫篇
4.Linux 與 Python 編程技能篇
5.自動化測試與性能測試篇
6.軟素質(zhì)篇(10 大靈魂拷問)與反問面試官篇
包含 Selenium、Appium 和接口測試轧膘。
7.自動化代碼中钞螟,用到了哪些設(shè)計(jì)模式?
- 單例模式
- 工廠模式
- PO模式
- 數(shù)據(jù)驅(qū)動模式
8.什么是斷言谎碍? - 檢查一個條件鳞滨,如果它為真,就不做任何事蟆淀,用例通過拯啦。如果它為假,則會拋出 AssertError 并且包含錯誤信息熔任。
9.UI 自動化測試中褒链,如何做集群? - Selenium Grid疑苔,分布式執(zhí)行用例
- Appium 使用 STF 管理多設(shè)備
- Docker+K8S 管理集群
10.怎么對含有驗(yàn)證碼的功能進(jìn)行自動化測試甫匹? - 萬能驗(yàn)證碼
- 測試環(huán)境屏蔽驗(yàn)證
- 其他操作不推薦
11.如何優(yōu)化和提高 Selenium 腳本的執(zhí)行速度? - 盡量使用 by_css_selector() 方法
- by_css_selector() 方法的執(zhí)行速度比 by_id() 方法的更快,因?yàn)樵创a中 by_id() 方法會被自動轉(zhuǎn)成 by_css_selector() 方法處理兵迅;
- 使用等待時抢韭,盡量使用顯示等待,少用 sleep()恍箭,盡量不用隱式等待刻恭;
- 盡量減少不必要的操作:可以直接訪問頁面的,不要通過點(diǎn)擊操作訪問季惯;
- 并發(fā)執(zhí)行測試用例:同時執(zhí)行多條測試用例吠各,降低用例間的耦合;
- 有些頁面加載時間長勉抓,可以中斷加載;
12.接口測試能發(fā)現(xiàn)哪些問題候学? - 可以發(fā)現(xiàn)很多在頁面上操作發(fā)現(xiàn)不了的 bug藕筋;
- 檢查系統(tǒng)的異常處理能力;
- 檢查系統(tǒng)的安全性梳码、穩(wěn)定性隐圾;
- 前端隨便變,接口測好了掰茶,后端不用變暇藏;
- 可以測試并發(fā)情況,一個賬號濒蒋,同時(大于 2 個請求)對最后一個商品下單盐碱,或不同賬號,對最后一個商品下單沪伙;
- 可以修改請求參數(shù)瓮顽,突破前端頁面輸入限制(如金額);
13.Selenium 中隱藏元素如何定位围橡? - 如果單純的定位的話暖混,隱藏元素和普通不隱藏元素定位沒啥區(qū)別,用正常定位方法就行了(這個很多面試官也搞不清楚)翁授;
- 元素的屬性隱藏和顯示拣播,主要是 type=“hidden” 和 style=“display: none;” 屬性來控制的,接下來在元素屬性里面讓它隱藏收擦,隱藏元素可以正常定位到贮配,只是不能操作(定位元素和操作元素是兩碼事,很多初學(xué)者傻傻分不清楚)炬守,操作元素是 click,clear,send_keys 這些方法牧嫉;
- JS 操作隱藏元素;
14.如何判斷一個頁面上元素是否存在? - 方法一:用 try…except…
- 方法二:用 elements 定義一組元素方法酣藻,判斷元素是否存在,存在返回 True,不存返回 False
- 方法三:結(jié)合 WebDriverWait 和 expected_conditions 判斷(推薦)
15.如何提高腳本的穩(wěn)定性曹洽? - 不要右鍵復(fù)制 xpath(十萬八千里那種路徑,肯定不穩(wěn)定)辽剧,自己寫相對路徑送淆,多用 id 為節(jié)點(diǎn)查找;
- 定位沒問題怕轿,第二個影響因素那就是等待了偷崩,sleep 等待盡量少用(影響執(zhí)行時間);
- 定位元素方法重新封裝撞羽,結(jié)合 WebDriverWait 和 expected_conditions 判斷元素方法阐斜,自己封裝一套定位元素方法;
16.如何定位動態(tài)元素诀紊? - 動態(tài)元素有 2 種情況谒出,一個是屬性動態(tài),比如 id 是動態(tài)的邻奠,定位時候笤喳,那就不要用 id 定位就是了;
- 還有一種情況動態(tài)的碌宴,那就是這個元素一會在頁面上方杀狡,一會在下方,飄忽不定的動態(tài)元素贰镣,定位方法也是一樣呜象,按 f12,根據(jù)元素屬性定位(元素的 tag八孝、name的步伐屬性是不會變的董朝,動的只是 class 屬性和 styles 屬性);
17.如何通過子元素定位父元素 - 使用element.parent方法
18.平常遇到過哪些問題? ?如何解決的 - 可以把平常遇到的元素定位的一些坑說下干跛,然后說下為什么沒定位到子姜,比如動態(tài) id、有 iframe楼入、沒加等待等因素哥捕;
19.一個元素明明定位到了,點(diǎn)擊無效(也沒報(bào)錯)嘉熊,如果解決遥赚? - 使用 JS 點(diǎn)擊,Selenium 有時候點(diǎn)擊元素是會失效阐肤;
20.測試的數(shù)據(jù)你放在哪? - 對于賬號密碼凫佛,這種管全局的參數(shù)讲坎,可以用命令行參數(shù),單獨(dú)抽出來愧薛,寫的配置文件里(如 ini)晨炕;
- 對于一些一次性消耗的數(shù)據(jù),比如注冊毫炉,每次注冊不一樣的數(shù)瓮栗,可以用隨機(jī)函數(shù)生成;
- 對于一個接口有多組測試的參數(shù)瞄勾,可以參數(shù)化弓柱,數(shù)據(jù)放 YAML,Text,JSON,Excel 都可以吊奢;
- 對于可以反復(fù)使用的數(shù)據(jù),比如訂單的各種狀態(tài)需要造數(shù)據(jù)的情況燃辖,可以放到數(shù)據(jù)庫复亏,每次數(shù)據(jù)初始化收壕,用完后再清理奴愉;
- 對于郵箱配置的一些參數(shù)欠气,可以用 ini 配置文件;
- 對于全部是獨(dú)立的接口項(xiàng)目盗蟆,可以用數(shù)據(jù)驅(qū)動方式,用 excel/csv 管理測試的接口數(shù)據(jù)舒裤;
- 對于少量的靜態(tài)數(shù)據(jù)喳资,比如一個接口的測試數(shù)據(jù),也就 2-3 組腾供,可以寫到 py腳本的開頭仆邓,十年八年都不會變更的;
21.什么是數(shù)據(jù)驅(qū)動伴鳖,如何參數(shù)化节值? - 參數(shù)化的思想是代碼用例寫好了后,不需要改代碼榜聂,只需維護(hù)測試數(shù)據(jù)就可以了搞疗,并且根據(jù)不同的測試數(shù)據(jù)生成多個用例;
22.其他接口都需要登錄接口的信息须肆,怎么去讓這個登錄的接口只在其他接口調(diào)用一次匿乃? - 使用單例模式
- 使用自定義緩存機(jī)制
- 使用測試框架中的 setup 機(jī)制
- pytest 中 fixture 機(jī)制
23.接口產(chǎn)生的垃圾數(shù)據(jù)如何清理? - 造數(shù)據(jù)和數(shù)據(jù)清理豌汇,需用 python 連數(shù)據(jù)庫了幢炸,做增刪改查的操作測試用例前置操作,setUp 做數(shù)據(jù)準(zhǔn)備后置操作拒贱,tearDown 做數(shù)據(jù)清理
24.怎么用接口案例去覆蓋業(yè)務(wù)邏輯宛徊? - 考慮不同的業(yè)務(wù)場景佛嬉,一個接口走過的流程是什么樣的,流程的邏輯是什么樣的闸天,什么樣的參數(shù)會有什么樣的結(jié)果暖呕,多場景覆蓋;
25.性能測試指標(biāo)包括哪些 - 最大并發(fā)用戶數(shù)号枕,HPS(點(diǎn)擊率)缰揪、事務(wù)響應(yīng)時間、每秒事務(wù)數(shù)葱淳、每秒點(diǎn)擊量钝腺、吞吐量、CPU 使用率赞厕、物理內(nèi)存使用艳狐、網(wǎng)絡(luò)流量使用等。
- 前端需主要關(guān)注的點(diǎn)是:
- 響應(yīng)時間:用戶從客戶端發(fā)出請求皿桑,并得到響應(yīng)毫目,以及展示出來的整個過程的時間。
- 加載速度:通俗的理解為頁面內(nèi)容顯示的快慢诲侮。
- 流量:所消耗的網(wǎng)絡(luò)流量镀虐。
- 后端需主要關(guān)注的是:
- 響應(yīng)時間:接口從請求到響應(yīng)、返回的時間沟绪。
- 并發(fā)用戶數(shù):同一時間點(diǎn)請求服務(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)
26.如果一個需求沒有明確的性能指標(biāo),要如何開始進(jìn)行性能測試啃炸? - 先輸出業(yè)務(wù)數(shù)據(jù)铆隘,如 pv、pu南用、時間段等膀钠,計(jì)算出大概的值掏湾,然后不斷加壓測到峰值
27.介紹 JMeter 聚合報(bào)告包括哪些內(nèi)容? - 請求名肿嘲、線程數(shù)融击、響應(yīng)時間(50 95 99 最小 最大)錯誤率、吞吐量
28.如果有一個頁面特別卡頓雳窟,設(shè)想一下可能的原因尊浪? - 后臺:接口返回?cái)?shù)據(jù)慢,查詢性能等各種問題
- 前端:使用 Chrome 工具調(diào)試封救,判斷 JS 執(zhí)行久或是其他問題
- 網(wǎng)絡(luò)問題
29.說一說項(xiàng)目中的實(shí)際測試內(nèi)容 - 根據(jù)自己項(xiàng)目中的經(jīng)驗(yàn)實(shí)話實(shí)說拇涤,有沒有經(jīng)驗(yàn)很容易露餡。
30.介紹一下 JMeter 進(jìn)行性能測試的過程 - 結(jié)合自己的項(xiàng)目經(jīng)驗(yàn)聊誉结。大家也可以自行搜索鹅士。
31.介紹一下 JMeter 和 LoadRunner 的區(qū)別 - 詳細(xì)的不展開了,最重要的是相對來說 LoadRunner 的笨重惩坑、昂貴掉盅、閉源,理念和生態(tài)都落后以舒,而 JMeter 是開源趾痘、可定制化開發(fā),功能強(qiáng)大易用蔓钟,并且在互聯(lián)網(wǎng)大廠都已經(jīng)有非常成熟的落地方案(主流的互聯(lián)網(wǎng)公司基本都在使用 JMeter+ELK+Grafana+Influxdb 這套架構(gòu))扼脐,可以說是進(jìn) BAT 大廠必備技能。還不會 JMeter 的同學(xué)建議抓緊補(bǔ)起來奋刽。
獲取更多相關(guān)資料,請?zhí)砑觱x:ceshiren001