APP測(cè)試面試題匯總

一、基礎(chǔ)篇

1、請(qǐng)介紹一下,APP測(cè)試流程?

APP測(cè)試流程與web測(cè)試流程類似,分為如下七個(gè)階段:

1.根據(jù)需求說(shuō)明書編寫測(cè)試計(jì)劃;

2.制定測(cè)試方案,主要是測(cè)試任務(wù)、測(cè)試人員和測(cè)試時(shí)間的分配;

3.測(cè)試準(zhǔn)備,包括搭建測(cè)試環(huán)境,準(zhǔn)備測(cè)試數(shù)據(jù),確定測(cè)試方法;

4.測(cè)試用例的設(shè)計(jì)與編寫,進(jìn)行用例評(píng)審及補(bǔ)充完善;

5.執(zhí)行測(cè)試時(shí)首先進(jìn)行冒煙測(cè)試,然后對(duì)主功能流程進(jìn)行測(cè)試,包括客戶端的單個(gè)功能模塊,及功能業(yè)務(wù)邏輯功能交互,回歸測(cè)試;

6.提交測(cè)試結(jié)果,包括測(cè)試用例,測(cè)試計(jì)劃;

7.日常維護(hù)性測(cè)試;



APP測(cè)試周期可根據(jù)項(xiàng)目的開發(fā)周期來(lái)確定測(cè)試時(shí)間,一般測(cè)試時(shí)間為兩三周,根據(jù)項(xiàng)目情況以及版本質(zhì)量可適當(dāng)縮短或延長(zhǎng)測(cè)試時(shí)間。

2、APP測(cè)試需要提前準(zhǔn)備哪些測(cè)試資源?

具體要準(zhǔn)備的測(cè)試資源,根據(jù)實(shí)際項(xiàng)目來(lái),可以從以下幾個(gè)方面出發(fā):

1.IOS設(shè)備、Android設(shè)備(選取市面上主流手機(jī)產(chǎn)品);

2.支付寶/銀聯(lián)支付的項(xiàng)目,需要提前申請(qǐng)支付寶/銀聯(lián)賬戶等等;

3.有秒殺專題的題目,需要規(guī)劃秒殺時(shí)間表;

4.有優(yōu)惠券使用的項(xiàng)目,需要添加優(yōu)惠券數(shù)據(jù);

3、APP測(cè)試和Web測(cè)試的區(qū)別?

單純從功能測(cè)試的層面上來(lái)講的話,APP 測(cè)試、web 測(cè)試在流程和功能測(cè)試上是沒(méi)有區(qū)別的。

相同點(diǎn):

1.同樣的測(cè)試用例設(shè)計(jì)方法;

2.同樣的測(cè)試方法:都會(huì)依據(jù)原型圖或效果圖檢查UI;

3.測(cè)試頁(yè)面載入和翻頁(yè)的速度、登錄時(shí)長(zhǎng)、內(nèi)存是否溢出等;

4.測(cè)試應(yīng)用系統(tǒng)的穩(wěn)定性;

不同點(diǎn):

1.系統(tǒng)結(jié)構(gòu)方面

web項(xiàng)目,b/s架構(gòu),基于瀏覽器的;web測(cè)試只要更新了服務(wù)器端,客戶端就會(huì)同步更新。
app項(xiàng)目,c/s結(jié)構(gòu)的,必須要有客戶端;app 修改了服務(wù)端,則客戶端用戶所有核心版本都需要進(jìn)行回歸測(cè)試一遍。

2.性能方面
web項(xiàng)目 需監(jiān)測(cè) 響應(yīng)時(shí)間、CPU、Memory;
app項(xiàng)目 除了監(jiān)測(cè) 響應(yīng)時(shí)間、CPU、Memory外,還需監(jiān)測(cè) 流量、電量等;

3.兼容性方面
web項(xiàng)目:瀏覽器(火狐、谷歌、IE等);操作系統(tǒng)(Windows7、Windows10、Linux等)。
app項(xiàng)目:設(shè)備系統(tǒng):iOS(ipad、iphone)、Android(三星、華為、聯(lián)想等) 、Windows(Win7、Win8)、OSX(Mac);手機(jī)設(shè)備可根據(jù) 手機(jī)型號(hào)、分辨率、屏幕尺寸不同。

