面試題

1 軟性熱身題

這種題目,考的就是你的軟性能力,比如表達(dá)能力,理解能力,協(xié)調(diào)能力,一個詞概括就是套路。這類題目會在面試開始熱身的時候,問一道兩題,不會多,但是如果你能回答的有條不紊,清晰達(dá)意,那么就會給面試官留下非常好的印象,大致的題目如下:

自我介紹

我叫XXX,畢業(yè)于XXX,從事測試行業(yè)已經(jīng)XX年,我擅長接口測試自動化,測試框架,巴拉巴拉,我共服務(wù)過X個公司分別有Y個成就,江湖人稱666.總之,盡量用

簡介的語言突出自己的優(yōu)點(diǎn),要保持humble,就像我介紹的這樣,嗯:)

介紹下你負(fù)責(zé)的公司項目

我主導(dǎo)了XXX,協(xié)助了YYY,參與了ZZZ。 這個回答你要記清楚,后續(xù)的面試肯定還有項目細(xì)節(jié),甚至技術(shù)實(shí)現(xiàn)細(xì)節(jié)。同類的項目說一個足以,重點(diǎn)突出不同技術(shù)?;蛘哂泄芾?,對外溝通的項目

你有什么優(yōu)點(diǎn)和缺點(diǎn)?

實(shí)際情況作答,比如優(yōu)點(diǎn)是長的好看,缺點(diǎn)是太好看之類的,總之,要謙虛,不要傲。

在同一個項目組內(nèi),你認(rèn)為你怎么做會比另外一名測試更加優(yōu)秀?

我個人認(rèn)為這個題目很有迷惑性,如果你只追求比別人優(yōu)秀,肯定很難跟別人合作,如果你沒有別人優(yōu)秀,那么我為什么要用你?

要我答的話,我重點(diǎn)會放在如何一點(diǎn)一滴積累技術(shù)實(shí)力,及用這些實(shí)力解決項目組存在的問題上,這實(shí)際上也是很多優(yōu)秀測試人員的必備素質(zhì)

你為什么離開上家公司?離職原因(這個會在最后問)

看老板不爽啊,PM太SB啦喜歡的同事跟開發(fā)跑啦等等, 一個都不要說!?。?我要面試別人,關(guān)注的是離職背后的動機(jī),這人是不是被開除的,這人是不是不好相處,這人是不是有明顯性格缺陷,只要不沾這些必死項,其它實(shí)際作答吧。

個人覺得軟性題,不必要過多關(guān)注,除自我介紹外,通常是通過面試后HR關(guān)的閑聊題,主要還是要關(guān)注下面的技術(shù)問題。

2 測試?yán)碚摶A(chǔ)題

這類題目就是考測試工程師的基本能力了,比如測試計劃,測試流程,如何bug,你做過哪些測試,一般我們認(rèn)為這些能力做的再好都是應(yīng)該的,不會有加分,但是只要做的不好,那就是個不合格的測試工程師了。這種題目也不會問的太多,大概題目如下:

請描述下你上個公司的測試流程?

實(shí)際情況作答, Scrum模式舉例如下:

1.我們公司采用Scrum模式開發(fā),測試也跟這個走,在每個sprint開始前會前后召開grooming meeting, planning meeting, Grooming meeting上把這個sprint可能做的tasks從product backlog里撈出來, 然后按照優(yōu)先級排序, planning meeting上估時,做commitments,并確認(rèn)每個story的后端,前端,測試。

2.planning后sprint正式開始時,需求,design,UI應(yīng)該都ready了,測試就可以設(shè)計用例, 通過review后發(fā)給所有組成員review。 story ready for test時,開發(fā)把代碼放到測試環(huán)境,測試開始測試,發(fā)現(xiàn)問題jira報bug,linked到story,測試全部完成后標(biāo)記 UAT GL, 等公司release process開始。

3.Release process開始,不同小組把各自代碼放到統(tǒng)一測試環(huán)境,繼續(xù)測試一次,這輪關(guān)注別組不會影響自己。

4.然后還有一輪甚至兩輪 pre release,主要驗(yàn)證代碼,環(huán)境,變量等問題。

5.最后release, 觀察下,有問題回退版本,沒問題繼續(xù)走下個sprint

請描述下bug的幾個要素?

ID, Summary, reproduce steps, Priority, Assign to, Sprint info, fix version(due data)等等。這道題我好想回答一句,jira里都有,你自己不會看呀:)

白盒和黑盒的區(qū)別,你是怎么運(yùn)用的?

簡單來說一個關(guān)注內(nèi)部實(shí)現(xiàn)邏輯,一個只從用戶角度出發(fā),不關(guān)注具體實(shí)現(xiàn)。具體定義及區(qū)別請參考我以往文章。

一般中高級測試都會偏灰盒一些,既關(guān)注內(nèi)部實(shí)現(xiàn)邏輯又關(guān)注用戶jounery,設(shè)計case的時候兩邊參考。

