標籤:
章節:自動化基礎篇——百度Cafe原理初步(第八講)
金陽光測試官網:
http://www.goldensunshine.cc/forum.php?mod=viewthread&tid=20&extra=page%3D2
主要講解內容及筆記:
一、Cafe原理
Cafe是一款自動化測試架構,解決問題:跨進程測試、快速深度測試
官網:http://baiduqa.github.io/Cafe/
Cafe provides the following benefits:
* You can develop test cases across processes by operating them via Cafe.
* You can get & set system state without changed tested application, such as open or close wifi. ——利用android4.2的一個系統漏洞,4.2以上的版本補上了這個漏洞,該項功能應該就失效了
* You can get & set fields of tested objects even invoke functions by calling api.
* The framework can handle system running log for some non-ui check point.
* You can do application UI depth-first travel automated by invoking only one api.
* You can record hand-operations to cafe code and replay it even at another phone or others version android.
二、核心技術
1、跨進程——AIDL分析
AIDL(Android Interface Definition Language——安卓介面定義語言)
AIDL與其他的介面定義語言類似,它允許你定義編程介面,使用處理序間通訊(Interprocess Communication,簡稱IPC)來使得client和server之間能夠通訊。安卓系統中的進程之間不能共用記憶體,因此需要定義一些機制在不同進程間進行資料通訊。
建立AIDL服務的步驟(摘自百度,還得自己試一下,內容不理解)——————
建立AIDL服務要比建立普通的服務複雜一些,具體步驟如下:(1)在Eclipse Android工程的Java包目錄中建立一個副檔名為aidl的檔案。該檔案的文法類似於Java代碼,但會稍有不同。(2)如果aidl檔案的內容是正確的,ADT會自動產生一個Java介面檔案(*.java)。(3)建立一個服務類(Service的子類)。(4)實現由aidl檔案產生的Java介面。(5)在AndroidManifest.xml檔案中配置AIDL服務,尤其要注意的是,<action>標籤中android:name的屬性值就是用戶端要引用該服務的ID,也就是Intent類的參數值。 2、利用漏洞提升許可權 System許可權的應用情境:-設定系統時間、系統屬性-重啟adb、重啟手機 利用安卓簽名檢查漏洞(ZipFile.java)首先說明一下什麼是安卓簽名檢查漏洞?(具體見:http://www.isucc.me/390.html)其實就是zip壓縮包(apk本來就是zip壓縮包)允許統一路徑下存在多個同名檔案的特性導致的,然後程式檢查簽名呢,是會檢查最後一個,但是解壓程式,安卓系統負載檔案的時候又是走的前面的那個(只要保證新檔案在原來檔案的檔案流靠前的位置即可),危害很大,所以安卓4.2之後的系統就修複了這個漏洞 -在沒有platform簽名的情況下修改Settings.apk的代碼邏輯-普適性:安卓1.6-4.2都存在這個漏洞,可用作測試提權-zip允許同名檔案存在,第一個是修改的class.dex,第二個是原來的class.dex-利用安裝簽名校正時,同名檔案只會校正最後面那個 其他技術:架構用法-可以不啟動instrument,通過intent即可調用cafe.apk中的介面例子不懂,等自己試了回來補充 -get和set方法:擷取系統屬性,用到了java的反射機制(不懂,查!!!)-遍曆最佳化演算法:local.traveler() 三、demo示範這個要自己去跑,注意的就是:簽名要一致,否則就無法用,這個跟Robotium一致,就是說你所要測試的程式和testapk的簽名得一致,然後這個testapk才能在所測試的程式上跑 四、源碼分析1、com.baidu.cafe.remote——IRemoteArms.aidl(所有的跟安卓操作相關的都定義了擷取操作)2、com.baidu.cafe.local.traveler——AppTraveler.java(改進了monkey的遍曆演算法,避免了monkey裡面的死迴圈)3、錄製器(可以自己試一下,用自家程式試試,哈哈!!)-基於hook的錄製原理(windows上面有hook啊,而且現在很多程式會利用hook來寫驅動啥的,導致根本卸載不了)-UI遍曆測試4、com.baidu.cafe.local——LocalLib.java(searchTextFromParent,找到父控制項,然後就能找到所嵌套的子控制項,用的反射的原理:具體程式是com.baidu.cafe.remote裡的ReflectHelper.java)註:動態產生的視圖也是可以getview的5、產生報告(android-junit-report-x.x.x.jar)——這個我可以用在我的Robotium的程式裡,產生report啊6、因為對Robotium做了封裝,可以直接在裡面用Robotium的東西,solo啊solo啊 五、cafe的優點和缺點 優點:失敗時自動化的測試用例截取logcat日誌自動產生Junit Report Xml擷取應用當前的幀率(比如“英雄聯盟”的程式,在同等情況下,幀率越高程式效能越好,類似程式或者視頻的這種需要用到)擷取當前的tcp發送和接收流量(新聞、視頻啊之類的,尤其是在使用了3G流量的情況下)使用root許可權執行shell(在已root的系統上?root之後就可以提權) 缺點:安卓4.2以上系統反簽名有問題(最新版本也沒有修複?)指令碼編寫人會junit+java(java在學,junit其實用到了一點,系統的知識還是需要查一下)不去封裝穩定版本的uiautomator(所以還是需要看一下uiautomator的架構,熟悉和理解Uiautomator和Robotium的架構) 1、官網:www.goldensunshine.cc
2、百度搜:金陽光測試,找到金陽光學習資料和官網、視頻。
3、官方新浪微博:金陽光woody
4、官方qq:212260449
6、官方YY教育頻道:74894998
7、官方CSDN技術資料:http://blog.csdn.net/haorenmin2008
【金陽光測試】Android自動化 -- 學習曆程:百度Cafe原理