4、相對(duì)于 Wed 項(xiàng)目,APP有專項(xiàng)測(cè)試

1)干擾測(cè)試:中斷,來(lái)電,短信,關(guān)機(jī),重啟等。
2)弱網(wǎng)絡(luò)測(cè)試(模擬2g、3g、4g、5g,wifi網(wǎng)絡(luò)狀態(tài)以及丟包情況);網(wǎng)絡(luò)切換測(cè)試(網(wǎng)絡(luò)斷開后重連、3g切換到4g、5g/wifi 等)。
3)安裝、更新、卸載,中斷、前后臺(tái)切換。
安裝:需考慮安裝時(shí)的中斷、弱網(wǎng)、安裝后刪除安裝文件,全新安裝、升級(jí)安裝、第三方工具安裝等情況;
卸載:需考慮第三方工具卸載、直接卸載卸,載后是否刪除app相關(guān)的文件;
更新:分強(qiáng)制更新、非強(qiáng)制更新、增量包更新、斷點(diǎn)續(xù)傳、弱網(wǎng)狀態(tài)下更新;
中斷:來(lái)電中斷、短信中斷、鬧鐘中斷、手機(jī)鎖定、手機(jī)斷電、手機(jī)死機(jī);
4)界面操作:關(guān)于手機(jī)端測(cè)試,需注意手勢(shì),橫豎屏切換,多點(diǎn)觸控,前后臺(tái)切換。
5)安全測(cè)試:安裝包是否可反編譯代碼、安裝包是否簽名、權(quán)限設(shè)置,例如訪問(wèn)通訊錄等。
6)邊界測(cè)試:可用存儲(chǔ)空間少、沒(méi)有SD卡/雙SD卡、飛行模式、系統(tǒng)時(shí)間有誤、第三方依賴(QQ、微信登錄)等。
7)權(quán)限測(cè)試:設(shè)置某個(gè)App是否可以獲取該權(quán)限,例如是否可訪問(wèn)通訊錄、相冊(cè)、照相機(jī)等。
5、測(cè)試工具方面
自動(dòng)化工具:APP 一般使用 Appium; Web 一般使用 Selenium;
性能測(cè)試工具:APP 一般使用Monkey、 JMeter; Web 一般使用 LR、JMeter;

5、Android手機(jī)和IOS手機(jī),系統(tǒng)有什么區(qū)別?

1.兩者運(yùn)行機(jī)制不同:IOS采用的是沙盒運(yùn)行機(jī)制,安卓采用的是虛擬機(jī)運(yùn)行機(jī)制。
IOS 沙盒運(yùn)行機(jī)制:
每個(gè)程序都有自己的虛擬地址空間。所以,程序之間不能進(jìn)行訪問(wèn)。
默認(rèn)只會(huì)將應(yīng)用的最后運(yùn)行數(shù)據(jù),記錄在RAM里面。
Android 虛擬機(jī)運(yùn)行機(jī)制:
所有的應(yīng)用程序都是運(yùn)行在虛擬機(jī)中,用戶界面其實(shí)是由虛擬機(jī)傳遞的,并且通過(guò)虛擬機(jī),Android的任何程序都就可以輕松訪問(wèn)其他程序文件。
所有的Android的應(yīng)用程序都是運(yùn)行在RAM里面的,所以會(huì)發(fā)現(xiàn)有時(shí)候Android用著用著就開始有點(diǎn)卡頓。

2.兩者后臺(tái)制度不同:IOS中任何第三方程序都不能在后臺(tái)運(yùn)行;安卓中任何程序都能在后臺(tái)運(yùn)行,直到?jīng)]有內(nèi)存才會(huì)關(guān)閉。

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

6、IOS和Android的APP測(cè)試有什么區(qū)別?