內(nèi)部實(shí)現(xiàn)邏輯可以看代碼,也可以請開發(fā)講給你聽,知道了怎么實(shí)現(xiàn),能在設(shè)計用例時構(gòu)造不同數(shù)據(jù)cover邏輯覆蓋。同時也清楚了regression 的scope

你是如何做測試分析?

這題是考察測試思維,一個應(yīng)用/功能如何測試的問題,我的原則是確定需求,先定性后定量。

具體來說,定性, 哪些是顯性需求?那些是隱性需求?功能在scope嗎?性能?可靠性?安全性?兼容mobile平臺嗎?

定量就是, 功能要測, 那么有哪些功能,每個功能點(diǎn)是什么, 入口是什么,出口是什么,precondition是什么,數(shù)據(jù)哪里構(gòu)造等等。

重復(fù)上述操作直到分析完成

如何設(shè)計測試用例?什么樣子的測試用例是好用例?

個人覺得上題回答好了,這題不會問了。 設(shè)計用例原則上好的用例各有千秋(不外乎邊界值,等價類,流程圖,正交法,判定表等), 但壞的實(shí)踐要避免,具體如下:

1.一個測試用例驗(yàn)證多個功能點(diǎn)(A,B,C三個功能一個用例,那么用例失敗了,到底是A引起的?還是B引起的?增加后續(xù)開發(fā)定位問題的難度,浪費(fèi)時間)

2.期望結(jié)果不明確(例如: make sure every thing works fine. what the f×××??。?/p>

3.不可執(zhí)行(比如一個配置項組合, 手工要執(zhí)行的case寫了2000個, 怎么執(zhí)行完?)

4.precondition,steps描述不清楚,上手困難(你負(fù)責(zé)的story可能要由其它測試人員交叉執(zhí)行)。

5.不必要的外部依賴(用例應(yīng)直指功能核心,無關(guān)的入口/步驟/依賴 不必要一股腦放進(jìn)來)

功能測試在 beta 版本對外的上線標(biāo)準(zhǔn)是什么?

貌似業(yè)界對beta的定義不太統(tǒng)一,有人說這個是A/B測試的一種, 但一般認(rèn)為專業(yè)測試人員完成后,有部分用戶參與的一輪測試即beta測試。一般測試環(huán)境為用戶實(shí)際應(yīng)用環(huán)境,目標(biāo)在于要求用戶使用發(fā)現(xiàn)不合理,不符合實(shí)際情況的問題,然后改進(jìn)。

功能上線標(biāo)準(zhǔn)每個公司不一樣,大致如下:

1.所有功能點(diǎn)(需求)都被用例覆蓋到了

2.所有用例執(zhí)行過至少一遍

3.所有發(fā)現(xiàn)的bug被修復(fù)并驗(yàn)證,做過regression了。

4.不能修復(fù)的記錄了/關(guān)閉了/known issue了。

5.bug曲線區(qū)域平穩(wěn)了

本人認(rèn)為此類問題屬于淘汰題,一個問題回答不上來或者深度不夠,直接閑聊然后結(jié)束面試。

image

3 測試管理題

這類題目就是考驗(yàn)?zāi)阕鳛闇y試leader或者測試負(fù)責(zé)人的管理能力了。

如果項目周期很短,測試人力匱乏,你是怎么協(xié)調(diào)的?

范圍不變,趕工/增加人手,快速跟進(jìn)/并行開始任務(wù)。 范圍能變,砍低優(yōu)先級用例,縮小測試范圍。

描述下你團(tuán)隊的測試分工

實(shí)話實(shí)說, 比如:

干活是不可能干活的,這輩子都不可能干活的, 做管理又不會做,就是顏值這種東西,才能維持得了團(tuán)隊這樣子。

對于團(tuán)隊成員,你是如何打kpi的?

沒錢沒顏你速去,童顏巨 你快來這樣子。

我一般看三點(diǎn):

1.出活

2.持續(xù)出活

3.持續(xù)精彩的出活

4移動測試相關(guān)

如今是移動互聯(lián)網(wǎng)的天下,誰家沒有個應(yīng)用,所以這一塊基本都會問到,同時也會看你的簡歷,如果你沒有做過,基本也不會問的太深,如果你是專門做這一塊的,那么要好好準(zhǔn)備了。

概念題

描述下web測試和移動應(yīng)用測試的相同點(diǎn)和區(qū)別?

公眾號以前分享過,不贅述,把握以下幾點(diǎn):

0.任何類型測試先定性,再定量, 范圍, 分類一定,大差不差。

1.web通常不要安裝,移動應(yīng)用通常要安裝。

2.移動設(shè)備存在特殊性,不同設(shè)備的屏幕/分辨率,系統(tǒng),定制UI都不相同。

3.移動應(yīng)用不應(yīng)該影響移動設(shè)備現(xiàn)有功能,如電話/短信等。

4.移動端要重點(diǎn)關(guān)注,發(fā)熱(電量消耗), crash, 流量(4G/WIFI/2G)等

你是如何做應(yīng)用的兼容性測試的?

一般兼容性主要關(guān)注:

1.硬件的適配:不同手機(jī)廠商、硬件性能,不同屏幕大小的適配

