1、Android四大組件
Android四大基本組件:Activity、BroadcastReceiver廣播接收器、ContentProvider內容提供者、Service服務。
Activity:應用程序中,一個Activity就相當於手機屏幕,它是一種可以包含用戶界面的組件,主要用於和用戶進行交互。一個應用程序可以包含許多活動,比如事件的點擊,一般都會觸發一個新的Activity。
BroadcastReceiver廣播接收器:應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它並獲取消息。
ContentProvider內容提供者:內容提供者主要用於在不同應用程序之間實現數據共享的功能,它提供了一套完整的機制,允許一個程序訪問另一個程序中的數據,同時還能保證被訪問數據的安全性。只有需要在多個應用程序間共享數據時才需要內容提供者。例如:通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處:統一數據訪問方式。
Service服務:是Android中實現程序后台運行的解決方案,它非常適合去執行那些不需要和用戶交互而且還要長期運行的任務(一邊打電話,后台掛着QQ)。服務的運行不依賴於任何用戶界面,即使程序被切換到后台,或者用戶打開了另一個應用程序,服務仍然能夠保持正常運行,不過服務並不是運行在一個獨立的進程當中,而是依賴於創建服務時所在的應用程序進程。當某個應用程序進程被殺掉后,所有依賴於該進程的服務也會停止運行(正在聽音樂,然后把音樂程序退出)。
2、代碼能力
1、請用自己最擅長的編程語言,將一個字符串反轉並輸出?
參考答案:
(1)python實現:
方法1、使用[::-1]:
s = 'python'print s[::-1]
方法2、使用reverse()方法:
l = list(s)l.reverse()print ''.join(l)
(2)java實現:
方法1、使用StringBuffer,一點技巧也沒有:
public String reverse(String s){ return new StringBuffer(s).reverse().toString(); }
方法2、靈活運用了字符串功能:
public String reverse(String s){ char[] letters=s.toCharArray(); char temp; int len=letters.length; for(int i=len/2-1;i>=0;i--){ temp=letters[i]; letters[i]=letters[len-1-i]; letters[len-1-i]=temp; } return new String(letters); }
2、針對數十個安卓應用市場渠道包,請問如何進行大體的功能驗證,簡單敘述一下思路?
參考答案:可以自動化遍歷某個目錄下面的所有渠道包apk,然后循環:安裝——》登錄——》**操作——》退出——卸載
3、測試思路
3、給你一個模塊,比如注冊模塊,你會怎么樣設計與執行測試?
參考答案:數據——》從哪里來(入口)——》到哪里去(出口)——》數據庫(檢驗數據的正確性)
4、你認為app測試過程中,相對於web,要更多注意哪些測試點?或者說app測試和web測試有哪些不同之處?
參考答案:
-
他們的主要區別在於具體測試的細節和方法有區別,比如:性能測試,在WEB測試只需要測試響應時間這個要素,在App測試中還需要考慮流量測試和耗電量測試。
-
安裝測試:WEB測試基本上沒有客戶端層面的安裝測試,但是App測試是存在客戶端層面的安裝測試,那么就具備相關的測試點。
-
交叉事件測試:就是在操作某個軟件的時候,來電話、來短信,電量不足提示等外部事件。
-
操作類型測試:如橫屏測試,手勢測試
-
網絡測試:包含弱網和網絡切換測試。需要測試弱網所造成的用戶體驗,重點要考慮回退和刷新是否會造成二次提交。弱網絡的模擬,據說可以用360wifi實現設置。主要是針對2G、3G、4G、wifi三種網絡環境進行測試 ;
-
兼容性測試:在WEB端是兼容瀏覽器,在App端兼容的是手機設備。而且相對應的兼容性測試工具也不相同,WEB因為是測試兼容瀏覽器,所以需要使用不同的瀏覽器進行兼容性測試(常見的是兼容IE6,IE8,chrome,firefox)如果是手機端,那么就需要兼容不同品牌,不同分辨率,不同android版本甚至不同操作系統的兼容。(常見的兼容方式是兼容市場占用率前N位的手機即可),有時候也可以使用到兼容性測試工具,但WEB兼容性工具多用IETester等工具,而App兼容性測試會使用Testin這樣的商業工具也可以做測試。
4、測試技術
5、說說會用哪些抓包工具?怎么用的?
參考答案:比如fiddler,主要用來做app抓包使用,先在fiddler客戶端做好各項配置,端口設置為8888,然后在手機上設置代理,就可以抓包了,主要看的是服務器返回的值、還能夠修改傳入參數、傳出的參數、模擬網絡延時,去構造不同場景。
6、app的日志如何抓取?
adb logcat | find "com.sankuai.meituan" >d:\hello.txt
也可以用ddms抓取,手機連上電腦,打開ddms工具,或者在Android Studio開發工具中,打開DDMS
7、你平常會看日志嗎, 一般會出現哪些異常(Exception)?
這個主要是面試官考察你會不會看日志,是不是看得懂java里面拋出的異常,Exception.一般面試中java Exception(runtimeException )是必會被問到的問題app崩潰的常見原因應該也是這些了。常見的異常列出四五種,是基本要求。常見的幾種如下:
-
NullPointerException - 空指針引用異常
-
ClassCastException - 類型強制轉換異常。
-
IllegalArgumentException - 傳遞非法參數異常。
-
ArithmeticException - 算術運算異常
-
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
-
IndexOutOfBoundsException - 下標越界異常
-
NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常
-
NumberFormatException - 數字格式異常
-
SecurityException - 安全異常
-
UnsupportedOperationException - 不支持的操作異常
8、什么是alpha測試和beta測試?
alpha測試:在公司場地,由員工主導的測試行為;beta測試:在客戶場地,由客戶主導進行的測試。
9、請寫出一個SQL來查詢分數前五5的所有人?
mysql:select * from 分數表 order by 分數 desc limit 5;
oracle:select top 5 * from 分數表 order by 分數 desc;
10、linux常用命令有哪些?
-
cd命令:切換到某個目錄
-
ls命令:列出當前目錄的所有文件、文件夾
-
pwd命令:列出當前目錄的路徑
-
cp命令:復制
-
mv命令:剪切
-
grep命令:管道
-
find命令:查找
-
rm命令:刪除
-
ps命令:查看進程
-
kill命令:殺掉某個進程
-
cat命令:查看某文件
-
tar命令:打包
-
chmod命令:賦權限
-
chown命令:改變文件的所有者
-
vim命令:文本編輯
11、請說明Android手機和IOS手機,系統有什么區別?
-
兩者運行機制不同:IOS采用的是沙盒運行機制,安卓采用的是虛擬機運行機制。
-
兩者后台制度不同:IOS中任何第三方程序都不能在后台運行;安卓中任何程序都能在后台運行,直到沒有內存才會關閉。
-
IOS中用於UI指令權限最高,安卓中數據處理指令權限最高。
12、請簡要介紹一下安卓系統四層架構?
從上到下,依次是:應用程序層——》應用程序框架層——》系統運行庫層——》Linux核心層
13、簡單介紹一下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工具。
14、常用的adb命令有哪些?請隨便寫一個monkey腳本,並解釋其中參數的含義?
參考答案:
adb devices、adb install、adb uninstall、adb shell pm 、adb shell am
adb shell monkey -p com.xiaoniu.finance -s 123 --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v -v -v 2000 > d:\xnonline-monkey-test1.txt
-
-p:app包名、
-
--throttle:每個操作的間隔時間,單位ms
-
--ignore-crashes:忽略崩潰
-
--ignore-timeouts:忽略超時
-
--ignore-security-exceptions:忽略安全異常
-
-v -v -v:日志詳細等級,3個v代表最詳細等級的日志
-
d:\xnonline-monkey-test1.txt:代表將產生的日志,放到本地PC的D盤,並命名為:xnonline-monkey-test1.txt
15、測試過程中遇到app出現crash或者ANR,你會怎么處理?
參考答案:可以先把日志過濾出來:adb logcat | findstr xxxxx(過濾日志信息) ,然后再搜索其中的關鍵字,比如:exception、crash,看看是那些方法或者異常導致了問題的發送,初步定位問題原因后,可以交給開發人員去具體查找深層原因並修復。
16、請簡單介紹一下使用過的安卓UI自動化測試工具?
參考答案:appium:是一個移動端的自動化框架,可用於測試原生應用,移動網頁應用和混合型應用,且是跨平台的。robotium:是一款國外的Android自動化測試框架,主要針對Android平台的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點擊、長按、滑動等)、查找和斷言機制的API,能夠對各種控件進行操作。
17、你覺得app的性能測試,即專項測試,需要重點關注哪些方面?
參考答案:內存、cpu占用、耗電量、流量、流暢度等。