1.物理按鍵:Android長(zhǎng)按home鍵呼出應(yīng)用列表和切換應(yīng)用,然后右滑則終止應(yīng)用;iOS所有的返回上一層,只能靠頁(yè)面功能實(shí)現(xiàn)。
2.多分辨率測(cè)試:Android端20多種;IOS較少。
3.手機(jī)操作系統(tǒng):Android較多,IOS較少且不能降級(jí),只能單向升級(jí);新的IOS系統(tǒng)中的資源庫(kù)不能完全兼容低版本中的IOS系統(tǒng)中的應(yīng)用,低版本IOS系統(tǒng)中的應(yīng)用調(diào)用了新的資源庫(kù),會(huì)直接導(dǎo)致閃退。
4.操作習(xí)慣:Android,Back鍵是否被重寫,測(cè)試點(diǎn)擊Back鍵后的反饋是否正確;應(yīng)用數(shù)據(jù)從內(nèi)存移動(dòng)到SD卡后能否正常運(yùn)行等。
5.push測(cè)試:Android點(diǎn)擊home鍵,程序后臺(tái)運(yùn)行時(shí),此時(shí)接收到push,點(diǎn)擊后喚醒應(yīng)用,此時(shí)是否可以正確跳轉(zhuǎn);IOS點(diǎn)擊home鍵關(guān)閉程序和屏幕鎖屏的情況(紅點(diǎn)的顯示)。
6.安裝卸載測(cè)試:Android可以通過(guò)手機(jī)自帶的應(yīng)用市場(chǎng)或者是第三方的手機(jī)助手進(jìn)行下載,下載和安裝的平臺(tái)和工具和渠道比較多;IOS主要有app store,iTunes和testflight下載。
7.升級(jí)測(cè)試:可以被升級(jí)的必要條件:新舊版本具有相同的簽名;新舊版本具有相同的包名;有一個(gè)標(biāo)示符區(qū)分新舊版本(如版本號(hào))。
8.支付方式:對(duì)于一些有內(nèi)購(gòu)功能的APP,Android直接調(diào)用第三方支付渠道完成支付;IOS需要先在APP store里綁定支付方式,然后通過(guò)APP store去完成支付操作。
9.消息推送機(jī)制:Android使用第三方或者自建平臺(tái)進(jìn)行消息推送;IOS的消息推送渠道由蘋果官方提供。

7、介紹一個(gè)APP抓包工具?

一般用Fiddler,主要用來(lái)做app抓包使用,先在Fiddler客戶端做好各項(xiàng)配置,端口設(shè)置為8888;然后在手機(jī)上設(shè)置代理,就可以抓包,主要看的是服務(wù)器返回的值、還能夠修改傳入?yún)?shù)、傳出的參數(shù)、模擬網(wǎng)絡(luò)延時(shí),構(gòu)造不同場(chǎng)景。






8、APP日志如何抓?。?br>
可以使用adb命令:adb logcat | find "com.sankuai.meituan" >d:\test.txt
也可以用ddms抓取,手機(jī)連上電腦,打開ddms工具;
或者在Android Studio開發(fā)工具中,打開DDMS;

9、常用的adb命令有哪些?

1.查看幫助手冊(cè)列出所有的選項(xiàng)說(shuō)明及子命令:
adb help

2. 獲取設(shè)備列表及設(shè)備狀態(tài):
adb devices

3.安裝應(yīng)用:adb install 路徑\xx.apk, 安裝應(yīng)用;adb install -r 重新安裝。
adb install
adb install -r

4. 獲取設(shè)備的狀態(tài),設(shè)備的狀態(tài)有 device , offline , unknown3種,其中device:設(shè)備正常連接,offline:連接出現(xiàn)異常,設(shè)備無(wú)響應(yīng),unknown:沒(méi)有連接設(shè)備。
adb get-state

5.卸載應(yīng)用:adb uninstall <包名>, 后面的參數(shù)是應(yīng)用的包名,區(qū)別于 apk 文件名。
adb uninstall

6.將 Android 設(shè)備上的文件或者文件夾復(fù)制到電腦本地:adb pull  <遠(yuǎn)程路徑> <本地路徑>, 如復(fù)制 Sdcard 下的 pull.txt 文件到 D 盤:adb pull sdcard/pull.txt d:\,重命名:adb pull sdcard/pull.txt d:\rename.txt。
adb pull