2.OS版本的兼容。 iOS,Android, 手機(jī),pad, 版本號啊,MUI定制啊等

3.不同分辨率屏幕的適配

解決辦法(云測,此處欠我廣告費(fèi)),除公司自備主流設(shè)備外,需參考:

1.各大廠商發(fā)布的季度/年度手機(jī)出貨量,盡量覆蓋出貨量大的,熱門的機(jī)型

2.應(yīng)用做tracking,記錄自己用戶常用機(jī)型

3.購買各種云測服務(wù),解決機(jī)型適配問題

請講出客戶端下 3 個常用的性能指標(biāo)的名稱與具體含義?

基本的:

1.CPU利用率

2.內(nèi)存使用率

3.平均用戶響應(yīng)時間

獨(dú)有的:

1.電量

2.流量

3.首次打開速度

4.競品相應(yīng)項目質(zhì)量比較

iOS應(yīng)用和Android應(yīng)用測試有什么側(cè)重點(diǎn)?

主要是iOS系統(tǒng)和Android系統(tǒng)的本質(zhì)造成的:

1.Android運(yùn)行基于虛擬機(jī),iOS則是沙盒機(jī)制

2.iOS是偽后臺,任何第三方程序都不能在后臺運(yùn)行;而Android是真后臺,安卓中任何程序都能在后臺運(yùn)行,直到內(nèi)存不夠才關(guān)閉

3.IOS中用于UI指令權(quán)限最高,安卓中數(shù)據(jù)處理指令權(quán)限最高。

測試實(shí)際應(yīng)用上來,個人覺得沒有本質(zhì)區(qū)別,要注意以下問題:

1.安全性。 因?yàn)锳ndroid2的本質(zhì),任何程序都就可以輕松訪問其他程序文件,要關(guān)注下有沒有偷偷訪問不需要功能/偷流量/常時間運(yùn)行占用內(nèi)存消耗電量等問題。

2.Android開源,定制版本過多(比如小米系列MIUI), 要關(guān)注定制引起的問題。

請講訴移動應(yīng)用的灰度是怎么做的?

灰度發(fā)布作為A/B Test的一種,一般指發(fā)布新功能到部分用戶,收集反饋/改進(jìn),進(jìn)而發(fā)布到全步用戶的一種策略。

個人經(jīng)歷過以下方面:

1.新服務(wù)發(fā)布到全部服務(wù)器,但通過配置項把不同特征用戶的請求打到不同的后端服務(wù)上去。比如ip是中國的用戶訪點(diǎn)擊某個按鈕,調(diào)用的是后端。。。/vi這個API, 而國外ip調(diào)用。。/V2

2.新功能的后端服務(wù)只發(fā)布到部分服務(wù)器,只有訪問到這個服務(wù)器的用戶才能用新功能。

3.同一個用戶訪問的平臺不同,請求的服務(wù)就不同,比如app的訪問V1, web的訪問V2,可以通過發(fā)布app版本來實(shí)現(xiàn)。

另外這個實(shí)現(xiàn)還有很多專業(yè)的AB測試平臺可以實(shí)現(xiàn), 例如(云測,此處欠我廣告費(fèi))。

如果涉及到寫DB操作, 一般都雙寫。即訪問新服務(wù)時,寫到新服務(wù)的DB數(shù)據(jù)也要寫到老服務(wù)的DB。甚至全部切換至新服務(wù)后再并行運(yùn)行一段時間,才徹底切換到新服務(wù),停寫老服務(wù)。

實(shí)踐題

應(yīng)用的閃退通常是什么原因造成的?如果應(yīng)用閃退,Android 和 iOS 上是分別怎么抓取日志的?

一般閃退原因如下:

1.內(nèi)存超載

2.后端服務(wù)或動態(tài)鏈接庫未找到

3.應(yīng)用初始化時無法正確讀取到用戶數(shù)據(jù)。

4.系統(tǒng)兼容問題。

日志抓取的話,iOS:

1.通過iTunes Connect(Manage Your Applications - View Details - Crash Reports)獲取用戶的crash日志

2.通過Xcode從你的設(shè)備上獲得崩潰日志

3.自己在程序中添加崩潰捕捉代碼,如果應(yīng)用集成第三方SDK,如百度統(tǒng)計

Android:

1.通過集成第三方SDK,如百度統(tǒng)計、友盟統(tǒng)計等

2、發(fā)版時使用加固工具,他們也會收集錯誤日志,如360加固

3、在程序中添加程序異常崩潰的捕捉代碼,保存到本地文件中

請簡述移動應(yīng)用在升級安裝時候應(yīng)該考慮的場景?

實(shí)際上跟CS架構(gòu)的升級沒什么兩樣:

1.APP有新版本時,打開APP是否有更新提示。

2.當(dāng)版本為非強(qiáng)制升級版時,用戶可以取消更新,老版本能正常使用。用戶在下次啟動app時,仍能出現(xiàn)更新提示。

3.當(dāng)版本為強(qiáng)制升級版時,當(dāng)給出強(qiáng)制更新后用戶沒有做更新時,退出APP。下次啟動app時,仍出現(xiàn)強(qiáng)制升級提示。

