前言
現在面試個測試崗位,都是要求全能的,web、接口、app啥都要會測,那么APP測試一般需要哪些技能呢?
面試app測試崗位會被問到哪些問題,怎樣讓面試管覺得你對APP測試很精通的樣子?
本篇總結了app測試面試時候經常被問的10個相關問題
1.什么是activity?
2.Activity生命周期?
3.Android四大組件?
4.app測試和web測試有什么區別?
5.android和ios測試區別?
6.app出現ANR,是什么原因導致的?
7.App出現crash原因有哪些?
8.app對於不穩定偶然出現anr和crash時候你是怎么處理的?
9.app的日志如何抓取?
10.你平常會看日志嗎, 一般會出現哪些異常(Exception)?
1.什么是activity
什么是activity,這個前兩年出去面試APP測試崗位,估計問的最多了,特別是一些大廠,先問你是不是做過APP測試,那好,你說說什么是activity?
如果沒看過android的開發原理,估計這個很難回答,要是第一個問題就被難住了,面試的信心也會失去一半了,士氣大減。
Activity是Android的四大組件之一,也是平時我們用到最多的一個組件,可以用來顯示View。
官方的說法是Activity一個應用程序的組件,它提供一個屏幕來與用戶交互,以便做一些諸如打電話、發郵件和看地圖之類的事情,原話如下:
An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.
Activity是一個Android的應用組件,它提供屏幕進行交互。每個Activity都會獲得一個用於繪制其用戶界面的窗口,窗口可以充滿哦屏幕也可以小於屏幕並浮動在其他窗口之上。
一個應用通常是由多個彼此松散聯系的Activity組成,一般會指定應用中的某個Activity為主活動,也就是說首次啟動應用時給用戶呈現的Activity。將Activity設為主活動的方法
當然Activity之間可以進行互相跳轉,以便執行不同的操作。每當新Activity啟動時,舊的Activity便會停止,但是系統會在堆棧也就是返回棧中保留該Activity。
當新Activity啟動時,系統也會將其推送到返回棧上,並取得用戶的操作焦點。當用戶完成當前Activity並按返回按鈕是,系統就會從堆棧將其彈出銷毀,然后回復前一Activity
當一個Activity因某個新Activity啟動而停止時,系統會通過該Activity的生命周期回調方法通知其這一狀態的變化。
Activity因狀態變化每個變化可能有若干種,每一種回調都會提供執行與該狀態相應的特定操作的機會
2.Activity生命周期?
周期即活動從開始到結束所經歷的各種狀態。生命周期即活動從開始到結束所經歷的各個狀態。從一個狀態到另一個狀態的轉變,從無到有再到無,這樣一個過程中所經歷的狀態就叫做生命周期。
Activity本質上有四種狀態:
1.運行(Active/Running):Activity處於活動狀態,此時Activity處於棧頂,是可見狀態,可以與用戶進行交互
2.暫停(Paused):當Activity失去焦點時,或被一個新的非全面屏的Activity,或被一個透明的Activity放置在棧頂時,Activity就轉化為Paused狀態。此刻並不會被銷毀,只是失去了與用戶交互的能力,其所有的狀態信息及其成員變量都還在,只有在系統內存緊張的情況下,才有可能被系統回收掉
3.停止(Stopped):當Activity被系統完全覆蓋時,被覆蓋的Activity就會進入Stopped狀態,此時已不在可見,但是資源還是沒有被收回
4.系統回收(Killed):當Activity被系統回收掉,Activity就處於Killed狀態
如果一個活動在處於停止或者暫停的狀態下,系統內存缺乏時會將其結束(finish)或者殺死(kill)。這種非正常情況下,系統在殺死或者結束之前會調用onSaveInstance()方法來保存信息,同時,當Activity被移動到前台時,重新啟動該Activity並調用onRestoreInstance()方法加載保留的信息,以保持原有的狀態。
在上面的四中常有的狀態之間,還有着其他的生命周期來作為不同狀態之間的過度,用於在不同的狀態之間進行轉換,生命周期的具體說明見下。
原文:https://blog.csdn.net/fjnu_se/article/details/80703815
3.Android四大組件
Android四大基本組件:Activity、BroadcastReceiver廣播接收器、ContentProvider內容提供者、Service服務。
Activity:
應用程序中,一個Activity就相當於手機屏幕,它是一種可以包含用戶界面的組件,主要用於和用戶進行交互。一個應用程序可以包含許多活動,比如事件的點擊,一般都會觸發一個新的Activity。
BroadcastReceiver廣播接收器:
應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它並獲取消息。
ContentProvider內容提供者:
內容提供者主要用於在不同應用程序之間實現數據共享的功能,它提供了一套完整的機制,允許一個程序訪問另一個程序中的數據,同時還能保證被訪問數據的安全性。只有需要在多個應用程序間共享數據時才需要內容提供者。例如:通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處:統一數據訪問方式。
Service服務:
是Android中實現程序后台運行的解決方案,它非常適合去執行那些不需要和用戶交互而且還要長期運行的任務(一邊打電話,后台掛着QQ)。服務的運行不依賴於任何用戶界面,即使程序被切換到后台,或者用戶打開了另一個應用程序,服務扔然能夠保持正常運行,不過服務並不是運行在一個獨立的進程當中,而是依賴於創建服務時所在的應用程序進程。當某個應用程序進程被殺掉后,所有依賴於該進程的服務也會停止運行(正在聽音樂,然后把音樂程序退出)。
原文:https://blog.csdn.net/m0_37989980/article/details/78681367
4.app測試和web測試有什么區別?
WEB測試和App測試從流程上來說,沒有區別。
都需要經歷測試計划方案,用例設計,測試執行,缺陷管理,測試報告等相關活動。
從技術上來說,WEB測試和APP測試其測試類型也基本相似,都需要進行功能測試、性能測試、安全性測試、GUI測試等測試類型。
他們的主要區別在於具體測試的細節和方法有區別,比如:性能測試,在WEB測試只需要測試響應時間這個要素,在App測試中還需要考慮流量測試和耗電量測試。
兼容性測試:在WEB端是兼容瀏覽器,在App端兼容的是手機設備。而且相對應的兼容性測試工具也不相同,WEB因為是測試兼容瀏覽器,所以需要使用不同的瀏覽器進行兼容性測試(常見的是兼容IE6,IE8,chrome,firefox)如果是手機端,那么就需要兼容不同品牌,不同分辨率,不同android版本甚至不同操作系統的兼容。(常見的兼容方式是兼容市場占用率前N位的手機即可),有時候也可以使用到兼容性測試工具,但WEB兼容性工具多用IETester等工具,而App兼容性測試會使用Testin這樣的商業工具也可以做測試。
安裝測試:WEB測試基本上沒有客戶端層面的安裝測試,但是App測試是存在客戶端層面的安裝測試,那么就具備相關的測試點。
還有,App測試基於手機設備,還有一些手機設備的專項測試。如交叉事件測試,操作類型測試,網絡測試(弱網測試,網絡切換)
交叉事件測試:就是在操作某個軟件的時候,來電話、來短信,電量不足提示等外部事件。
操作類型測試:如橫屏測試,手勢測試
網絡測試:包含弱網和網絡切換測試。需要測試弱網所造成的用戶體驗,重點要考慮回退和刷新是否會造成二次提交。弱網絡的模擬,據說可以用360wifi實現設置。
從系統架構的層面,WEB測試只要更新了服務器端,客戶端就會同步會更新。而且客戶端是可以保證每一個用戶的客戶端完全一致的。但是APP端是不能夠保證完全一致的,除非用戶更新客戶端。如果是APP下修改了服務器端,意味着客戶端用戶所使用的核心版本都需要進行回歸測試一遍。
還有升級測試:升級測試的提醒機制,升級取消是否會影響原有功能的使用,升級后用戶數據是否被清除了。
原文地址:https://www.cnblogs.com/laoluoits/p/5673291.html
5.android和ios測試區別?
App測試中ios和Android有哪些區別呢?
1.Android長按home鍵呼出應用列表和切換應用,然后右滑則終止應用;
2.多分辨率測試,Android端20多種,ios較少;
3.手機操作系統,Android較多,ios較少且不能降級,只能單向升級;新的ios系統中的資源庫不能完全兼容低版本中的ios系統中的應用,低版本ios系統中的應用調用了新的資源庫,會直接導致閃退(Crash);
4.操作習慣:Android,Back鍵是否被重寫,測試點擊Back鍵后的反饋是否正確;應用數據從內存移動到SD卡后能否正常運行等;
5.push測試:Android:點擊home鍵,程序后台運行時,此時接收到push,點擊后喚醒應用,此時是否可以正確跳轉;ios,點擊home鍵關閉程序和屏幕鎖屏的情況(紅點的顯示);
6.安裝卸載測試:Android的下載和安裝的平台和工具和渠道比較多,ios主要有app store,iTunes和testflight下載;
7.升級測試:可以被升級的必要條件:新舊版本具有相同的簽名;新舊版本具有相同的包名;有一個標示符區分新舊版本(如版本號),
對於Android若有內置的應用需檢查升級之后內置文件是否匹配(如內置的輸入法)
另外:對於測試還需要注意一下幾點:
1.並發(中斷)測試:鬧鈴彈出框提示,另一個應用的啟動、視頻音頻的播放,來電、用戶正在輸入等,語音、錄音等的播放時強制其他正在播放的要暫停;
2.數據來源的測試:輸入,選擇、復制、語音輸入,安裝不同輸入法輸入等;
3.push(推送)測試:在開關機、待機狀態下執行推送,消息先死及其推送跳轉的正確性;
應用在開發、未打開狀態、應用啟動且在后台運行的情況下是push顯示和跳轉否正確;
推送消息閱讀前后數字的變化是否正確;
多條推送的合集的顯示和跳轉是否正確;
4.分享跳轉:分享后的文案是否正確;分享后跳轉是否正確,顯示的消息來源是否正確;
5.觸屏測試:同時觸摸不同的位置或者同時進行不同操作,查看客戶端的處理情況,是否會crash等
原文鏈接:https://www.jianshu.com/p/91d7acfb036e
6.app出現ANR,是什么原因導致的?
那么導致ANR的根本原因是什么呢?簡單的總結有以下兩點:
1.主線程執行了耗時操作,比如數據庫操作或網絡編程
2.其他進程(就是其他程序)占用CPU導致本進程得不到CPU時間片,比如其他進程的頻繁讀寫操作可能會導致這個問題。
細分的話,導致ANR的原因有如下幾點:
1.耗時的網絡訪問
2.大量的數據讀寫
3.數據庫操作
4.硬件操作(比如camera)
5.調用thread的join()方法、sleep()方法、wait()方法或者等待線程鎖的時候
6.service binder的數量達到上限
7.system server中發生WatchDog ANR
8.service忙導致超時無響應
9.其他線程持有鎖,導致主線程等待超時
10.其它線程終止或崩潰導致主線程一直等待。
原文:https://blog.csdn.net/jaychou_maple/article/details/78782822
7.App出現crash原因有哪些?
為什么App會出現崩潰呢?百度了一下,查到和App崩潰相關的幾個因素:內存管理錯誤,程序邏輯錯誤,設備兼容,網絡因素等,如下:
1.內存管理錯誤:可能是可用內存過低,app所需的內存超過設備的限制,app跑不起來導致App crash。
或是內存泄露,程序運行的時間越長,所占用的內存越大,最終用盡全部內存,導致整個系統崩潰。
亦或非授權的內存位置的使用也可能會導致App crash。
2.程序邏輯錯誤:數組越界、堆棧溢出、並發操作、邏輯錯誤。
e.g. app新添加一個未經測試的新功能,調用了一個已釋放的指針,運行的時候就會crash。
3.設備兼容:由於設備多樣性,app在不同的設備上可能會有不同的表現。
4.網絡因素:可能是網速欠佳,無法達到app所需的快速響應時間,導致app crash。或者是不同網絡的切換也可能會影響app的穩定性。
原文:https://blog.csdn.net/yangtuxiaojie/article/details/47123243
8.app對於不穩定偶然出現anr和crash時候你是怎么處理的?
app偶然出現anr和crash是比較頭疼的問題,由於偶然出現無法復現步驟,這也是一個測試人員必備的技能,需要抓日志。查看日志主要有3個方法:
方法一:app開發保存錯誤日志到本地
一般app開發在debug版本,出現anr和crash的時候會自動把日志保存到本地實際的sd卡上,去對應的app目錄取出來就可以了
方法二:實時抓取
當出現偶然的crash時候,這時候可以把手機拉到你們app開發那,手機連上他的開發代碼的環境,有ddms會抓日志,這時候出現crash就會記錄下來日志。
盡量重復操作讓bug復現就可以了
也可以自己開着logcat,保存日志到電腦本地,參考這篇:https://www.cnblogs.com/yoyoketang/p/9101365.html
adb logcat | find "com.sankuai.meituan" >d:\hello.txt
方法三:第三方sdk統計工具
一般接入了第三方統計sdk,比如友盟統計,在友盟的后台會抓到報錯的日志
9.app的日志如何抓取?
app本身的日志,可以用logcat抓取,參考這篇:https://www.cnblogs.com/yoyoketang/p/9101365.html
adb logcat | find "com.sankuai.meituan" >d:\hello.txt
也可以用ddms抓取,手機連上電腦,打開ddms工具,或者在Android Studio開發工具中,打開DDMS
關於ddms更多的功能,參考這篇:https://www.cnblogs.com/gaobig/p/5029381.html
10.你平常會看日志嗎, 一般會出現哪些異常(Exception)?
這個主要是面試官考察你會不會看日志,是不是看得懂java里面拋出的異常,Exception
一般面試中java Exception(runtimeException )是必會被問到的問題
app崩潰的常見原因應該也是這些了。常見的異常列出四五種,是基本要求。
常見的幾種如下:
NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標越界異常
NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支持的操作異常
交流QQ群:779429633