7.推送本地文件至 Android 設(shè)備:adb push  <本地路徑> <遠(yuǎn)程路徑>, 如推送 D 盤下的 ITester.txt 至 Sdcard:adb push d:\ITester.txt sdcard/   (注意sdcard 后面的斜杠不能少)。
adb push

8.結(jié)束和啟動(dòng)adb服務(wù):adb kill-server /adb start-server , 結(jié)束 adb 服務(wù)/啟動(dòng) adb 服務(wù),通常兩個(gè)命令一起用,設(shè)備狀態(tài)異常時(shí)使用 kill-server,運(yùn)行 start-server 進(jìn)行重啟服務(wù)。
adb kill-server
adb start-server

9.打印及清除系統(tǒng)日志:adb logcat , 打印 Android 的系統(tǒng)日志 ;adb logcat -c,清除日志。
adb logcat
adb logcat -c

10.查找包名/活動(dòng)名
adb logcat | findstr START

10、adb三個(gè)組件是指?

ADB作為一個(gè)客戶端/服務(wù)器架構(gòu)的命令行工具,主要由3個(gè)部分組成。
adb clent(客戶端):可以通過(guò)它對(duì)Android應(yīng)用進(jìn)行安裝、卸載及調(diào)試。
adb service(服務(wù)器):管理客戶端到Android設(shè)備上abd后臺(tái)進(jìn)程的連接,負(fù)責(zé)管理client和damon進(jìn)行通信。  
adb daemon(守護(hù)進(jìn)程):運(yùn)行在Android設(shè)備上的adb后臺(tái)進(jìn)程。

二、進(jìn)階篇

1、介紹一下Android四大組件?

Android四大基本組件:Activity、BroadcastReceiver廣播接收器、ContentProvider內(nèi)容提供者、Service服務(wù)。

Activity:應(yīng)用程序中,一個(gè)Activity就相當(dāng)于手機(jī)屏幕,它是一種可以包含用戶界面的組件,主要用于和用戶進(jìn)行交互。一個(gè)應(yīng)用程序可以包含許多活動(dòng),比如事件的點(diǎn)擊,一般都會(huì)觸發(fā)一個(gè)新的Activity。

BroadcastReceiver廣播接收器:應(yīng)用可以使用它對(duì)外部事件進(jìn)行過(guò)濾只對(duì)感興趣的外部事件(如當(dāng)電話呼入時(shí),或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí))進(jìn)行接收并做出響應(yīng)。廣播接收器沒(méi)有用戶界面。然而,它們可以啟動(dòng)一個(gè)activity或serice 來(lái)響應(yīng)它們收到的信息,或者用NotificationManager來(lái)通知用戶。通知可以用很多種方式來(lái)吸引用戶的注意力──閃動(dòng)背燈、震動(dòng)、播放聲音等。一般來(lái)說(shuō)是在狀態(tài)欄上放一個(gè)持久的圖標(biāo),用戶可以打開它并獲取消息。

ContentProvider內(nèi)容提供者:內(nèi)容提供者主要用于在不同應(yīng)用程序之間實(shí)現(xiàn)數(shù)據(jù)共享的功能,它提供了一套完整的機(jī)制,允許一個(gè)程序訪問(wèn)另一個(gè)程序中的數(shù)據(jù),同時(shí)還能保證被訪問(wèn)數(shù)據(jù)的安全性。只有需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù)時(shí)才需要內(nèi)容提供者。例如:通訊錄數(shù)據(jù)被多個(gè)應(yīng)用程序使用,且必須存儲(chǔ)在一個(gè)內(nèi)容提供者中。它的好處:統(tǒng)一數(shù)據(jù)訪問(wèn)方式。