4.不刪除APP直接更新,檢查是否能正常更新,更新后能否正常工作。

5.刪除老的APP,重新下載APP,能不能正常工作。

6.不刪除APP直接更新,檢查更新后的APP和新安裝的APP提供的功能一樣。

7.檢查在線跨版本升級能否成功,版本過老是否提示用戶重裝。

8.更新成功后,用戶數(shù)據(jù)有沒有丟失,各個配置項是否還原。

給你一個應(yīng)用,請簡述你會從哪些方面去測試?

一般答分類, 分類如下: 安裝/卸載測試, UI, 功能, 性能, 安全, 兼容, 易用, 可移植性。切忌東答一下,西答一下。

請描述下微信朋友圈發(fā)小視頻的用例設(shè)計?

先假設(shè)一個需求,征得面試官同意,在這個既定需求下說你的用例,還是那個思想,定性,定量分類, 不展開了,測試用例設(shè)計算基本功吧,考察的無非是功能的全面性,邊界/異常條件下的處理, 性能/安全。 主要是有測試思維/結(jié)構(gòu)化思維,設(shè)計的用例要系統(tǒng),不能想起那個說那個。

如果讓你來測試掃碼支付,你會考慮哪些場景?

同上,不贅述

如何測試一個應(yīng)用的登錄場景?

同上,不贅述, 吐槽下,這題改成如何測試百度的登錄會更好,BAT齊活了 :) 實(shí)際上這3道題有一道就好了。

對中高級測試而言,實(shí)踐題也是淘汰題,一項卡殼沒有后續(xù), 但如果在細(xì)節(jié)上有疏忽,可以網(wǎng)開一面,進(jìn)入下個環(huán)節(jié)

5 服務(wù)端測試相關(guān)

什么都離不開服務(wù)端,所以這是你逃不開的,一般來說服務(wù)端會問接口測試,性能測試,更深一點(diǎn),埋點(diǎn)監(jiān)控止血也會有。

請問你們公司是如何做接口測試的?

累死我了, 題要做吐了。 接口測試實(shí)際跟一般測試不同就是測試用例的設(shè)計部分。

1.接口規(guī)范拿到。

2.設(shè)計接口測試功能用例(主要從用戶角度出發(fā)看接口能否實(shí)現(xiàn)業(yè)務(wù)需求,用例設(shè)計就是黑盒用例那一套)。

3.各種入?yún)Ⅱ?yàn)證(正常情況,異常情況包括輸入?yún)?shù)個數(shù)不對,類型不對,可選/必選, 還有考慮參數(shù)有互斥或關(guān)聯(lián)的情況)。

4.接口返回值各種驗(yàn)證(符合接口文檔需求)

5.了解接口實(shí)現(xiàn)邏輯,實(shí)現(xiàn)邏輯覆蓋(語句/條件/分支/判定/。。。。。)

6.接口能并發(fā)執(zhí)行嗎?

6.采用工具或者自寫代碼來驗(yàn)證,HTTP接口一般SoapUI, Jmeter, Fiddler, Postman等都能驗(yàn)證,自己寫更好。web service接口一般要寫代碼來調(diào)用。根據(jù)測試用例自動化。

7.發(fā)現(xiàn)問題跟功能測試一樣,該報bug報bug,該跟蹤狀態(tài)跟蹤狀態(tài)

接口測試質(zhì)量評估標(biāo)準(zhǔn)是什么?

接口測試說的接口可以是模塊接口,也可以是集成接口,那么質(zhì)量評估標(biāo)準(zhǔn)也就轉(zhuǎn)換為單元測試?yán)锏慕涌跍y試標(biāo)準(zhǔn),和集成測試?yán)锏募蓽y試標(biāo)準(zhǔn)。

實(shí)際上這題如果我來回答的話會關(guān)注:

1.接口功能是否正確,接口功能是否實(shí)現(xiàn)了業(yè)務(wù)需求。

2.接口參數(shù)正確性包括實(shí)參形參的個數(shù)/屬性,是否匹配。

3.接口并發(fā)/串行執(zhí)行時接口返回值的正確性。

4.有沒有性能問題(并發(fā)執(zhí)行),有無安全問題(用戶能否直接訪問該接口,需不需要驗(yàn)證)

面試答上面的應(yīng)該夠了, 其實(shí)這里面涉及到單元測試和集成測試評估點(diǎn),我公眾號以前分享后,在測試基礎(chǔ)知識里, 總結(jié)的更全面,大家可移步查看。

請問你們公司是如何做性能測試的?請講訴性能測試的相關(guān)指標(biāo)?

老規(guī)矩,先確定需求,再定性,定量。

例如:

1.這次測試目的是什么,是壓力測試/負(fù)載測試/疲勞強(qiáng)度測試/BenchMark測試?

2.測試的硬件環(huán)境是什么?軟件是什么?

3.測試工具用什么?

4.有哪些測試指標(biāo)?

5.測試分析調(diào)優(yōu)/測試報告要嗎?

