APP測試面試題匯總
一、基礎(chǔ)篇
1、請介紹一下,APP測試流程?
APP測試流程與web測試流程類似,分為如下七個階段:
1.根據(jù)需求說明書編寫測試計劃;
2.制定測試方案,主要是測試任務(wù)、測試人員和測試時間的分配;
3.測試準(zhǔn)備,包括搭建測試環(huán)境,準(zhǔn)備測試數(shù)據(jù),確定測試方法;
4.測試用例的設(shè)計與編寫,進(jìn)行用例評審及補(bǔ)充完善;
5.執(zhí)行測試時首先進(jìn)行冒煙測試,然后對主功能流程進(jìn)行測試,包括客戶端的單個功能模塊,及功能業(yè)務(wù)邏輯功能交互,回歸測試;
6.提交測試結(jié)果,包括測試用例,測試計劃;
7.日常維護(hù)性測試;
APP測試周期可根據(jù)項目的開發(fā)周期來確定測試時間,一般測試時間為兩三周,根據(jù)項目情況以及版本質(zhì)量可適當(dāng)縮短或延長測試時間。
2、APP測試需要提前準(zhǔn)備哪些測試資源?
具體要準(zhǔn)備的測試資源,根據(jù)實際項目來,可以從以下幾個方面出發(fā):
1.IOS設(shè)備、Android設(shè)備(選取市面上主流手機(jī)產(chǎn)品);
2.支付寶/銀聯(lián)支付的項目,需要提前申請支付寶/銀聯(lián)賬戶等等;
3.有秒殺專題的題目,需要規(guī)劃秒殺時間表;
4.有優(yōu)惠券使用的項目,需要添加優(yōu)惠券數(shù)據(jù);
3、APP測試和Web測試的區(qū)別?
單純從功能測試的層面上來講的話,APP 測試、web 測試在流程和功能測試上是沒有區(qū)別的。
相同點:
1.同樣的測試用例設(shè)計方法;
2.同樣的測試方法:都會依據(jù)原型圖或效果圖檢查UI;
3.測試頁面載入和翻頁的速度、登錄時長、內(nèi)存是否溢出等;
4.測試應(yīng)用系統(tǒng)的穩(wěn)定性;
不同點:
1.系統(tǒng)結(jié)構(gòu)方面
web項目,b/s架構(gòu),基于瀏覽器的;web測試只要更新了服務(wù)器端,客戶端就會同步更新。
app項目,c/s結(jié)構(gòu)的,必須要有客戶端;app 修改了服務(wù)端,則客戶端用戶所有核心版本都需要進(jìn)行回歸測試一遍。
2.性能方面
web項目 需監(jiān)測 響應(yīng)時間、CPU、Memory;
app項目 除了監(jiān)測 響應(yīng)時間、CPU、Memory外,還需監(jiān)測 流量、電量等;
3.兼容性方面
web項目:瀏覽器(火狐、谷歌、IE等);操作系統(tǒng)(Windows7、Windows10、Linux等)。
app項目:設(shè)備系統(tǒng):iOS(ipad、iphone)、Android(三星、華為、聯(lián)想等) 、Windows(Win7、Win8)、OSX(Mac);手機(jī)設(shè)備可根據(jù) 手機(jī)型號、分辨率、屏幕尺寸不同。
4、相對于 Wed 項目,APP有專項測試
1)干擾測試:中斷,來電,短信,關(guān)機(jī),重啟等。
2)弱網(wǎng)絡(luò)測試(模擬2g、3g、4g、5g,wifi網(wǎng)絡(luò)狀態(tài)以及丟包情況);網(wǎng)絡(luò)切換測試(網(wǎng)絡(luò)斷開后重連、3g切換到4g、5g/wifi 等)。
3)安裝、更新、卸載,中斷、前后臺切換。
安裝:需考慮安裝時的中斷、弱網(wǎng)、安裝后刪除安裝文件,全新安裝、升級安裝、第三方工具安裝等情況;
卸載:需考慮第三方工具卸載、直接卸載卸,載后是否刪除app相關(guān)的文件;
更新:分強(qiáng)制更新、非強(qiáng)制更新、增量包更新、斷點續(xù)傳、弱網(wǎng)狀態(tài)下更新;
中斷:來電中斷、短信中斷、鬧鐘中斷、手機(jī)鎖定、手機(jī)斷電、手機(jī)死機(jī);
4)界面操作:關(guān)于手機(jī)端測試,需注意手勢,橫豎屏切換,多點觸控,前后臺切換。
5)安全測試:安裝包是否可反編譯代碼、安裝包是否簽名、權(quán)限設(shè)置,例如訪問通訊錄等。
6)邊界測試:可用存儲空間少、沒有SD卡/雙SD卡、飛行模式、系統(tǒng)時間有誤、第三方依賴(QQ、微信登錄)等。
7)權(quán)限測試:設(shè)置某個App是否可以獲取該權(quán)限,例如是否可訪問通訊錄、相冊、照相機(jī)等。
5、測試工具方面
自動化工具:APP 一般使用 Appium; Web 一般使用 Selenium;
性能測試工具: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ī)制:
每個程序都有自己的虛擬地址空間。所以,程序之間不能進(jìn)行訪問。
默認(rèn)只會將應(yīng)用的最后運(yùn)行數(shù)據(jù),記錄在RAM里面。
Android 虛擬機(jī)運(yùn)行機(jī)制:
所有的應(yīng)用程序都是運(yùn)行在虛擬機(jī)中,用戶界面其實是由虛擬機(jī)傳遞的,并且通過虛擬機(jī),Android的任何程序都就可以輕松訪問其他程序文件。
所有的Android的應(yīng)用程序都是運(yùn)行在RAM里面的,所以會發(fā)現(xiàn)有時候Android用著用著就開始有點卡頓。
2.兩者后臺制度不同:IOS中任何第三方程序都不能在后臺運(yùn)行;安卓中任何程序都能在后臺運(yùn)行,直到?jīng)]有內(nèi)存才會關(guān)閉。
3.IOS中用于UI指令權(quán)限最高,安卓中數(shù)據(jù)處理指令權(quán)限最高。
6、IOS和Android的APP測試有什么區(qū)別?
1.物理按鍵:Android長按home鍵呼出應(yīng)用列表和切換應(yīng)用,然后右滑則終止應(yīng)用;iOS所有的返回上一層,只能靠頁面功能實現(xiàn)。
2.多分辨率測試:Android端20多種;IOS較少。
3.手機(jī)操作系統(tǒng):Android較多,IOS較少且不能降級,只能單向升級;新的IOS系統(tǒng)中的資源庫不能完全兼容低版本中的IOS系統(tǒng)中的應(yīng)用,低版本IOS系統(tǒng)中的應(yīng)用調(diào)用了新的資源庫,會直接導(dǎo)致閃退。
4.操作習(xí)慣:Android,Back鍵是否被重寫,測試點擊Back鍵后的反饋是否正確;應(yīng)用數(shù)據(jù)從內(nèi)存移動到SD卡后能否正常運(yùn)行等。
5.push測試:Android點擊home鍵,程序后臺運(yùn)行時,此時接收到push,點擊后喚醒應(yīng)用,此時是否可以正確跳轉(zhuǎn);IOS點擊home鍵關(guān)閉程序和屏幕鎖屏的情況(紅點的顯示)。
6.安裝卸載測試:Android可以通過手機(jī)自帶的應(yīng)用市場或者是第三方的手機(jī)助手進(jìn)行下載,下載和安裝的平臺和工具和渠道比較多;IOS主要有app store,iTunes和testflight下載。
7.升級測試:可以被升級的必要條件:新舊版本具有相同的簽名;新舊版本具有相同的包名;有一個標(biāo)示符區(qū)分新舊版本(如版本號)。
8.支付方式:對于一些有內(nèi)購功能的APP,Android直接調(diào)用第三方支付渠道完成支付;IOS需要先在APP store里綁定支付方式,然后通過APP store去完成支付操作。
9.消息推送機(jī)制:Android使用第三方或者自建平臺進(jìn)行消息推送;IOS的消息推送渠道由蘋果官方提供。
7、介紹一個APP抓包工具?
一般用Fiddler,主要用來做app抓包使用,先在Fiddler客戶端做好各項配置,端口設(shè)置為8888;然后在手機(jī)上設(shè)置代理,就可以抓包,主要看的是服務(wù)器返回的值、還能夠修改傳入?yún)?shù)、傳出的參數(shù)、模擬網(wǎng)絡(luò)延時,構(gòu)造不同場景。
8、APP日志如何抓???
可以使用adb命令:adb logcat | find "com.sankuai.meituan" >d:\test.txt
也可以用ddms抓取,手機(jī)連上電腦,打開ddms工具;
或者在Android Studio開發(fā)工具中,打開DDMS;
9、常用的adb命令有哪些?
1.查看幫助手冊列出所有的選項說明及子命令:
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è)備無響應(yīng),unknown:沒有連接設(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é)束和啟動adb服務(wù):adb kill-server /adb start-server , 結(jié)束 adb 服務(wù)/啟動 adb 服務(wù),通常兩個命令一起用,設(shè)備狀態(tài)異常時使用 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.查找包名/活動名
adb logcat | findstr START
10、adb三個組件是指?
ADB作為一個客戶端/服務(wù)器架構(gòu)的命令行工具,主要由3個部分組成。
adb clent(客戶端):可以通過它對Android應(yīng)用進(jìn)行安裝、卸載及調(diào)試。
adb service(服務(wù)器):管理客戶端到Android設(shè)備上abd后臺進(jìn)程的連接,負(fù)責(zé)管理client和damon進(jìn)行通信。
adb daemon(守護(hù)進(jìn)程):運(yùn)行在Android設(shè)備上的adb后臺進(jìn)程。
二、進(jìn)階篇
1、介紹一下Android四大組件?
Android四大基本組件:Activity、BroadcastReceiver廣播接收器、ContentProvider內(nèi)容提供者、Service服務(wù)。
Activity:應(yīng)用程序中,一個Activity就相當(dāng)于手機(jī)屏幕,它是一種可以包含用戶界面的組件,主要用于和用戶進(jìn)行交互。一個應(yīng)用程序可以包含許多活動,比如事件的點擊,一般都會觸發(fā)一個新的Activity。
BroadcastReceiver廣播接收器:應(yīng)用可以使用它對外部事件進(jìn)行過濾只對感興趣的外部事件(如當(dāng)電話呼入時,或者數(shù)據(jù)網(wǎng)絡(luò)可用時)進(jìn)行接收并做出響應(yīng)。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應(yīng)它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態(tài)欄上放一個持久的圖標(biāo),用戶可以打開它并獲取消息。
ContentProvider內(nèi)容提供者:內(nèi)容提供者主要用于在不同應(yīng)用程序之間實現(xiàn)數(shù)據(jù)共享的功能,它提供了一套完整的機(jī)制,允許一個程序訪問另一個程序中的數(shù)據(jù),同時還能保證被訪問數(shù)據(jù)的安全性。只有需要在多個應(yīng)用程序間共享數(shù)據(jù)時才需要內(nèi)容提供者。例如:通訊錄數(shù)據(jù)被多個應(yīng)用程序使用,且必須存儲在一個內(nèi)容提供者中。它的好處:統(tǒng)一數(shù)據(jù)訪問方式。
Service服務(wù):是Android中實現(xiàn)程序后臺運(yùn)行的解決方案,它非常適合去執(zhí)行那些不需要和用戶交互而且還要長期運(yùn)行的任務(wù)(一邊打電話,后臺掛著QQ)。服務(wù)的運(yùn)行不依賴于任何用戶界面,即使程序被切換到后臺,或者用戶打開了另一個應(yīng)用程序,服務(wù)仍然能夠保持正常運(yùn)行,不過服務(wù)并不是運(yùn)行在一個獨立的進(jìn)程當(dāng)中,而是依賴于創(chuàng)建服務(wù)時所在的應(yīng)用程序進(jìn)程。當(dāng)某個應(yīng)用程序進(jìn)程被殺掉后,所有依賴于該進(jìn)程的服務(wù)也會停止運(yùn)行(正在聽音樂,然后把音樂程序退出)。
2、Activity生命周期?
生命周期即活動從開始到結(jié)束所經(jīng)歷的各種狀態(tài),從一個狀態(tài)到另一個狀態(tài)的轉(zhuǎn)變,從無到有再到無,Activity本質(zhì)上有四種狀態(tài):
運(yùn)行(Active/Running):Activity處于活動狀態(tài),此時Activity處于棧頂,是可見狀態(tài),可以與用戶進(jìn)行交互。
暫停(Paused):當(dāng)Activity失去焦點時,或被一個新的非全面屏的Activity,或被一個透明的Activity放置在棧頂時,Activity就轉(zhuǎn)化為Paused狀態(tài)。此刻并不會被銷毀,只是失去了與用戶交互的能力,其所有的狀態(tài)信息及其成員變量都還在,只有在系統(tǒng)內(nèi)存緊張的情況下,才有可能被系統(tǒng)回收掉。
停止(Stopped):當(dāng)Activity被系統(tǒng)完全覆蓋時,被覆蓋的Activity就會進(jìn)入Stopped狀態(tài),此時已不在可見,但是資源還是沒有被收回。
系統(tǒng)回收(Killed):當(dāng)Activity被系統(tǒng)回收掉,Activity就處于Killed狀態(tài)。
如果一個活動在處于停止或者暫停的狀態(tài)下,系統(tǒng)內(nèi)存缺乏時會將其結(jié)束(finish)或者殺死(kill)。這種非正常情況下,系統(tǒng)在殺死或者結(jié)束之前會調(diào)用onSaveInstance()方法來保存信息,同時,當(dāng)Activity被移動到前臺時,重新啟動該Activity并調(diào)用onRestoreInstance()方法加載保留的信息,以保持原有的狀態(tài)。
在上面的四中常有的狀態(tài)之間,還有著其他的生命周期來作為不同狀態(tài)之間的過渡,用于在不同的狀態(tài)之間進(jìn)行轉(zhuǎn)換。
3、請介紹一下,Android SDK中自帶的幾個工具?
有如下幾個工具:
ddms:Dalvik Debug Monitor Service,是 Android 開發(fā)環(huán)境中的Dalvik[虛擬機(jī)]調(diào)試監(jiān)控服務(wù)。
monkey:Android中的一個命令行工具,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現(xiàn)對正在開發(fā)的應(yīng)用程序進(jìn)行壓力測試。
uiautomator:UIAutomator是Eclipse自帶的用于UI自動化測試工具,可仿真APP上的單擊、滑動、輸入文本等操作。
monitor:同uiautomator
adb:ADB的全稱為Android Debug Bridge,就是起到調(diào)試橋的作用。通過ADB我們可以在Eclipse中方面通過DDMS來調(diào)試Android程序,就是debug工具。
4、你所了解的APP測試工具?
常用的APP測試工具如下,,查看對應(yīng)工具地址。
APP自動化測試工具:
Appium
Airtest
uiautomator2(python)
APP穩(wěn)定性測試工具:
Monkey
MonkeyRunner
Maxim
UICrawler
APP性能測試工具:
GT
Perfdog
SoloPi
APP弱網(wǎng)測試&抓包工具:
QNET
Fiddler
Charles
APP兼容性測試工具:
TestIn
騰訊優(yōu)測
百度MTC
阿里MQC
APP安全測試工具:
OWASP ZAP
Drozer
MobSF
QARK
5、介紹一下冷啟動、暖啟動、熱啟動、首屏啟動?
APP啟動會發(fā)生多個事件,測試人員需要知道整個環(huán)節(jié)是否出現(xiàn)問題,需要了解到具體是哪個環(huán)節(jié)存在問題:
冷啟動:當(dāng)進(jìn)程不存在的時候,從進(jìn)程創(chuàng)建開始到界面的展示的過程;
暖啟動:有一部分資源已經(jīng)存在,進(jìn)程存在,相對于熱啟動要消耗更多資源。當(dāng)用戶退出應(yīng)用程序時,進(jìn)程還會存在,暖啟動相較于冷啟動只是少了進(jìn)程的創(chuàng)建;
熱啟動:大部分資源都在,只是應(yīng)用之間的切換;
首屏啟動:第一屏加載完整;
標(biāo)準(zhǔn):
冷啟動:需要5秒甚至更長;
暖啟動:需要2秒甚至更長;
熱啟動:需要1.5秒甚至更長;
整個啟動過程可以用adb工具進(jìn)行分析,利用adb logcat獲取啟動數(shù)據(jù),或者錄屏,使用ffmpeg拆幀分析。
首先定義一個變量,這個變量填寫用到的包名。
清除緩存數(shù)據(jù):
停止進(jìn)程:
通過以上命令就做好了冷啟動的環(huán)境,下面啟動app并獲取數(shù)據(jù)。啟動App
-S表示啟動之前先停止應(yīng)用進(jìn)程
-W是表示等待對應(yīng)的activity啟動完成
獲取數(shù)據(jù):
獲取的時間如下:
6、談?wù)剬鋯拥睦斫猓?br>
應(yīng)用的啟動可以分為冷啟動,熱啟動和溫啟動,而啟動最慢、耗時最長的就是冷啟動。
冷啟動開始時,系統(tǒng)會依次執(zhí)行三個任務(wù)去啟動APP:
加載和啟動應(yīng)用程序;
APP啟動后,立即創(chuàng)建一個空白的啟動Window;
創(chuàng)建APP的進(jìn)程;
在這三個任務(wù)執(zhí)行后,系統(tǒng)創(chuàng)建了應(yīng)用進(jìn)程,那么應(yīng)用進(jìn)程接下來會執(zhí)行下一步:
創(chuàng)建APP對象;
開啟一個主線程;
創(chuàng)建啟動頁的Activity;
加載View;
布局view到屏幕;
進(jìn)行初始繪制顯示視圖;
當(dāng)應(yīng)用進(jìn)程完成初始繪制之后,系統(tǒng)進(jìn)程用啟動頁的Activity來替換當(dāng)前顯示的空白Window,這個時刻用戶就可以使用App了。
作者:TestMadman
歡迎關(guān)注微信公眾號 :Python測試社區(qū)