一、Android四大元件
Android四大基本元件:Activity、BroadcastReceiver廣播接收器、ContentProvider内容提供者、Service服務。
Activity:
應用程式中,一個Activity就相當于手機螢幕,它是一種可以包含使用者界面的元件,主要用于和使用者進行互動。一個應用程式可以包含許多活動,比如事件的點選,一般都會觸發一個新的Activity。
BroadcastReceiver廣播接收器:
應用可以使用它對外部事件進行過濾隻對感興趣的外部事件(如當電話呼入時,或者資料網絡可用時)進行接收并做出響應。廣播接收器沒有使用者界面。然而,它們可以啟動一個activity或serice 來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀态欄上放一個持久的圖示,使用者可以打開它并擷取消息。
ContentProvider内容提供者:
内容提供者主要用于在不同應用程式之間實作資料共享的功能,它提供了一套完整的機制,允許一個程式通路另一個程式中的資料,同時還能保證被通路資料的安全性。隻有需要在多個應用程式間共享資料時才需要内容提供者。例如:通訊錄資料被多個應用程式使用,且必須存儲在一個内容提供者中。它的好處:統一資料通路方式。
Service服務:
是Android中實作程式背景運作的解決方案,它非常适合去執行那些不需要和使用者互動而且還要長期運作的任務(一邊打電話,背景挂着QQ)。服務的運作不依賴于任何使用者界面,即使程式被切換到背景,或者使用者打開了另一個應用程式,服務仍然能夠保持正常運作,不過服務并不是運作在一個獨立的程序當中,而是依賴于建立服務時所在的應用程式程序。當某個應用程式程序被殺掉後,所有依賴于該程序的服務也會停止運作(正在聽音樂,然後把音樂程式退出)。
二、代碼能力
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,然後循環:安裝——》登入——》**操作——》退出——解除安裝
三、測試思路
1、給你一個子產品,比如注冊子產品,你會怎麼樣設計與執行測試?
參考答案:資料——》從哪裡來(入口)——》到哪裡去(出口)——》資料庫(檢驗資料的正确性)
2、你認為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這樣的商業工具也可以做測試。
四、測試技術
1、說說會用哪些抓包工具?怎麼用的?
參考答案:比如fiddler,主要用來做app抓包使用,先在fiddler用戶端做好各項配置,端口設定為8888,然後在手機上設定代理,就可以抓包了,主要看的是伺服器傳回的值、還能夠修改傳入參數、傳出的參數、模拟網絡延時,去構造不同場景。
2、0app的日志如何抓取?
參考答案:adb logcat | find "com.sankuai.meituan" >d:\hello.txt
也可以用ddms抓取,手機連上電腦,打開ddms工具,或者在Android Studio開發工具中,打開DDMS
3、你平常會看日志嗎, 一般會出現哪些異常(Exception)?
參考答案:這個主要是面試官考察你會不會看日志,是不是看得懂java裡面抛出的異常,Exception.一般面試中java Exception(runtimeException )是必會被問到的問題
app崩潰的常見原因應該也是這些了。常見的異常列出四五種,是基本要求。
常見的幾種如下:
NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不相容對象異常
IndexOutOfBoundsException - 下标越界異常
NegativeArraySizeException - 建立一個大小為負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支援的操作異常
4、什麼是alpha測試和beta測試?
參考答案:alpha測試:在公司場地,由員工主導的測試行為;beta測試:在客戶場地,由客戶主導進行的測試。
5、請寫出一個SQL來查詢分數前五5的所有人?
參考答案:mysql:select * from 分數表 order by 分數 desc limit 5;
oracle:select top 5 * from 分數表 order by 分數 desc;
6、linux常用指令有哪些?
參考答案:cd指令:切換到某個目錄
ls指令:列出目前目錄的所有檔案、檔案夾
pwd指令:列出目前目錄的路徑
cp指令:複制
mv指令:剪切
grep指令:管道
find指令:查找
rm指令:删除
ps指令:檢視程序
kill指令:殺掉某個程序
cat指令:檢視某檔案
tar指令:打包
chmod指令:賦權限
chown指令:改變檔案的所有者
vim指令:文本編輯
7、請說明Android手機和IOS手機,系統有什麼差別?
參考答案:兩者運作機制不同:IOS采用的是沙盒運作機制,安卓采用的是虛拟機運作機制。
兩者背景制度不同:IOS中任何第三方程式都不能在背景運作;安卓中任何程式都能在背景運作,直到沒有記憶體才會關閉。
IOS中用于UI指令權限最高,安卓中資料處理指令權限最高。
8、請簡要介紹一下安卓系統四層架構?
參考答案:從上到下,依次是:應用程式層——》應用程式架構層——》系統運作庫層——》Linux核心層
9、簡單介紹一下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工具。
10、常用的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
11、測試過程中遇到app出現crash或者ANR,你會怎麼處理?
參考答案:可以先把日志過濾出來:adb logcat | findstr xxxxx(過濾日志資訊) ,然後再搜尋其中的關鍵字,比如:exception、crash,看看是那些方法或者異常導緻了問題的發送,初步定位問題原因後,可以交給開發人員去具體查找深層原因并修複。
12、請簡單介紹一下使用過的安卓UI自動化測試工具?
參考答案:appium:是一個移動端的自動化架構,可用于測試原生應用,移動網頁應用和混合型應用,且是跨平台的。
robotium:是一款國外的Android自動化測試架構,主要針對Android平台的應用進行黑盒自動化測試,它提供了模拟各種手勢操作(點選、長按、滑動等)、查找和斷言機制的API,能夠對各種控件進行操作。
13、你覺得app的性能測試,即專項測試,需要重點關注哪些方面?
參考答案:記憶體、cpu占用、耗電量、流量、流暢度等。
微信公衆号:程式員一凡