具體來說:

1.拿到測試需求,確定測試軟硬件環(huán)境/測試指標(biāo), 使用測試工具(Loadrunner, jmeter)錄制或者編寫測試代碼,逐步加壓,直到測試目的達(dá)成。

2.分析測試結(jié)果,編寫測試報告,突出性能指標(biāo)包括成功,失敗情況,并加以分析。

3.調(diào)優(yōu)(一般都是開發(fā)的事)

相關(guān)性能指標(biāo):

服務(wù)器系統(tǒng)資源方面 CPU占用率,內(nèi)存占用率 磁盤的讀寫指標(biāo)

網(wǎng)絡(luò)的占用情況 基礎(chǔ)吞吐率

事務(wù)處理速度 如平均登錄時間,操作平均響應(yīng)時間等。

壓力測試和負(fù)載測試的區(qū)別

一個(壓力測試)把最后一根稻草仍你身上,一個(負(fù)載測試)就剩最后一根稻草沒仍,或者仍給你指定數(shù)目稻草。

服務(wù)器中一般要監(jiān)控哪些數(shù)據(jù),如何監(jiān)控的,怎么從監(jiān)控數(shù)據(jù)中發(fā)現(xiàn)問題?

CPU, 內(nèi)存, 網(wǎng)絡(luò), I/O, 數(shù)據(jù)庫。等等。 一般用工具監(jiān)控,另外Windows上有性能監(jiān)視器。

發(fā)現(xiàn)問題,一般要關(guān)注閾值,比如CPU利用率超過85%,說明server壓力太大了,數(shù)據(jù)量一大DB某條SQL寫入速度變慢了等等等等

假設(shè)系統(tǒng)A調(diào)用系統(tǒng)B,我把B的接口都mock了,進(jìn)行性能測試,這樣有什么好處和壞處?

好處是去掉的依賴,可以在B沒有好之前測試A,并且B的任何改動/錯誤/失效不會影響我測試A

壞處是真實(shí)性能要比測出來的性能差, 性能指標(biāo)不準(zhǔn)確。 因?yàn)镸ock的服務(wù)再真也不能代替真實(shí)服務(wù)

有一天早上打車高峰,滴滴服務(wù)端掛了大概30分鐘,工程師搶修之后,馬上上線,之后又掛了,請問有哪些原因會造成這個情況?

還是考測試思維, 一定記得先確認(rèn)需求,再定性,定量。 一般都要反問, 服務(wù)器是哪個服務(wù)器?后端應(yīng)用服務(wù)器?數(shù)據(jù)服務(wù)器?緩存系統(tǒng)服務(wù)器?中間件服務(wù)器?文件系統(tǒng)服務(wù)器?

然后面試官說個,不說就自己假定一個, 然后第一次掛第二次掛分開說,先問有沒有錯誤碼,日志有嗎,有就看日志,沒有就猜 是應(yīng)用服務(wù)器掛了啊,是不是高峰期頂不住這么大并發(fā)訪問???是數(shù)據(jù)庫服務(wù)器啊,是不是頻繁讀寫受不了啊,讀寫有分開嗎?同步還是異步啊, 把喇叭里。

第二次掛,可能更多了,是不是代碼弄錯了,改壞了,或者把喇叭里。

總之套路就是性能測試中可能預(yù)見的問題及原因,這個你們google下吧,自己分類總結(jié)下。

性能這部分題,個人認(rèn)為除非你面試性能測試工程師,不然都是可選題,答對85%過關(guān)肯定沒問題,70%也行。關(guān)鍵有個概念,知道性能測試怎么回事,有問題該往哪個方向想就行了。

image

6 自動化相關(guān)

自動化永遠(yuǎn)是避不開的,反正你入職的崗位要不要用自動化,你必須得會一點(diǎn),加分項。這一塊包括,自動化一些理念和自動化的工具使用。

理念和概念

如何看待自動化和手動測試?怎樣的一個比例才是健康的?

見仁見智,一切能提高軟件質(zhì)量的方法都應(yīng)該嘗試。

兵無常形,符合自己項目實(shí)際情況是最好的。當(dāng)然你要面試自動化測試,肯定是一切穩(wěn)定了的功能最好全部自動化掉。 :)

你們公司的自動化投入產(chǎn)出比怎樣?效益怎樣?

實(shí)話實(shí)說,UI自動化測試發(fā)現(xiàn)新bug的效益很低,主要用在回歸測試上,減少測試工作量。接口測試可就不一樣了,可以小步快跑,也可以集團(tuán)作戰(zhàn)。

自動化測試用例的覆蓋率多少?

有個50%了不得了吧, 一般核心業(yè)務(wù)里的最高優(yōu)先級用例100%覆蓋,這些用例也是用來跑冒煙的。 另外的看項目資源了。

完整運(yùn)行一次自動化用例需要多久時間?

Google說它們分鐘級或者秒級別, 為毛我們都是小時級別 :(

什么是分層自動化?

金字塔結(jié)構(gòu), 最底層UnitTest,往上接口API/集成起來的service, 最上面UI自動化

你的測試數(shù)據(jù)是怎么準(zhǔn)備的?

當(dāng)然是提前準(zhǔn)備的了:)

