本系列文章總結(jié)歸納了一些軟件測試工程師常見的面試題,主要來源于個(gè)人面試遇到的鲜锚、網(wǎng)絡(luò)搜集(完善)突诬、工作日常討論等,分為以下十個(gè)部分烹棉,供大家參考攒霹。如有錯(cuò)誤的地方,歡迎指正浆洗。有更多的面試題或面試中遇到的坑催束,也歡迎補(bǔ)充分享。希望大家都能找到滿意的工作伏社,共勉之抠刺!~
自動化代碼中,用到了哪些設(shè)計(jì)模式摘昌?
單例模式
工廠模式
PO模式
數(shù)據(jù)驅(qū)動模式
什么是斷言速妖?
檢查一個(gè)條件,如果它為真聪黎,就不做任何事罕容,用例通過。如果它為假稿饰,則會拋出 AssertError 并且包含錯(cuò)誤信息锦秒。
UI 自動化測試中,如何做集群喉镰?
Selenium Grid旅择,分布式執(zhí)行用例
Appium 使用 STF 管理多設(shè)備
Docker+K8S 管理集群
怎么對含有驗(yàn)證碼的功能進(jìn)行自動化測試?
萬能驗(yàn)證碼
測試環(huán)境屏蔽驗(yàn)證
其他操作不推薦
如何優(yōu)化和提高 Selenium 腳本的執(zhí)行速度侣姆?
盡量使用 by_css_selector() 方法
by_css_selector() 方法的執(zhí)行速度比 by_id() 方法的更快生真,因?yàn)樵创a中 by_id() 方法會被自動轉(zhuǎn)成 by_css_selector() 方法處理沉噩;
使用等待時(shí),盡量使用顯示等待柱蟀,少用 sleep()川蒙,盡量不用隱式等待;
盡量減少不必要的操作:可以直接訪問頁面的产弹,不要通過點(diǎn)擊操作訪問派歌;
并發(fā)執(zhí)行測試用例:同時(shí)執(zhí)行多條測試用例弯囊,降低用例間的耦合痰哨;
有些頁面加載時(shí)間長,可以中斷加載匾嘱;
接口測試能發(fā)現(xiàn)哪些問題斤斧?
可以發(fā)現(xiàn)很多在頁面上操作發(fā)現(xiàn)不了的 bug;
檢查系統(tǒng)的異常處理能力霎烙;
檢查系統(tǒng)的安全性撬讽、穩(wěn)定性;
前端隨便變悬垃,接口測好了游昼,后端不用變;
可以測試并發(fā)情況尝蠕,一個(gè)賬號烘豌,同時(shí)(大于 2 個(gè)請求)對最后一個(gè)商品下單,或不同賬號看彼,對最后一個(gè)商品下單廊佩;
可以修改請求參數(shù),突破前端頁面輸入限制(如金額)靖榕;
Selenium 中隱藏元素如何定位标锄?
如果單純的定位的話,隱藏元素和普通不隱藏元素定位沒啥區(qū)別茁计,用正常定位方法就行了(這個(gè)很多面試官也搞不清楚)料皇;
元素的屬性隱藏和顯示,主要是 type=“hidden” 和 屬性來控制的星压,接下來在元素屬性里面讓它隱藏践剂,隱藏元素可以正常定位到,只是不能操作(定位元素和操作元素是兩碼事租幕,很多初學(xué)者傻傻分不清楚)舷手,操作元素是 click,clear,send_keys 這些方法;
JS 操作隱藏元素劲绪;
如何判斷一個(gè)頁面上元素是否存在男窟?
方法一:用 try…except…
方法二:用 elements 定義一組元素方法盆赤,判斷元素是否存在,存在返回 True,不存返回 False
方法三:結(jié)合 WebDriverWait 和 expected_conditions 判斷(推薦)
如何提高腳本的穩(wěn)定性?
不要右鍵復(fù)制 xpath(十萬八千里那種路徑歉眷,肯定不穩(wěn)定)牺六,自己寫相對路徑,多用 id 為節(jié)點(diǎn)查找汗捡;
定位沒問題淑际,第二個(gè)影響因素那就是等待了,sleep 等待盡量少用(影響執(zhí)行時(shí)間)扇住;
定位元素方法重新封裝春缕,結(jié)合 WebDriverWait 和 expected_conditions 判斷元素方法,自己封裝一套定位元素方法艘蹋;
如何定位動態(tài)元素锄贼?
動態(tài)元素有 2 種情況,一個(gè)是屬性動態(tài)女阀,比如 id 是動態(tài)的宅荤,定位時(shí)候,那就不要用 id 定位就是了浸策;
還有一種情況動態(tài)的冯键,那就是這個(gè)元素一會在頁面上方,一會在下方庸汗,飄忽不定的動態(tài)元素惫确,定位方法也是一樣,按 f12夫晌,根據(jù)元素屬性定位(元素的 tag雕薪、name的步伐屬性是不會變的,動的只是 class 屬性和 styles 屬性)晓淀;
如何通過子元素定位父元素
使用element.parent方法
平常遇到過哪些問題? ?如何解決的
可以把平常遇到的元素定位的一些坑說下所袁,然后說下為什么沒定位到,比如動態(tài) id凶掰、有 iframe燥爷、沒加等待等因素;
一個(gè)元素明明定位到了懦窘,點(diǎn)擊無效(也沒報(bào)錯(cuò))前翎,如果解決?
使用 JS 點(diǎn)擊畅涂,Selenium 有時(shí)候點(diǎn)擊元素是會失效港华;
測試的數(shù)據(jù)你放在哪?
對于賬號密碼,這種管全局的參數(shù)午衰,可以用命令行參數(shù)立宜,單獨(dú)抽出來冒萄,寫的配置文件里(如 ini);
對于一些一次性消耗的數(shù)據(jù)橙数,比如注冊尊流,每次注冊不一樣的數(shù),可以用隨機(jī)函數(shù)生成灯帮;
對于一個(gè)接口有多組測試的參數(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ù)渔伯,比如一個(gè)接口的測試數(shù)據(jù)顶霞,也就 2-3 組,可以寫到 py腳本的開頭锣吼,十年八年都不會變更的选浑;
什么是數(shù)據(jù)驅(qū)動,如何參數(shù)化玄叠?
參數(shù)化的思想是代碼用例寫好了后古徒,不需要改代碼,只需維護(hù)測試數(shù)據(jù)就可以了读恃,并且根據(jù)不同的測試數(shù)據(jù)生成多個(gè)用例隧膘;
其他接口都需要登錄接口的信息,怎么去讓這個(gè)登錄的接口只在其他接口調(diào)用一次寺惫?
使用單例模式
使用自定義緩存機(jī)制
使用測試框架中的 setup 機(jī)制
pytest 中 fixture 機(jī)制
接口產(chǎn)生的垃圾數(shù)據(jù)如何清理疹吃?
造數(shù)據(jù)和數(shù)據(jù)清理,需用 python 連數(shù)據(jù)庫了西雀,做增刪改查的操作測試用例前置操作萨驶,setUp 做數(shù)據(jù)準(zhǔn)備后置操作,tearDown 做數(shù)據(jù)清理
怎么用接口案例去覆蓋業(yè)務(wù)邏輯艇肴?
考慮不同的業(yè)務(wù)場景腔呜,一個(gè)接口走過的流程是什么樣的判莉,流程的邏輯是什么樣的,什么樣的參數(shù)會有什么樣的結(jié)果育谬,多場景覆蓋券盅;
性能篇
性能測試指標(biāo)包括哪些
最大并發(fā)用戶數(shù),HPS(點(diǎn)擊率)膛檀、事務(wù)響應(yīng)時(shí)間锰镀、每秒事務(wù)數(shù)、每秒點(diǎn)擊量咖刃、吞吐量泳炉、CPU 使用率、物理內(nèi)存使用嚎杨、網(wǎng)絡(luò)流量使用等花鹅。
前端需主要關(guān)注的點(diǎn)是:
響應(yīng)時(shí)間:用戶從客戶端發(fā)出請求,并得到響應(yīng)枫浙,以及展示出來的整個(gè)過程的時(shí)間刨肃。
加載速度:通俗的理解為頁面內(nèi)容顯示的快慢。
流量:所消耗的網(wǎng)絡(luò)流量箩帚。
后端需主要關(guān)注的是:
響應(yīng)時(shí)間:接口從請求到響應(yīng)真友、返回的時(shí)間。
并發(fā)用戶數(shù):同一時(shí)間點(diǎn)請求服務(wù)器的用戶數(shù)紧帕,支持的最大并發(fā)數(shù)盔然。
內(nèi)存占用:也就是內(nèi)存開銷。
吞吐量(TPS):Transaction Per Second, 每秒事務(wù)數(shù)是嗜。在沒有遇到性能瓶頸時(shí):TPS=并發(fā)用戶數(shù)*事務(wù)數(shù)/響應(yīng)時(shí)間愈案。
錯(cuò)誤率:失敗的事務(wù)數(shù)/事務(wù)總數(shù)。
資源使用率:CPU占用率鹅搪、內(nèi)存使用率站绪、磁盤I/O、網(wǎng)絡(luò)I/O涩嚣。
從性能測試分析度量的度角來看崇众,主要可以從如下幾個(gè)大的維度來收集考察性能指標(biāo):
系統(tǒng)性能指標(biāo)、資源性能指標(biāo)航厚、穩(wěn)定性指標(biāo)
如果一個(gè)需求沒有明確的性能指標(biāo)顷歌,要如何開始進(jìn)行性能測試?
先輸出業(yè)務(wù)數(shù)據(jù)幔睬,如 pv眯漩、pu、時(shí)間段等,計(jì)算出大概的值赦抖,然后不斷加壓測到峰值
介紹 JMeter 聚合報(bào)告包括哪些內(nèi)容舱卡?
請求名、線程數(shù)队萤、響應(yīng)時(shí)間(50 95 99 最小 最大)錯(cuò)誤率轮锥、吞吐量
如果有一個(gè)頁面特別卡頓,設(shè)想一下可能的原因要尔?
后臺:接口返回?cái)?shù)據(jù)慢舍杜,查詢性能等各種問題
前端:使用 Chrome 工具調(diào)試,判斷 JS 執(zhí)行久或是其他問題
說一說項(xiàng)目中的實(shí)際測試內(nèi)容
根據(jù)自己項(xiàng)目中的經(jīng)驗(yàn)實(shí)話實(shí)說赵辕,有沒有經(jīng)驗(yàn)很容易露餡既绩。
介紹一下 JMeter 進(jìn)行性能測試的過程
結(jié)合自己的項(xiàng)目經(jīng)驗(yàn)聊。大家也可以自行搜索还惠。
介紹一下 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)注【程序媛木子】即可領(lǐng)取免費(fèi)資源庫替废。
資源分享
下面是小編辛苦整理的資料
如果文章對你有幫助,麻煩伸出發(fā)財(cái)小手點(diǎn)個(gè)贊泊柬,感謝您的支持椎镣,你的點(diǎn)贊是我持續(xù)更新的動力,也大家可以進(jìn)群交流(644956177)兽赁,里面有各種軟件測試資源和技術(shù)交流状答。