1. 給你一個模塊,比如注冊模塊,你會怎么樣設計與執行測試?
我會從四個方面來設計與執行測試
1.數據>從哪里來(入口)>到哪里去(出口)>數據庫(檢驗數據的正確性)
2.需求分析(輸入分析,處理分析,輸出分析),數據構造,編寫用例
??? ?輸入分析:長度,類型,組成規則,是否為空,是否重復
??? ?處理分析:正常處理,異常處理
??? ?輸出分析:前臺,后臺,數據
2. 針對數十個安卓應用市場渠道包,請問如何進行大體的功能驗證,簡單敘述一下思路?
可以自動化遍歷某個目錄下面的所有渠道包apk,然后循環:安裝>登錄>操作>退出>卸載
3. 你認為app測試過程中,相對于web,要更多注意哪些測試點?或者說app測試和web測試有哪些不同之處?
我認為app測試過程中,app測試與web測試還有很多不同之處,我認為他的不同之處體現在幾個方面,
1.“點擊加載更多”的分頁處理技術,是否有重復的數據,數據顯示是否完整,到達最后一頁后是否還有數據進行顯示;
2. 數據的排序方式;
3. 界面跳轉是否正確;
4. 出現異常情況是否有提示,是否跳轉到已經設定好的默認頁面,如斷網情況下,顯示網絡未連接,數據加載失敗,或者如果此頁面沒有數據顯示,顯示友好提示信息
5.圖片處理的地方,是否容易出現程序崩潰現象,主要是圖片壓縮機制;
6.前臺主動發出請求,后臺數據庫中是否存在相應的數據同時包括數據的關聯性(商家的會員進行下訂單,數據庫中生成一條訂單的記錄的同時,生成一條積分記錄,該會員的積分進行相應的變化)
7.手機app網絡環境測試重點:主要是針對2G、3G、4G、WIFI三種網絡環境進行測試;
8.手機app兼容性測試:主要是針對andriod各個系統版本進行測試,及測試屏幕分辨率進行測試;
4.說說會用哪些抓包工具?怎么用的?
比如fiddler,主要用來做app抓包使用,現在fiddler客戶端做好各項配置,端口設置為8888,然后在手機上設置代理,就可以抓包了,主要看的是服務器返回的值、還能夠修改傳入參數、傳出的參數、模擬網絡延遲,去構造不同場景。
5. Llinux常用命令有哪些?
cd命令:切換到某個目錄
ls命令:列出當前目錄的所有文件、文件夾pwd命令:列出當前目錄的路徑
cp命令:復制
mv命令:剪切
grep命令:管道
find命令:查找
rm命令:刪除
ps命令:查看進程
kill命令:殺掉某個進程
cat命令:查看某文件
tar命令:打包
chmod命令:賦權限?
chown命令:改變文件的所有者
vim命令:文本編輯
tail -f:查看日志?????????????
netstat -aux:查看狀態
5.請說明andriod手機和ios手機,系統有什么區別?
1.兩種運行機制不同:IOS采用的是沙盒運行機制,安卓采用的是虛擬機運行機制。
2. 兩者后臺制度不同:IOS中任何第三方程序都不能在后臺運行;安卓中任何程序都能在后臺運行,直到沒有內存才會關閉。
3.IOS中用于UI指令權限最高,安卓中數據處理指令權限最高
6. 請簡要介紹一下安卓系統四層架構?
從上到下,依次是:應用程序層—應用程序框架層—系統運行庫層—linux核心層
7.簡單介紹一下Android SDK中自帶的幾個工具/命令的功能?
ddms:Dalvik Debug Monitor Service,是 Android 開發環境中的Dalvik[虛擬機]調試監控服務。
monkey:Android中的一個命令行工具,可以運行在模擬器里或實際設備中。它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試。
uiautomator:UIAutomator是Eclipse自帶的用于UI自動化測試工具,可仿真APP上的單擊、滑動、輸入文本等操作。
monitor:同uiautomator
adb:ADB的全稱為Android Debug Bridge,就是起到調試橋的作用。通過ADB我們可以在Eclipse中方面通過DDMS來調試Android程序,就是debug工具。
8.什么是activity
Activity是Android的四大組件之一,也是平時我們用到最多的一個組件,可以用來顯示View。
Activity是一個Android的應用組件,它提供屏幕進行交互。每個Activity都會獲得一個用于繪制其用戶界面的窗口,窗口可以充滿哦屏幕也可以小于屏幕并浮動在其他窗口之上。
9.activity
Activity本質上有四種狀態:
1.運行(Active/Running):Activity處于活動狀態,此時Activity處于棧頂,是可見狀態,可以與用戶進行交互
2.暫停(Paused):當Activity失去焦點時,或被一個新的非全面屏的Activity,或被一個透明的Activity放置在棧頂時,Activity就轉化為Paused狀態。此刻并不會被銷毀,只是失去了與用戶交互的能力,其所有的狀態信息及其成員變量都還在,只有在系統內存緊張的情況下,才有可能被系統回收掉
3.停止(Stopped):當Activity被系統完全覆蓋時,被覆蓋的Activity就會進入Stopped狀態,此時已不在可見,但是資源還是沒有被收回
4.系統回收(Killed):當Activity被系統回收掉,Activity就處于Killed狀態
10.Android四大組件
Android四大基本組件:Activity、BroadcastReceiver廣播接收器、ContentProvider內容提供者、Service服務。
Activity:
應用程序中,一個Activity就相當于手機屏幕,它是一種可以包含用戶界面的組件,主要用于和用戶進行交互。一個應用程序可以包含許多活動,比如事件的點擊,一般都會觸發一個新的Activity。
BroadcastReceiver廣播接收器:
應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收并做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它并獲取消息。
ContentProvider內容提供者:
內容提供者主要用于在不同應用程序之間實現數據共享的功能,它提供了一套完整的機制,允許一個程序訪問另一個程序中的數據,同時還能保證被訪問數據的安全性。只有需要在多個應用程序間共享數據時才需要內容提供者。例如:通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處:統一數據訪問方式。
Service服務:
是Android中實現程序后臺運行的解決方案,它非常適合去執行那些不需要和用戶交互而且還要長期運行的任務(一邊打電話,后臺掛著QQ)。服務的運行不依賴于任何用戶界面,即使程序被切換到后臺,或者用戶打開了另一個應用程序,服務扔然能夠保持正常運行,不過服務并不是運行在一個獨立的進程當中,而是依賴于創建服務時所在的應用程序進程。當某個應用程序進程被殺掉后,所有依賴于該進程的服務也會停止運行(正在聽音樂,然后把音樂程序退出)。
11.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下修改了服務器端,意味著客戶端用戶所使用的核心版本都需要進行回歸測試一遍。
還有升級測試:升級測試的提醒機制,升級取消是否會影響原有功能的使用,升級后用戶數據是否被清除了。
12.android和ios測試區別?
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等
13.app出現ANR,是什么原因導致的?
那么導致ANR的根本原因是什么呢?簡單的總結有以下兩點:
1.主線程執行了耗時操作,比如數據庫操作或網絡編程
2.其他進程(就是其他程序)占用CPU導致本進程得不到CPU時間片,比如其他進程的頻繁讀寫操作可能會導致這個問題。
細分的話,導致ANR的原因有如下幾點:
1.耗時的網絡訪問w
2.大量的數據讀寫
3.數據庫操作
4.硬件操作(比如camera)
5.調用thread的join()方法、sleep()方法、wait()方法或者等待線程鎖的時候
6.service binder的數量達到上限
7.system server中發生WatchDog ANR
8.service忙導致超時無響應
9.其他線程持有鎖,導致主線程等待超時
10.其它線程終止或崩潰導致主線程一直等待。
14.App出現crash原因有哪些?
1.內存管理錯誤?:可能是可用內存過低,app所需的內存超過設備的限制,app跑不起來導致App crash。
或是內存泄露,程序運行的時間越長,所占用的內存越大,最終用盡全部內存,導致整個系統崩潰。
亦或非授權的內存位置的使用也可能會導致App crash。
2.程序邏輯錯誤:?數組越界、堆棧溢出、并發操作、邏輯錯誤。
e.g. app新添加一個未經測試的新功能,調用了一個已釋放的指針,運行的時候就會crash。
3.?設備兼容:由于設備多樣性,app在不同的設備上可能會有不同的表現。
?4.網絡因素:可能是網速欠佳,無法達到app所需的快速響應時間,導致app crash。或者是不同網絡的切換也可能會影響app的穩定性。
15.app對于不穩定偶然出現anr和crash時候你是怎么處理的?
方法一:app開發保存錯誤日志到本地
一般app開發在debug版本,出現anr和crash的時候會自動把日志保存到本地實際的sd卡上,去對應的app目錄取出來就可以了
方法二:實時抓取
當出現偶然的crash時候,這時候可以把手機拉到你們app開發那,手機連上他的開發代碼的環境,有ddms會抓日志,這時候出現crash就會記錄下來日志。
盡量重復操作讓bug復現就可以了
方法三:第三方sdk統計工具
一般接入了第三方統計sdk,比如友盟統計,在友盟的后臺會抓到報錯的日志
16.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
16.你平常會看日志嗎, 一般會出現哪些異常(Exception)?
這個主要是面試官考察你會不會看日志,是不是看得懂java里面拋出的異常,Exception
一般面試中java Exception(runtimeException )是必會被問到的問題
app崩潰的常見原因應該也是這些了。常見的異常列出四五種,是基本要求。
常見的幾種如下:
NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標越界異常
NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支持的操作異常
17.app 出現 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.其它線程終止或崩潰導致主線程一直等待。
18.你覺得app的性能測試,即專項測試,需要重點關注那些方面?
內存、cpu占用、耗電量、流量等
19.安卓的常用命令?
adb: Andriod Debug Bridge
adb devices:查看設備
adb kill-server:關閉adb的后臺進程
adb tcpip:讓Andriod脫離USB線的TCP連接方式
adb connect:連接開啟了TCP連接方式的手機
adb logcat:Andriod日志查看
adb bugreport:收集日志數據,用于后續的分析,比如耗電量
20.簡單的自動化工具input命令
text<string>(Defaulut:touchscreen)
keyevent[--longpress]<key code number or name>...(Default:keyboard)
tap <x><y>(Defalut:touchscreen)
swip<x1><y1><x2><x2><y2>[duration(ms)](Default:touchscreen)
draganddrop<x1><y1><x2><y2>[duration(ms)](Default:touchscreen)
press(Default:trackball)
roll<dx><dy>(Defalut:trackball)
21.Andriod性能統計dumpsys
獲取所有的dumpsys子命令dumpsys|grep i DUMP
獲取當前 activity adb shell dumpsys activity top
獲取activity的記錄,可以獲取到appuim依賴的原始activity dumpsys activity activities
獲取特定包基本信息 adb shell dumpsys pakage com.xueqiu.andriod
獲取系統通知 adb shell dumpsys notifcation
獲取內存信息 adb shell dumpsys meminfo com.andriod.settings
獲取cpu信息 adb shell dumpsys cpuinfo
獲取gpu繪制分析 adb shell dumpsys gfxinfo com.andriod.settings
獲取短信 adb shell dumpsys activity broadcasts|grep senderName=?