寫在腳本里/外部文件(excel, XML)/數(shù)據(jù)庫, 逼格逐級提升

測試腳本的維護(hù)成本是怎么樣的?

兩個原則:

1.不壞就不要修

2.終身追責(zé),誰污染誰治理

工具使用

WebDriver 相關(guān)

請問你的定位策略是什么?

啊啊啊,已經(jīng)兩個小時了,要抓狂了。

ID, Clas, CSS, XPath, jquery腳本, 總之能不麻煩開發(fā)就不麻煩開發(fā)。

請問如何實(shí)現(xiàn)用例失敗或者異常時候需要截圖?

框架自帶, python+webdriver里是get_screenshot_as_file, 一般寫一個裝飾器,放在要執(zhí)行的類上,try, catch下。

請問如何分布式執(zhí)行webdriver用例?

兩種策略:

1.利用Jenkins等,部署部分代碼到多個機(jī)器上執(zhí)行

2.RemoteWebDriver

如何在腳本中執(zhí)行 JavaScript 代碼?

driver.execute_scripts(‘腳本’)

移動應(yīng)用相關(guān)

Appium 的定位策略有哪些?

使用Appium-Python-Client情況下, 除了以下常規(guī)八種定位方式外:

driver.find_element_by_id() –元素的 resrouce-id 屬性

driver.find_element_by_AccessibilityId() – content-desc屬性,替代以前的name。

driver.find_element_by_xpath() –比css定位慢

driver.find_element_by_class_name() –元素的 class 屬性

driver.find_element_by_css_selector()

driver.find_element_by_link_text() –鏈接元素的全部顯示文字

driver.find_element_by_tag_name() –元素的標(biāo)簽名

driver.find_element_by_partial_link_text() –鏈接元素的部分顯示文字

iOS和Android上還有獨(dú)特的定位方法:

iOS:

IosUIAutomation –iOS9.3或以下的定位方法

driver.find_element_by_ios_uiautomation(‘.elements()[0]’)

Android:

AndroidUIAutomator, 僅支持 Android 4.2或以上,可支持元素的單個屬性和多個屬性定位。

driver.find_element_by_android_uiautomator(‘new UiSelector().text(“Animation”)’)

關(guān)于移動端元素的定位的定位,我公眾號testertalk也發(fā)過系列文章,詳細(xì)內(nèi)容請移步。

請簡述Appium的原理

真想跟面試官說,您能幫忙打開官網(wǎng)嗎?Appium對iOS和Anroid的實(shí)現(xiàn)原理不盡相同,并且對同一個平臺不同操作系統(tǒng)版本的實(shí)現(xiàn)原理也不相同。

我傾向大家往簡單了說:

1.Appium是C/S架構(gòu)的,更像是一個proxy,連接其被測移動平臺和測試腳本。

2.appium是基于 webdriver 協(xié)議添加對移動設(shè)備自化api擴(kuò)展而成的。

網(wǎng)上有個很清晰的圖,截圖如下:

實(shí)際上我個人理解,這個題就是想了解,當(dāng)你使用一個工具時,你是否關(guān)心過它的內(nèi)部實(shí)現(xiàn),也可以過渡到當(dāng)你測試一個應(yīng)用時,你是否關(guān)注它的實(shí)現(xiàn)。

iOS 和 Android 的 UI 自動化的原理是什么?

上面已經(jīng)答了,如下:

iOS 9.3 and above: Apple’s XCUITest

iOS 9.3 and lower: Apple’s UIAutomation

Android 4.2+: Google’s UiAutomator/UiAutomator2

Android 2.3+: Google’s Instrumentation. (Instrumentation support is provided by bundling a separate project, Selendroid)

當(dāng)定位策略都失敗的時候,你該怎么做?

80%是你元素定位的不對,那么多定位方法,一個不行換另外一個,直接不能定位,先定位父元素,再循環(huán)找子元素。一般來說XPATH都能定位到,無非是可閱讀性不強(qiáng)。真的全部失效,請求開發(fā)幫你改個元素屬性好了。

這題其實(shí)還是”測試sense”問題,擴(kuò)大點(diǎn)變成了怎么解決工作中困難。反正別認(rèn)慫, 最好甭廢話,直接開干。

請問Monkey測試的優(yōu)缺點(diǎn)?

沒接觸過,此題不會

如果使用monkey發(fā)現(xiàn)了一個畢現(xiàn)閃退,請問怎么使用monkey重現(xiàn)它?

同上

Jmeter

你用jmeter做什么測試?

接口,性能。

如果有一個登錄接口需要服務(wù)端返回參數(shù),再帶著這個參數(shù)去請求才能完成登錄,用jmeter 怎么做?

可以利用Regular Expression Extractor傳參。 具體請參考我公眾號testertalk Jmeter 系列文章。

———- 最后,來點(diǎn)硬題,嚯嚯嚯! ———-

7 硬 題