Service服務(wù):是Android中實(shí)現(xiàn)程序后臺(tái)運(yùn)行的解決方案,它非常適合去執(zhí)行那些不需要和用戶交互而且還要長(zhǎng)期運(yùn)行的任務(wù)(一邊打電話,后臺(tái)掛著QQ)。服務(wù)的運(yùn)行不依賴于任何用戶界面,即使程序被切換到后臺(tái),或者用戶打開了另一個(gè)應(yīng)用程序,服務(wù)仍然能夠保持正常運(yùn)行,不過(guò)服務(wù)并不是運(yùn)行在一個(gè)獨(dú)立的進(jìn)程當(dāng)中,而是依賴于創(chuàng)建服務(wù)時(shí)所在的應(yīng)用程序進(jìn)程。當(dāng)某個(gè)應(yīng)用程序進(jìn)程被殺掉后,所有依賴于該進(jìn)程的服務(wù)也會(huì)停止運(yùn)行(正在聽音樂(lè),然后把音樂(lè)程序退出)。

2、Activity生命周期?

生命周期即活動(dòng)從開始到結(jié)束所經(jīng)歷的各種狀態(tài),從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)變,從無(wú)到有再到無(wú),Activity本質(zhì)上有四種狀態(tài):
運(yùn)行(Active/Running):Activity處于活動(dòng)狀態(tài),此時(shí)Activity處于棧頂,是可見狀態(tài),可以與用戶進(jìn)行交互。
暫停(Paused):當(dāng)Activity失去焦點(diǎn)時(shí),或被一個(gè)新的非全面屏的Activity,或被一個(gè)透明的Activity放置在棧頂時(shí),Activity就轉(zhuǎn)化為Paused狀態(tài)。此刻并不會(huì)被銷毀,只是失去了與用戶交互的能力,其所有的狀態(tài)信息及其成員變量都還在,只有在系統(tǒng)內(nèi)存緊張的情況下,才有可能被系統(tǒng)回收掉。
停止(Stopped):當(dāng)Activity被系統(tǒng)完全覆蓋時(shí),被覆蓋的Activity就會(huì)進(jìn)入Stopped狀態(tài),此時(shí)已不在可見,但是資源還是沒(méi)有被收回。
系統(tǒng)回收(Killed):當(dāng)Activity被系統(tǒng)回收掉,Activity就處于Killed狀態(tài)。
如果一個(gè)活動(dòng)在處于停止或者暫停的狀態(tài)下,系統(tǒng)內(nèi)存缺乏時(shí)會(huì)將其結(jié)束(finish)或者殺死(kill)。這種非正常情況下,系統(tǒng)在殺死或者結(jié)束之前會(huì)調(diào)用onSaveInstance()方法來(lái)保存信息,同時(shí),當(dāng)Activity被移動(dòng)到前臺(tái)時(shí),重新啟動(dòng)該Activity并調(diào)用onRestoreInstance()方法加載保留的信息,以保持原有的狀態(tài)。

在上面的四中常有的狀態(tài)之間,還有著其他的生命周期來(lái)作為不同狀態(tài)之間的過(guò)渡,用于在不同的狀態(tài)之間進(jìn)行轉(zhuǎn)換。

3、請(qǐng)介紹一下,Android SDK中自帶的幾個(gè)工具?

有如下幾個(gè)工具:
ddms:Dalvik Debug Monitor Service,是 Android 開發(fā)環(huán)境中的Dalvik[虛擬機(jī)]調(diào)試監(jiān)控服務(wù)。
monkey:Android中的一個(gè)命令行工具,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢(shì)輸入等),實(shí)現(xiàn)對(duì)正在開發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試。
uiautomator:UIAutomator是Eclipse自帶的用于UI自動(dòng)化測(cè)試工具,可仿真APP上的單擊、滑動(dòng)、輸入文本等操作。
monitor:同uiautomator
adb:ADB的全稱為Android Debug Bridge,就是起到調(diào)試橋的作用。通過(guò)ADB我們可以在Eclipse中方面通過(guò)DDMS來(lái)調(diào)試Android程序,就是debug工具。

4、你所了解的APP測(cè)試工具?

常用的APP測(cè)試工具如下,,查看對(duì)應(yīng)工具地址。
APP自動(dòng)化測(cè)試工具:
Appium
Airtest
uiautomator2(python)

APP穩(wěn)定性測(cè)試工具:
Monkey
MonkeyRunner
Maxim
UICrawler

