Android及Robotium學習總結【環境變數,真機除錯及根據id模擬按鍵】
Keyword:Android,Robotium,自動化測試,黑盒測試,已知id如何模擬按鍵
純屬愛好,最近學習了Android及其自動化測試,總算對Android有了個大概的瞭解。
畢業後就是用的C,從未用過java,並且最近4年幾乎沒怎麼摸過程式碼,現在學習android還是有點費勁;不過還好,自我覺得理解的很快,別人碰到的問題我都碰到了,很多網上都有答案。其中一個問題折騰了我好幾天,網上也沒有完整的答案,憑著自己摸索,試,總算搞定了,後面一一介紹。
關於android的環境搭建,及robotium的測試方法網上的介紹很多,在此不再一一贅述。這裡只對一些關鍵點做一些總結,介紹常見問題的解決辦法等等。
1. 需要設定的環境變數
ANDROID_HOME=D:\Android\android-sdks
ANDROID_SDK_HOME=D:\Android\avd
JAVA_HOME= C:\Program Files\Java\jdk1.7.0_05
CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
PATH=...;(追加)%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%
注意,環境設定後重啟電腦才生效。
如果知道環境變數是否生效?例如檢視ANDROID_HOME環境變數的設定,開始->執行->cmd,在cmd下面輸入echo % ANDROID_HOME%,如果與我們預期的一致就說明生效了。如果原樣輸出% ANDROID_HOME%就說明環境變數未生效,需要重啟作業系統。
詳細說明如下
1.1 ANDROID_HOME
ANDROID_HOME=D:\Android\android-sdks,指定sdk包含的位置,什麼是sdk?網上去搜,簡單點說就是裡面要包含AVD Manager和SDK Manager:
同時,eclipse也要設定SDK的位置,最好和ANDROID_HOME設定一樣,如下
1.2 ANDROID_SDK_HOME
ANDROID_SDK_HOME設定的是avd的路徑,一般預設在使用者路徑下,例如C:\Users\tanggod\.android,SD卡的空間都是從這裡分配的。可以挪到其他目錄下,需要在環境變數裡面設定如下:
ANDROID_SDK_HOME=D:\Android\avd
如此設定後(重啟電腦讓環境變數生效 ),以後建立的AVD就會在我們指定的目錄下了:
JDK,JAVA_HOME必須設定jdk安裝的目錄,例如:
JAVA_HOME= C:\ProgramFiles\Java\jdk1.7.0_05
C:\ProgramFiles\Java\jdk1.7.0_05
檢視JDK版本號?在cmd下面輸入:Java -version
PS:1.7的jdk似乎還很不穩定,有問題,建議用1.6的。
jdk下載位置:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
1.4 CLASSPATH
classpath環境變數,是當我們在開發java程式時需要引用別人寫好的類時,要讓java直譯器知道到哪裡去找這個類。通常,sun為我們提供了一些額外的豐富的類包,一個是dt.jar,一個是tools.jar,這兩個jar包都位於C:\jdk1.6.0\lib目錄下,所以通常我們都會把這兩個jar包加到我們的classpath環境變數中setclasspath=.;C:\jdk1.6.0\lib\tools.jar;C:\jdk1.6.0\lib\dt.jar。在系統環境變數那一欄中點->新建classpath
變數名:classpath
變數值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;(注意,CLASSPATH最前面是有個“.”的,表示當前目錄,這樣當我們執行java
AClass的時候,系統就會先在當前目錄尋找AClass檔案了。);
1.5 PATH
環境變數PATH設定的時候,注意是追加,不能將已有的內容清空了。
PATH = %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%
主要設定的是adb.exe和emulator的位置(在tools或者platform-tools目錄中),已經jdk工具的路徑等等。
2. 如何簽名Sign
Android系統要求每一個Android應用程式必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程式沒有經過數字簽名,是沒有辦法安裝到系統中的!
為了方便我們開發除錯程式,ADT會自動的使用debug金鑰為應用程式簽名。debug金鑰?它在哪?debug金鑰是一個名為debug.keystore的檔案,它的位置:Ubuntu:~/.android/debug.keystore (win7:c:/user/.Android/debug.keystore; xp: C:/Documentsand Settings/user/.Android/debug.keystore),“user”對應於你自己的windows作業系統使用者名稱,這也就意味著,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個屬於自己的金鑰檔案(*.keystore)
用Robotium做黑盒測試的時候,需要對待測試的apk去除簽名,然後自己再簽名。google網站上有個簽名工具叫做re-sign.jar,比較傻瓜化,直接將apk拖入到re-sign.jar中後自動去除簽名,重新再簽名;很多人都建議用這個工具。我剛開始也用這個,可是發現用這個工具處理後,無論是android模擬器還是真機,都裝不上,提示沒有簽名。
我將apk解開看,確實是有簽名的。
檢視簽名:
jarsigner -verify -verbose -certsD:\Android\apk\02-AndroidCalculator-sign.apk
所以後來,我就手工用命令列來簽名。手工簽名之前,首先需要去除原來簽名的資訊,去除方法很簡單。就是將apk檔案字尾改為.zip,然後從winrar中刪除META-INF資料夾,刪除後重新將檔名改成apk的字尾,這樣就去除簽名了。然後用下面的命令進行簽名。
注意下面黃色高亮和灰色高亮的字,需要根據自己的debug.keystore的位置,和待簽名apk的位置進行設定。
簽名AndroidCalculator
> jarsigner -keystoreD:\Android\avd\.android\debug.keystore-storepass android -keypass android D:\Android\apk\02-AndroidCalculator-unsign.apkandroiddebugkey
> zipalign 4D:\Android\apk\02-AndroidCalculator-unsign.apkD:\Android\apk\02-AndroidCalculator-sign.apk
zipalign能夠使apk檔案中未壓縮的資料在4個位元組邊界上對齊(4個位元組是一個效能很好的值)
例如簽名Plingm
>jarsigner -keystoreD:\Android\avd\.android\debug.keystore-storepass android -keypass android D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkandroiddebugkey
> zipalign 4D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk
對於jdk1.7版本,簽名稍有區別,需要加上引數:-digestalgSHA1 -sigalg MD5withRSA,例如
>jarsigner -digestalgSHA1 -sigalg MD5withRSA -keystore D:\Android\avd\.android\debug.keystore -storepassandroid -keypass android D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkandroiddebugkey
>zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk
簽名後如何安裝到模擬器中?命令如下
>emulator -avdandroid4.1
>adb installD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk
如果是安裝到真機中,就不需要上面第一條命令啟動模擬器了,直接usb連線上手機,執行adbinstall即可。
在進行黑盒測試之前,需要知道待測試apk的包及activity資訊。檢視某個apk的package name,可以用aapt看:
在platform-tools目錄下使用如下命令:aapt dump badging XXX.apk
aapt dump badgingD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk
也可以用re-sign.jar看,結果如下:package:name='com.freephoo.android'
3. 真機除錯
-
設定android手機為USB除錯模式。步驟:menu---> 設定 ---> 應用程式 ---> 開發 , 選擇【USB除錯】
-
用USB連線手機和電腦,並確保成功。步驟:在windows下執行c:/adb devices,檢視手機是否已經連線成功。
連線不成功:
-
設定應用程式為除錯模式(這個似乎不要也可以)。操作:編輯AndroidManifest.xml 增加除錯引數android:debuggable="true", 如下:
<application android:icon="@drawable/icon"android:label="@string/app_name"android:debuggable="true">
-
檢視具體異常資訊:
執行:./adb logcat 可以檢視到更多的系統異常訊息。在這些訊息中要注意檢視Caused by:打頭的行,這些行指明瞭在哪行程式碼出的錯誤
4. 已知控制元件id,如何模擬按鍵
我們知道,android每個控制元件都有一個類似R.id.xxxx字串id。在做白盒測試的時候,將被測試的程式碼包import一下,直接呼叫R.id.xxxx就可以了。
但是在黑盒測試的時候,我們只有apk,沒有原始碼,怎麼獲取控制元件的id呢?
java已經給我們提供了這個工具。只需要在cmd下面輸入hierarchyviewer即可調出控制元件檢視工具(如果cmd不認識你的hierarchyviewer,說明你的環境變數沒有配置正確):
選中需要檢視的應用,點選:"Load ViewHierarchy":
如下id/後面的"Button01"即為button的id。
1. 根據button上面的文字。這個很簡單,直接solo.clickOnButton("Multiply");即可。
2. 根據控制元件的座標。hierarchyviewer是可以檢視每個點的座標的。但是使用起來不是很直觀,尤其是對不同解析度螢幕的手機時,使用起來可能還存在相容性問題。
如果控制元件上沒有文字,clickOnButton就用不了,例如很多應用用圖片作為button的說明,clickOnButton就不奏效。用座標又很麻煩不直觀。可否用控制元件的id呢?
怎麼用id,我也糾纏這個問題好幾天,網上中文資料搜不到,搜英文,英文搜不到換關鍵字搜,始終找不到一個比較完整的使用說明。我只好自己一個個命令的試,搞了2天總算找到一個方法,這個方法對於java高手可能不值一提,但對我從未用過java的人來說,確實費了不少周折。
我的方法如下,先獲取到控制元件的view:
solo.getCurrentActivity().getResources().getIdentifier,
然後再用solo.clickOnView即可。
我在使用的時候,簡單的封裝了下,封裝函式如下:
private int clickCtrlById(String s, int t ){
intctrl;
View v;
if( s == ""){
return -1;
}
ctrl = solo.getCurrentActivity().getResources().getIdentifier(s,"id",TARGET_PACKAGE_ID);
v = solo.getView(ctrl);
solo.clickOnView(v);
solo.sleep(t);
return 0;
}
例如已知某個控制元件的id(字串格式)為"btn_dialpad_5",呼叫方法如下:
clickCtrlById("btn_dialpad_5",400);
相關文章
- Android及Robotium學習總結【環境…Android
- 從零學習Fluter(二):win10上環境搭建以及模擬器和真機除錯Win10除錯
- 虛擬按鍵的總結及示例: (轉)
- uni-app 模擬機除錯環境搭建APP除錯
- android按鍵模擬測試Android
- 【android】android使用命令模擬按鍵Android
- android真機除錯方法Android除錯
- Mac下Android Framework原始碼環境搭建執行及除錯方法MacAndroidFramework原始碼除錯
- android機頂盒真機除錯方法Android除錯
- risc-v環境搭建及除錯除錯
- node.js環境安裝及環境變數Node.js變數
- OpenMP 環境變數使用總結變數
- 【Linux】-- 環境變數 path 的檢視、新增及刪除Linux變數
- 2: mac 下真機除錯 android 手機Mac除錯Android
- 在solaris環境下,根據java程式的不同,設定不同的環境變數Java變數
- JDK安裝及環境變數配置JDK變數
- Android之記憶體洩漏除錯學習與總結Android記憶體除錯
- 個人開發總結分享:Android學習及如何利用android來賺錢Android
- UNIX再學習 -- 環境變數變數
- Linux環境下段錯誤的產生原因及除錯方法小結Linux除錯
- Linux 新增環境變數和刪除環境變數Linux變數
- android通過USB使用真機除錯程式Android除錯
- 在linux下真機除錯android程式Linux除錯Android
- 搭建Go開發及除錯環境(LiteIDE + GoClipse) -- Windows篇Go除錯IDEWindows
- Mac Appium環境搭建及連線ios真機MacAPPiOS
- Android 模擬返回鍵功能Android
- ubuntu 刪除環境變數Ubuntu變數
- Android開發之旅:環境搭建及HelloWorldAndroid
- Linux中修改環境變數及生效方法(永久、臨時)環境變數檢視Linux變數
- 交叉編譯和交叉除錯環境搭建及使用編譯除錯
- CLion和WSL配置MPI執行及除錯環境除錯
- 根據除錯工具看原始碼之虛擬dom(一)除錯原始碼
- Tomcat的下載及環境變數配置Tomcat變數
- Linux中修改環境變數及生效方法Linux變數
- PID除錯軟體(C#、模擬、模擬)除錯C#
- 【轉載】MAVEN環境變數配置及安裝及專案配置Maven變數
- Android環境搭建學習筆記Android筆記
- Android:Handler學習總結Android