所謂硬題就是答案一般都是固定或者標(biāo)準(zhǔn)的,答案也不會模棱兩可,包括:算法,編程,sql,linux

算法:

請寫出冒泡排序

image

1~9999數(shù)列中數(shù)字3出現(xiàn)的次數(shù)。用遞推方法解出。

本來以為很簡單,寫了一下,2位數(shù)能算出來結(jié)果,3位數(shù)會報遞歸次數(shù)太多, 覺得蹊蹺, 仔細(xì)一查,尼瑪這題大有來歷,我跪的心服口服。經(jīng)過查找資料,解答如下:

1位數(shù): 0~9

個位數(shù)為3: 3, 共1次。

故0~9之間,3的個數(shù)為1

2位數(shù): 10~99

個位數(shù)是3: 13, 23, 33 ...93, 共9個。

十位數(shù)是3: 30, 31, ....39. 共10個。

故0~99之間,3的個數(shù)為1+9+10=20個

3位數(shù): 100~999

個位數(shù)是3:

103, 113, ....193 共10個。

203, 213, ....293 共10個。

。

。

。

903, 913, ....993 共10個。

一共9×10=90次。

十位數(shù)是3:

130, 132 ....139 共10個。

230, 232 ....239 共10個。

。

。

。

930, 931, ....939 共10個。

一共9×10=90次。

百位數(shù)是3: 300, 301, ....399 共100個。

故0~999之間,3的個數(shù)為20+90+90+100=300次

也可以這樣考慮:

0~999之間:十位個 位共有10個0~99(解釋0~99,100~199,。。。900~999),故有10*20=200次,而百位為1的有100次,共200+100=300次

300=10*20+100

4位數(shù): 0~9999

個位數(shù)是3:

1003,1013,1023, 。。。1093 共10個

1103,1113,1123, 。。。1193 共10個

1203..... 共10個

1903.... 共10個

共9個10,我們記為A

還有2003~2903, 3003~3903.。。9003~9903 還有9個一樣的A。

所有一共有10個(A), 是10×9×10=900

十位數(shù)是3:

1030,1031,。。。。。。1039, 共10個。

1131~1139,

1231~1239.

。。。

1931~1939, 共有10×10個=100個。我們記為B

還有千位數(shù)是2開頭的,到9開頭的,加起來共有9個(B) 9×10*10=900個。

百位數(shù)是3:

1300, 1301,。。。。1399 共100個。

2300

.。

9300

共10×100=1000個。

千位數(shù)是3: 3000,3001,3999 共 1000次。

故0~9999之間,3的個數(shù)為300+900900900+1000=4000

也可以這樣考慮:

0~9999之間:百位十位 個位共有10個0~999(0~999, 1000~1999, 。。9000~9999),故有10*300=3000次,而千位為1的有1000次,共3000+1000=4000次

4000=10*300+1000

規(guī)律:

0~9:1

0~99:20=10*1+10

0~999:300=10*20+100

0~9999:4000=10*300+1000

0~99999:50000=10*4000+10000

0~999999:600000=10*50000+100000

f(1)=1

f(2)=10*f(1)+10 **1

f(3)=10*f(2)+10 **2

f(4)=10*f(3)+10 **3

..

f(n)=10f(n-1) + 10(n-1)

image

從一個數(shù)組中找出前4個最大的數(shù),用最優(yōu)解。

這個就是排序問題了吧,我想法先排好序,在取前4個,那么多排序,冒泡啊,選擇啊,快排啊。。這里面快排最快,用大O算法O (n * log n )。

思想:

少于2個元素的數(shù)組不需要排序

找一個元素作為基數(shù)

小于基數(shù)的放一個數(shù)組

大于基數(shù)的放一個數(shù)組

針對小于基數(shù)的數(shù)組做快速排序,暫且叫l(wèi)ow

針對大于基數(shù)的數(shù)組做快速排序, 暫且叫high

最終排序后的 low + 【基數(shù)】+ high,就是排好序的數(shù)組

image

其實(shí)python里內(nèi)置了很多優(yōu)秀的方法來解決其他語言很繁瑣的問題,比如本題目可以直接:

print(sorted([2,2,1,8,5,7,6])[:4])

(據(jù)說python里sorted實(shí)現(xiàn)也是快排,沒有經(jīng)過求證。)

哈哈,這樣,面試官會不會鄙視我 :)

我之前也分享過基本的算法,大家可以去我的公眾號testertalk查看。

寫一段程序,刪除字符串a(chǎn)中包含的字符串b,舉例 輸入a = “asdw”,b = “sd” 返回 字符串 “aw”,并且測試這個程序。

[圖片上傳失敗...(image-877087-1551538112728)]

編程:

什么是面向?qū)ο缶幊蹋?/p>

把一切看成對象,三大特性 繼承,封裝,多態(tài)

講下Java多線程的使用

java多線程跟別的語言的多線程有區(qū)別嗎?

多線程一般用來更好的利用CPU資源,解決諸如程序“在一部分上會阻塞”,“在另一部分上需要持續(xù)運(yùn)行”的場合。多線程一般用來更好的利用CPU資源,解決諸如程序“在一部分上會阻塞”,“在另一部分上需要持續(xù)運(yùn)行”的場合。