APP性能測(cè)試工具:
GT
Perfdog
SoloPi

APP弱網(wǎng)測(cè)試&抓包工具:
QNET
Fiddler
Charles

APP兼容性測(cè)試工具:
TestIn
騰訊優(yōu)測(cè)
百度MTC
阿里MQC

APP安全測(cè)試工具:
OWASP ZAP
Drozer
MobSF
QARK

5、介紹一下冷啟動(dòng)、暖啟動(dòng)、熱啟動(dòng)、首屏啟動(dòng)?

APP啟動(dòng)會(huì)發(fā)生多個(gè)事件,測(cè)試人員需要知道整個(gè)環(huán)節(jié)是否出現(xiàn)問(wèn)題,需要了解到具體是哪個(gè)環(huán)節(jié)存在問(wèn)題:
冷啟動(dòng):當(dāng)進(jìn)程不存在的時(shí)候,從進(jìn)程創(chuàng)建開始到界面的展示的過(guò)程;
 暖啟動(dòng):有一部分資源已經(jīng)存在,進(jìn)程存在,相對(duì)于熱啟動(dòng)要消耗更多資源。當(dāng)用戶退出應(yīng)用程序時(shí),進(jìn)程還會(huì)存在,暖啟動(dòng)相較于冷啟動(dòng)只是少了進(jìn)程的創(chuàng)建;
熱啟動(dòng):大部分資源都在,只是應(yīng)用之間的切換;
首屏啟動(dòng):第一屏加載完整;

標(biāo)準(zhǔn):
冷啟動(dòng):需要5秒甚至更長(zhǎng);
暖啟動(dòng):需要2秒甚至更長(zhǎng);
熱啟動(dòng):需要1.5秒甚至更長(zhǎng);

整個(gè)啟動(dòng)過(guò)程可以用adb工具進(jìn)行分析,利用adb logcat獲取啟動(dòng)數(shù)據(jù),或者錄屏,使用ffmpeg拆幀分析。

首先定義一個(gè)變量,這個(gè)變量填寫用到的包名。

清除緩存數(shù)據(jù):

停止進(jìn)程:

通過(guò)以上命令就做好了冷啟動(dòng)的環(huán)境,下面啟動(dòng)app并獲取數(shù)據(jù)。啟動(dòng)App

-S表示啟動(dòng)之前先停止應(yīng)用進(jìn)程
-W是表示等待對(duì)應(yīng)的activity啟動(dòng)完成

獲取數(shù)據(jù):

獲取的時(shí)間如下:



6、談?wù)剬?duì)冷啟動(dòng)的理解?

應(yīng)用的啟動(dòng)可以分為冷啟動(dòng),熱啟動(dòng)和溫啟動(dòng),而啟動(dòng)最慢、耗時(shí)最長(zhǎng)的就是冷啟動(dòng)。
冷啟動(dòng)開始時(shí),系統(tǒng)會(huì)依次執(zhí)行三個(gè)任務(wù)去啟動(dòng)APP:
加載和啟動(dòng)應(yīng)用程序;
APP啟動(dòng)后,立即創(chuàng)建一個(gè)空白的啟動(dòng)Window;
創(chuàng)建APP的進(jìn)程;
在這三個(gè)任務(wù)執(zhí)行后,系統(tǒng)創(chuàng)建了應(yīng)用進(jìn)程,那么應(yīng)用進(jìn)程接下來(lái)會(huì)執(zhí)行下一步:
創(chuàng)建APP對(duì)象;
開啟一個(gè)主線程;
創(chuàng)建啟動(dòng)頁(yè)的Activity;
加載View;
布局view到屏幕;
進(jìn)行初始繪制顯示視圖;
當(dāng)應(yīng)用進(jìn)程完成初始繪制之后,系統(tǒng)進(jìn)程用啟動(dòng)頁(yè)的Activity來(lái)替換當(dāng)前顯示的空白Window,這個(gè)時(shí)刻用戶就可以使用App了。

作者:TestMadman


歡迎關(guān)注微信公眾號(hào) :Python測(cè)試社區(qū)