例如有個程序需要接受多個用戶輸入并向服務(wù)器發(fā)送數(shù)據(jù),那么如果不用多線程,一旦程序在等待某個用戶輸入時,程序就會阻塞。這段時間其它用戶也不能使用了

有三個線程T1,T2,T3,怎么確保它們按順序執(zhí)行?

在主線程中,每一個線程start()后立即join()

Thread 類中的start() 和 run() 方法有什么區(qū)別?

個人理解start()會啟動線程,然后調(diào)用run(),run()方法一般要重寫。

網(wǎng)上資料:

調(diào)用start()后,線程會被放到等待隊列,等待CPU調(diào)度,并不一定要馬上開始執(zhí)行,只是將這個線程置于可動行狀態(tài)。然后通過JVM,線程Thread會調(diào)用run()方法,執(zhí)行本線程的線程體。先調(diào)用start后調(diào)用run,這么麻煩,為了不直接調(diào)用run?就是為了實(shí)現(xiàn)多線程的優(yōu)點(diǎn),沒這個start不行。

1.start()方法來啟動線程,真正實(shí)現(xiàn)了多線程運(yùn)行。這時無需等待run方法體代碼執(zhí)行完畢,可以直接繼續(xù)執(zhí)行下面的代碼;通過調(diào)用Thread類的start()方法來啟動一個線程, 這時此線程是處于就緒狀態(tài), 并沒有運(yùn)行。 然后通過此Thread類調(diào)用方法run()來完成其運(yùn)行操作的, 這里方法run()稱為線程體,它包含了要執(zhí)行的這個線程的內(nèi)容, Run方法運(yùn)行結(jié)束, 此線程終止。然后CPU再調(diào)度其它線程

2.run()方法當(dāng)作普通方法的方式調(diào)用。程序還是要順序執(zhí)行,要等待run方法體執(zhí)行完畢后,才可繼續(xù)執(zhí)行下面的代碼; 程序中只有主線程——這一個線程, 其程序執(zhí)行路徑還是只有一條, 這樣就沒有達(dá)到寫線程的目的。

記住:多線程就是分時利用CPU,宏觀上讓所有線程一起執(zhí)行 ,也叫并發(fā)

請寫一個線程安全的單例模型

網(wǎng)上搜下吧,java不太熟

SQL:

說下左連接和右連接

image

介紹下什么是索引

image

使用sql生產(chǎn)10萬條數(shù)據(jù)

平常沒接觸過這么大數(shù)據(jù)量,分批次吧,每次插入1w條,應(yīng)該沒什么壓力

給你一張表,根據(jù)要求寫sql,這個題目比較多,自己百度吧。

Linux:

你常用的命令是什么?

ls, mkdir, cat, vi, ps touch

用什么查看log?

watch, tail、cat、tac、head、echo

如何查找一個文件大小超過5M的文件

image

寫在最后

這68道題目,我花費(fèi)了2個晚上總結(jié)整理,真的收獲蠻大。

從個人角度看,這些面試題很接地氣,很多考題也跟實(shí)際工作密切相關(guān),大大增加了篩掉水貨的幾率,我也曾用部分相似題來篩選別人。

對于初級測試來說,測試?yán)碚?,測試基礎(chǔ)都應(yīng)該掌握,移動端測試,服務(wù)器端測試,自動化測試,性能測試,也應(yīng)該逐漸接觸起來,不會答沒關(guān)系,但要大致了解,面試官喜歡有追求的人。

對于中高級測試來說,除了硬題及性能測試題,其它題目經(jīng)過充分準(zhǔn)備都不應(yīng)該丟分,回答正確率要在85%以上,另外,回答的深度非常重要,決定了你是年齡資深還是技術(shù)資深。

對于硬題,雖然大部分的測試,甚至測試開發(fā),工作中用到算法的幾率也不高,但你如果都答對了,還是能讓人眼前一亮的。

對于這部分試題,稍有難度的例如google面試題那個,你有個大致思路也行,對于非?;A(chǔ)的,二分啊,排序啊,還是建議多練練,起碼應(yīng)該做到手寫正確。

現(xiàn)在有能力做好普通測試工作的人太多了,算法也跟學(xué)歷,長相一樣,用人單位不得不拿這些篩選掉很多合適的人,有時候你比別人更優(yōu)秀的能力,也許就來自于你昨天刷了一道面試題。

怎么說呢,面試造火箭,進(jìn)來擰螺絲,接受現(xiàn)實(shí)吧。

我本人其實(shí)是反對面試突擊的,所以我公眾號從沒有發(fā)過面試題。 本文目的也不希望大家背答案就面試(面試從來也沒有標(biāo)準(zhǔn)答案,背了估計也面不上 :0),而是希望大家通過做這些面試題,發(fā)現(xiàn)自己的不足,從而有針對性的提升自己。

感謝大家的閱讀,能讀到這里的都是真粉絲, 歡迎大家提出更好的意見,謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容