1. 程式人生 > >幾款Android 應用自動化測試工具

幾款Android 應用自動化測試工具

本文介紹幾款流行的 Android應用自動化測試工具。

Monkey測試:隨機測試,壓力測試,執行在模擬器或實際裝置中。

MonkeyRunner測試:操作簡單,可錄製測試指令碼,視覺化操作,主要生成座標的自動化操作,移植性不強

Robotium 測試

Ronaorex 測試

Appium 測試

UI Automator 測試

TestBird測試

1、Monkey 測試

Monkey 即猴子,Monkey 測試,就像一隻猴子,在電腦面前,亂敲鍵盤在測試。

Monkey 測試主要用於Android 應用程式壓力測試的小工具,主要目的就是為了測試app是否會Crash。

Monkey 測試原理:Monkey 是 Android 中的一個命令列工具,可以執行在模擬器裡或實際裝置中。它向系統傳送偽隨機的使用者事件流(如按鍵輸入、觸控式螢幕輸入、手勢輸入等),實現對正在開發的應用程式進行壓力測試。通常也稱隨機測試或者穩定性測試。Monkey 測試是一種為了測試軟體的穩定性、健壯性的快速有效的方法。

1 > Monkey 特徵

A. 測試的物件僅為應用程式包,有一定的侷限性。

B. Monky 測試使用的事件流資料流是隨機的,不能進行自定義。

C. 可對 MonkeyTest的物件,事件數量,型別,頻率等進行設定。

D.Monkey 雖可根據一個指定的命令指令碼傳送按鍵訊息,但其不支援條件判斷,也不支援讀取待測介面的資訊來執行驗證操作。

E.Monkey 執行在裝置或模擬器上面,可以脫離PC執行,驗證待測應用在這些隨機性輸入面前是否會閃退或者崩潰。

2 > Monkey 程式介紹

① Monkey 程式由 Android 系統自帶,使用Java語言寫成,在Android檔案系統中的存放路徑是: /system/framework/monkey.jar;    ② Monkey.jar 程式是由一個名為“ monkey ”的Shell指令碼來啟動執行,shell指令碼在Android檔案系統中 的存放路徑是:/system/bin/monkey;   ③ Monkey 命令啟動方式:   

a. 可以通過 PC 機 CMD 視窗中執行:  adb shell monkey {+命令引數}來進行Monkey測試          

b. 在PC上 adb shell進入Android系統,通過執行monkey {+命令引數}來進行Monkey 測試          

c. 在Android機或者模擬器上直接執行monkey命令,可以在Android機上安裝Android終端模擬器  

④ 對特定APP包進行測試的命令為 adb shell monkey -p <pakage.name>

3 > 例項

① 測試前提條件

a. 將手機恢復出廠設定

b. 恢復出廠設定後,進入設定-->關於手機-->高階設定-->勾選‘保持喚醒狀態’

c. 在設定->安全中設定解鎖圖案以及PIN碼

d. 連線 adb tool

e. 手機開啟後臺log(*#*#3646633#*#*),開啟main log,, mobile log和net log

② 測試步驟

a. 使用USB線連線手機和電腦

b. 在電腦中輸入Monkey命令:

adb shell monkey  -p <package.name> --throttle 380 -v -s 3500 300000 >C:\monkey_log.txt 
 

c. 在Monkey結束以後檢視它停留的介面並且做一些簡單的測試,如撥打電話,傳送資訊等

③ 測試結果

Monkey的測試結果可以通過monkey_log.txt 檢視,如果測試結果正常,在log最後一行會有monkey finished顯示並且手機執行正常。如果應用程式產生了應用程式不響應ANR(application notresponding)的錯誤,Monkey將會停止並報錯,如果應用程式崩潰Crash或接收到任何失控異常,Monkey也會停止並報錯。

a. 在執行Monkey命令時,遇到Crash或者ANR,就會自動終止。程式無響應的問題:在日誌中搜索 “ANR”

b.崩潰問題:在日誌中搜索“Exception”   (如果出現空指標,NullPointerException)  肯定是有bug 例如在log最後一行顯示crashed at event ####of 300000 using seed 3500 。

c.最後搜尋“error

一般我們執行Monkey時,在3萬次以內發生Crash的話就認為Monkey是有問題的,要提交PR。

④ 提交 Monkey 的PR

在執行Monkey命令時發生Crash或者ANR時需要提交PR,具體提交MonkeyPR的規則如下:

a. 標題:在PR標題中加上[Monkey] 內容:主要要包含自己執行的命令以及在多少次發生crash

b. 內容:主要要包含自己執行的命令以及在多少次發生crash

c .其它:在PR上要附上相關的Monkey log還有手機後臺開啟的log,如果有相關的強制關閉的圖片也可以貼上。

4 > Monkey 引數

Monkey命令:adb shell monkey  -p <package.name> --throttle 380 -v -s 3500300000 > C:\monkey_log.txt,這個monkey命令,當monkey test過程中遇到Crash或者ANR,就會自動終止。

C:\monkey_log.txt指將Monkey 的log存在PC端的C盤根目錄下。

常規類引數

1、 -help

作用:列出簡單的用法

例:adb shell monkey -help   也可不寫help

2、-v

作用:命令列上的每一個-v都將增加反饋資訊的詳細級別。 Level0(預設),除了啟動、測試完成和最終結果外只提供較少的資訊。

adb shell monkey -p com.shjt.map -v 100 
Level1,提供了較為詳細的測試資訊,如逐個傳送到 Activity 的事件資訊。
adb shell monkey -p com.shjt.map -v  -v 100  
Level2,提供了更多的設定資訊,如測試中選中或未選中的 Activity 資訊。
adb shell monkey -p com.shjt.map -v  -v  -v 100
 

比較常用的是-v -v -v,即最多詳細資訊,一般會儲存到指定檔案中供開發人員查詢bug原因時使用。

例:adb shell monkey -v 10

事件類引數

1、-s <seed>

作用:偽隨機數生成器的seed值。如果用相同的seed值再次執行monkey,將生成相同的事件序列。

例:adb shell monkey -s 1483082208904 -v 10

2、--throttle <milliseconds>

作用:在事件之間插入固定的時間(毫秒)延遲,你可以使用這個設定來減緩Monkey的執行速度,如果你不指定這個引數,則事件之間將沒有延遲,事件將以最快的速度生成。

注:常用引數,一般設定為300毫秒,原因是實際使用者操作的最快300毫秒左右一個動作事件,所以此處一般設定為300毫秒。

例:adb shell monkey --throttle 300 -v 10

3、--pct-touch <percent>

作用:調整觸控事件的百分比。(觸控事件是指在螢幕中的一個down-up事件,即在螢幕某處按下並擡起的操作)

注:常用引數,此引數設定要適應當前被測應用程式的操作,比如一個應用80%的操作都是觸控,那就可以將此引數的百分比設定成相應較高的百分比。

例:adb shell monkey --pct-touch 100 -v 10

4、--pct-motion <percent>

作用:調整motion事件百分比。(motion事件是由螢幕上某處一個down事件、一系列偽隨機的移動事件和一個up事件組成) 注:常用引數,需注意的是移動事件是直線滑動 例:adb shell monkey --pct-motion 100 -v 10

5、--pct-trackball<percent> 作用:調整滾動球事件百分比。(滾動球事件由一個或多個隨機的移動事件組成,有時會伴隨著點選事件) 注:不常使用引數,現在手機幾乎沒有滾動球,但滾動球事件中包含曲線滑動事件,在被測程式需要曲線滑動時可以選用此引數。 例:adb shell monkey --pct-trackball 100 -v 10

6、--pct-nav<percent> 作用:調整基本的導航事件百分比。(導航事件由方向輸入裝置的上下左右按鍵所觸發的事件組成) 注:不常用操作。 例:adb shell monkey --pct-nav 100 -v 10

7、--pct-majornav<percent> 作用:調整主要導航事件的百分比。(這些導航事件通常會導致UI介面中的動作事件,如5-way鍵盤的中間鍵,回退按鍵、選單按鍵) 注:不常用操作。 例:adb shell monkey --pct-majornav 100 -v 10

8、--pct-syskeys<percent> 作用:調整系統事件百分比。(這些按鍵通常由系統保留使用,如Home、Back、Start Call、EndCall、音量調節) 注:不常用。 例:adb shell monkey --pct-syskeys 100 -v 10

9、--pct-appswitch<percent> 作用:調整Activity啟動的百分比。(在隨機的時間間隔中,Monkey將執行一個startActivity()呼叫,作為最大程度覆蓋被測包中全部Activity的一種方法) 注:不常用。 例:adb shell monkey --pct-appswitch 100 -v 5

10、--pct-anyevent 作用:調整其他事件的百分比。(這包含所有其他事件,如按鍵、其他在裝置上不常用的按鈕等) 注:不常用。 例:adb shell monkey --pct-anyevent 100 -v 5

約束類引數

1、-p<allowed-package-name> 作用:如果你指定一個或多個包,Monkey將只允許訪問這些包中的Activity。如果你的應用程式需要訪問這些包(如選擇聯絡人)以外的Activity,你需要指定這些包。如果你不指定任何包,Monkey將允許系統啟動所有包的Activity。指定多個包,使用多個-p,一個-p後面接一個包名。 注:常用引數。 例:adb shell monkey -p com.Android.browser -v 10

2、-c<main-category> 作用:如果你指定一個或多個類別,Monkey將只允許系統啟動這些指定類別中列出的Activity。如果你不指定任何類別,Monkey將選擇謝列類別中列出的Activity,Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY。指定多個類別使用多個-c,每個-c指定一個類別。 注:不常用。

3、--dbg-no-events 作用:設定此選項,Monkey將執行初始啟動,進入一個測試Activity,並不會在進一步生成事件。為了得到最佳結果,結合引數-v,一個或多個包的約束,以及一個保持Monkey執行30秒或更長時間的非零值,從而提供了一個可以監視應用程式所呼叫的包之間轉換的環境。 注:不常用。

4、--hprof 作用:設定此選項,將在Monkey生成事件序列前後生成profilling報告。在data/misc路徑下生成大檔案(~5Mb),所以要小心使用。 注:不常用。

5、--ignore-crashes 作用:通常,應用發生崩潰或異常時Monkey會停止執行。如果設定此項,Monkey將繼續傳送事件給系統,直到事件計數完成。 注:常用。

6、--ignore-timeouts 作用:通常,應用程式發生任何超時錯誤(如“Application Not responding”對話方塊)Monkey將停止執行,設定此項,Monkey將繼續傳送事件給系統,直到事件計數完成。 注:常用。

7、--ignore-security-exception  作用:通常,當程式發生許可錯誤(例如啟動一些需要許可的Activity)導致的異常時,Monkey將停止執行。設定此項,Monkey將繼續傳送事件給系統,直到事件計數完成。 注:常用。

8、--kill-process-after-error 作用:通常,當Monkey由於一個錯誤而停止時,出錯的應用程式將繼續處於執行狀態。設定此項,將會通知系統停止發生錯誤的程序。注意,正常(成功)的結束,並沒有停止啟動的程序,裝置只是在結束事件之後簡單的保持在最後的狀態。

9、--monitor-native-crashes

作用:監視並報告Andorid系統中原生代碼的崩潰事件。如果設定--kill-process-after-error,系統將停止執行。

10、--wait-dbg

作用:停止執行中的Monkey,直到有偵錯程式和它相連線。

樣例:

adb shell  monkey  -p com.android.settings --throttle 380 -v -v -v -s 3500 300000 > E:\Test\monkey_log.txt

測試結果:

測試完成後均正確時會顯示Monkey finished:

  1. Events injected: 300

  2. :Sending rotation degree=0, persist=false

  3. :Dropped: keys=0 pointers=2 trackballs=0 flips=0 rotations=0

  4. ## Network stats: elapsed time=42700ms (0ms mobile, 0ms wifi, 42700ms not connected)

  5. // Monkey finished

有bug時,會出現error:
  1. ** Monkey aborted due to error.

  2. Events injected: 8530

  3. :Sending rotation degree=0, persist=false

  4. :Dropped: keys=5 pointers=8 trackballs=0 flips=0 rotations=0

  5. ## Network stats: elapsed time=1016690ms (0ms mobile, 0ms wifi, 1016690ms not

  6. connected)

2、 MonkeyRunner 測試

MonkeyRunner工具是使用 Jython (使用Java程式語言實現的Python)寫出來的,它提供了多個API,通過MonkeyRunner API 可以寫一個Python的程式來模擬操作控制Android裝置app,測試其穩定性並通過截圖可以方便地記錄出現的問題。

MonkeyRunner和Monkey沒有直接的關係。Monkey是在裝置/模擬器直接執行adb shell命令生成使用者或系統偽隨機事件流來進行測試的。

而MonkeyRunner則執行在PC上,需要通過伺服器/客戶端的的模式向裝置或者模擬器上的android應用傳送指令來執行測試。它支援自己編寫外掛,控制事件,隨時截圖,簡而言之,任何你在模擬器/裝置中能幹的事情,MonkeyRunner都能幹,而且還可以記錄和回放。

1 > MonkeyRunner 特徵

1)MonkeyRunner工具在工作站上通過API定義的特定命令和事件控制裝置或模擬器(可控)

2)精確控制事件之間的事件

3)可以進行:點觸屏、拖拽、長按、鍵盤事件

4)可以智慧截圖對比和判斷

5)回溯出詳細具體的BUG路徑

2  > MonkeyRunner 優缺點

1) 能完全模擬人工所有操作

2) 有詳細的API文件參考

3) 可以寫出智慧影象對比指令碼

4) 支援 java 和 Python 兩種語言指令碼

5) 指令碼移植性差

3 > MonkeyRunner測試型別

1)多裝置控制

MonkeyRunnerAPI可以跨多個裝置或模擬器實施測試套件。您可以在同一時間接上所有的裝置或一次啟動全部模擬器(或統統一起),依據程式依次連線到每一個,然後執行一個或多個測試。您也可以用程式啟動一個配置好的模擬器,執行一個或多個測試,然後關閉模擬器。

2)功能測試

MonkeyRunner可以為一個應用自動貫徹一次功能測試。您提供按鍵或觸控事件的輸入數值,然後觀察輸出結果的截圖。

3)迴歸測試

MonkeyRunner可以執行某個應用,並將其結果截圖與既定已知正確的結果截圖相比較,以此測試應用的穩定性。

4)可擴充套件的自動化

由於MonkeyRunner是一個API工具包,您可以基於Python模組和程式開發一整套系統,以此來控制Android裝置。除了使用MonkeyRunner API之外,您還可以使用標準的Python os和subprocess模組來呼叫Android Debug Bridge這樣的Android工具。

4 > MonkeyRunner 工具

MonkeyRunner API 主要包括三個模組

1)MonkeyRunner:

此類提供連線真機和模擬器方法waitForConnection(float timeout,stringdeviceid),還提供了建立使用者介面顯示資訊的alert()方法。

2)MonkeyDevice

代表一個裝置或模擬器。此類提供了安裝和解除安裝程式包、開啟Activity、傳送按鍵和點選事件、執行測試包等方法

拖拉控制元件drag(tuple start,tuple end,floatduration,integer steps)  //duration手勢持續時間

按鍵press(string keycode,dictionary type) //keycode:KEYCODE_HOME,..   type:DOWN ,UP,DOWN_AND_UP...

安裝應用 installPackage(pc端存放apk路徑)

啟動應用starActivity(package+'/'+activity)//一個引數

點選touch(integer x,integer y, integer type)//type:DOWN,UP,DOWN_AND_UP...

輸入type(string message)

截圖takeSnapshot()

3)MonkeyImage

這個類提供了捕捉螢幕的方法。

在測試過程中用來儲存測試截圖,將點陣圖儲存為各種格式,並可以比較兩個MonkeyImage物件,將image儲存到檔案等。

影象對比sameAs(MonkeyImage other,float percent)//對比的相似度,結果boolean型別

影象儲存writetoFile(string path,string format)

5 > MonkeyRunner 環境搭建

6 > MonkeyRunner 執行

執行有兩種方式

① 在CMD命令視窗直接執行monkeyrunner

② 使用Python編寫測試程式碼檔案,在CMD中執行monkeyrunner xxx.py執行

不論使用哪種方式,您都需要呼叫SDK目錄的tools子目錄下的monkeyrunner命令。

 

1)模擬器啟動

在執行monkeyrunner之前必須先執行相應的模擬器或連線真機,否則monkeyrunner無法連線到裝置

執行模擬器有兩種方法:1、通過eclipse中執行模擬器 2、在CMD中通過命令呼叫模擬器

這裡介紹通過命令,在CMD中執行模擬器的方法

emulator -avd AVD_test

上面命令中 AVD_test 是指模擬器的名稱。

2)互動對話環境

cmd 執行 monkeyrunner 互動命令“monkeyrunner” 或:

monkeyrunner -plugin   
 

3)cmd 終端匯入monkeyrunner所要使用的模組

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

然後便可以開始利用monkeyrunner進行測試了。

3) 模擬器連線

device=MonkeyRunner.waitForConnection(6,’emulator-5554′)

引數1:超時時間,單位秒,浮點數,預設是無限期地等待。 引數2:指定的裝置名稱device_id,預設為當前裝置(手機優先,其次為模擬器)

4) app 安裝

模擬器啟動成功後,安裝apk

device.installPackage('F:\\QQyinle_439.apk') 
 

其中,引數為apk的相對路徑。成功返回true,且模擬器的IDLE介面可看到安裝apk 圖示

5)app 啟動

device.startActivity(component="package名/.activity")
  如何獲取一個app的package名和activity?

使用

  1. #apk路徑中一定不能有空格

  2. aapt dump badging F:\QQyinle_439.apk

aapt dump badging F:\QQyinle_439.apk > F:\log.txt
所以:
device.startActivity(component=" com.tencent.qqmusic/.activity.AppStarterActivity ")
命令執行後,模擬器上的app被啟動。啟動成功後,便可以向模擬器傳送如按鍵、滾動、截圖、儲存等操作了

6)

問題:CMD執行提示monkeyrunner不是內部或外部命令,也不是可執行的程式或批處理檔案。

解決:電腦環境變數未配置,將monkeyrunner所在目錄配在環境變數裡。

變數名:Path

變數值:D:\android\android-sdk-windows\tools;D:\android\android-sdk-windows\platform-tools

7 > 樣例(Monkeyrunner執行python指令碼) 

test.py

  1. #-*-UTF-8-*-

  2. #如果匯入的模組起了別名,後面就必須使用別名

  3. from com.android.monkeyrunner import MonkeyRunner as mr

  4. from com.android.monkeyrunner import MonkeyDevice as md

  5. from com.android.monkeyrunner import MonkeyImage as mi

  6. #連線裝置或虛擬器。

  7. #引數1,超時時間,單位秒,預設無限期等待;引數2,裝置名稱,預設當前裝置

  8. device=mr.waitForConnection(2,'192.168.56.101:5555')

  9. #向裝置或模擬器安裝apk,以下兩種方式都是對的

  10. device.installPackage('D:\\baiduliulanqi_186.apk')

  11. #device.installPackage('D:/baiduliulanqi_186.apk')

  12. #啟動APP

  13. device.startActivity('cmp=com.baidu.browser.apps/com.baidu.browser.framework.BdBrowserActivity')

  14. mr.sleep(3)

  15. #點選搜尋框 #指定位置傳送觸控事件

  16. device.touch(100,100,'DOWN_AND_UP')

  17. mr.sleep(1)

  18. #輸入查詢詞

  19. device.type('test')

  20. mr.sleep(1)

  21. #點選回車鍵 #傳送指定型別鍵碼的事件

  22. device.press('KEYCODE_ENTER','DOWN_AND_UP')

  23. mr.sleep(2)

  24. #截圖

  25. result=device.takeSnapshot()

  26. #儲存到檔案

  27. result.writeToFile('./test.png','png')

  28. #清除搜尋框

  29. device.touch(100,100,'DOWN_AND_UP')

  30. mr.sleep(1)

  31. device.press('KEYCODE_DEL','DOWN_AND_UP')

  32. mr.sleep(2)

  33. #字串傳送到鍵盤

  34. #device.type('字串')

  35. device.type('Findyou')

  36. #喚醒裝置螢幕

  37. #鎖屏後,螢幕關閉,可以用下命令喚醒

  38. device.wake()

  39. #重起手機

  40. device.reboot()

  41. #模擬滑動

  42. #device.drag(X,Y,D,S)

  43. #X 開始座標

  44. #Y 結束座標

  45. #D 拖動持續時間(以秒為單位),預設1.0秒

  46. #S 插值點時要採取的步驟。預設值是10

  47. device.drag((100,1053),(520,1053),0.1,10)

 

執行測試指令碼test.py:monkeyrunner test.py monkeyrunner 錄製和回放 錄製:monkey_recorder.py

  1. from com.android.monkeyrunner import MonkeyRunner as mr

  2. from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder

  3. device=mr.waitForConnection()

  4. recorder.start(device)

 

在 cmd 命令列執行 monkeyrunner  monkey_record.py,會彈出一個MonkeyRecord視窗介面該視窗的功能:

A. 可以自動顯示手機當前的介面

B. 自動重新整理手機的最新狀態

C. 點選手機介面即可對手機進行操作,同時會反應到真機,而且會在右側插入操作指令碼

D. 

wait: 用來插入下一次操作的時間間隔,點選後即可設定時間,單位是秒

Press a Button:用來確定需要點選的按鈕,包括menu、home、search,以及對按鈕的press、down、up屬性Type Something:用來輸入內容到輸入框

Fling:用來進行拖動操作,可以向上、下、左、右,以及操作的範圍

Export Actions:用來匯出指令碼,不需要字尾名,也可以新增字尾名.mr

Refresh Display:用來重新整理手機介面,估計只有在斷開手機後,重新連線時才會用到

用錄製函式匯出操作的指令碼,通過monkey_playback.py函式回放之前的操作

回放:monkey_playback.py,

  1. import sys

  2. from com.android.monkeyrunner import MonkeyRunner as mr

  3. CMD_MAP = {

  4. 'TOUCH':lambda dev,arg:dev.touch(**arg),

  5. 'DRAG': lambda dev,arg:dev.drag(**arg),

  6. 'TYPE': lambda dev,arg:dev.type(**arg),

  7. 'PRESS': lambda dev,arg:dev.press(**arg),

  8. 'WAIT': lambda dev,arg:mr.sleep(**arg)

  9. }

  10. def process_file(f,device):

  11. for line in f:

  12. (cmd,rest)=line.split('|')

  13. try:

  14. rest = eval(rest)

  15. except:

  16. print 'unable to parse options'

  17. continue

  18. if cmd not in CMD_MAP:

  19. print 'unknown command: ' + cmd

  20. continue

  21. CMD_MAP[cmd](device, rest)

  22. def main():

  23. file = sys.argv[1]

  24. f = open(file,'r')

  25. device = mr.waitForConnection()

  26. process_file(f,device)

  27. f.close()

  28. if __name__ = '__main__'

  29. main()

8 > 其他

  1. #解除安裝裝置或模擬器中的APK ,引數為APK包名

  2. device.removePackage('cn.richinfo.thinkdrive')

  3. print ('Uninstall Success!')

  1. #傳送指定型別指定鍵碼的事件

  2. #device.press(引數1:鍵碼,引數2:觸控事件型別)

  3. #引數1:見android.view.KeyEvent

  4. #引數2,如有TouchPressType()返回的型別-觸控事件型別,有三種。

  5. #1、DOWN 傳送一個DOWN事件。指定DOWN事件型別傳送到裝置,對應的按一個鍵或觸控式螢幕幕上。

  6. #2、UP 傳送一個UP事件。指定UP事件型別傳送到裝置,對應釋放一個鍵或從螢幕上擡起。

  7. #3、DOWN_AND_UP 傳送一個DOWN事件,然後一個UP事件。對應於輸入鍵或點選螢幕。

  8. 以上三種事件做為press()引數或touch()引數

 
  1. #按下HOME鍵

  2. device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)

  3. #按下BACK鍵

  4. device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)

  5. #按下下導航鍵

  6. device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP)

  7. #按下上導航鍵

  8. device.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP)

  9. #按下OK鍵

  10. device.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP)

KeyCode:
  1. home鍵 KEYCODE_HOME

  2. back鍵 KEYCODE_BACK

  3. send鍵 KEYCODE_CALL

  4. end鍵 KEYCODE_ENDCALL

  5. 上導航鍵 KEYCODE_DPAD_UP

  6. 下導航鍵 KEYCODE_DPAD_DOWN

  7. 左導航 KEYCODE_DPAD_LEFT

  8. 右導航鍵 KEYCODE_DPAD_RIGHT

  9. ok鍵 KEYCODE_DPAD_CENTER

  10. 上音量鍵 KEYCODE_VOLUME_UP

  11. 下音量鍵 KEYCODE_VOLUME_DOWN

  12. power鍵 KEYCODE_POWER

  13. camera鍵 KEYCODE_CAMERA

  14. menu鍵 KEYCODE_MENU

 

3、Robotium測試

Robotium 是一款常用的免費的 Android 自動化測試工具軟體,適用於為不同的安卓版本和子版本黑盒測試自動化。Robotium 測試是用java寫的。提供了模擬各種手勢操作(點選、長按、滑動等)、查詢和斷言機制的API,能夠對各種控制元件進行操作。Robotium 對 Activity,Dialog,Toast,Menu 都是支援的。軟體開發人員經常把它描述為Android Selenium。事實上,Robotium是一個單元測試庫。

為了自動化測試需要修改程式原始碼。該工具也不適合與系統軟體的互動,它不能鎖定和解鎖智慧手機或平板電腦。Robotium 也沒有錄製回放功能,也不提供截圖。

詳情請參考:

4、Ronaorex測試

Ranrex 是一款不僅可以支援最新Android版本,也支援從Android2.2開始的早期版本和分支版本。

Ranorex的優勢是它有詳細的截圖報告。它能通過Wifi連線智慧手機和平板電腦。  一個自動化測試工程師通過這個Android工具可以不用XML資料格式來詳細編寫資料驅動的測試。Ranorex工作室使自動化測試工程師只要點選滑鼠就可容易地建立測試。它允許詳細宣告額外的程式模組,來用於在後期開發週期中測試更復雜的場景。 

它是一個商業的移動應用工具,其許可價格為1990歐元。不過Ranorex搜尋功能相當慢;它需要30秒來完成這樣的操作。我們必須為Ranorex配備apk檔案裝置,否則無法通過這個工具實現自動化測試,因為它只能在APK檔案裝置上工作。

5、Appium測試

這是一個可以為iOS和Android做自動化測試的框架。它是一個開源工具。它支援從2.3及以後的安卓版本。Appium利用WebDriver介面執行測試。它支援多種程式語言,如java,C #,Ruby和其他在WebDriver庫中的語言。

它可以控制移動裝置上的Safari和Chrome。這樣測試移動網站可使用Appium和這些瀏覽器。  但一些自動化測試工程師抱怨說,它沒有詳細的報告。其弱點還有減少了在移動裝置上XPath支援。 

6、UI Automator 測試

這款工具是谷歌釋出的。它支援從4.1開始的安卓版本。UI Automator能夠與各種Android軟體產品互動,包括系統中的應用。這使UI Automator可以鎖定和解鎖智慧手機或平板電腦。

通過這個工具建立的指令碼可以在許多不同的安卓平臺上執行。它可以重現複雜的使用者操作動作。  UI Automator也可以利用一個裝置的外部按鍵,如回放鍵、音量調節鍵、開關鍵來控制。  它可以整合測試框架TestNG。在這種情況下,UI Automator可以生成豐富和詳細的報告,類似於Ranorex生成報告。另外,這個工具搜尋功能非常快。 

軟體測試專家發現UI Automator是一款適用於許多Android平臺的移動應用測試。它是一款最適合安卓應用測試的工具之一,因為它是由谷歌專門為這個作業系統釋出的。 

通常約有80%的新軟體bug能在所有支援的平臺上重現。因此,一個可執行在廣泛使用的平臺上的移動測試工具是可以發現高達80%的缺陷。其餘20%將會在其他平臺上被發現。這意味著,在大多數情況下,在更少的測試平臺上完整地做測試比在眾多平臺上匆忙測試更好。 

uiautomator :一個測試的Java庫,包含了建立UI測試的各種API和執行自動化測試的引擎

 

參考:

7、TestBird 測試

TestBird自動迴歸測試平臺為手遊/APP開發者提供APP自動化迴歸測試,簡單點選自動生成圖片用例;多臺手機同時執行用例迴歸;基線對比,找出問題;調整基線,維護測試用例;一鍵生成報告,全面提升測試效率和質量。

TestBird最初是從手遊測試開始起步,在手遊圈積累起很高的知名度,目前也在逐步向APP測試領域進軍,同時TestBird也加入了智慧硬體的測試領域。基於全球首創的物件識別技術,TestBird可以深入到移動App&遊戲內部所有功能的深度解析能力。TestBird建立了雲手機、雲測試和雲分析三大測試平臺,通過自助App功能測試、遠端真機除錯、真機相容性測試、真人體驗測試、 真人壓力測試和崩潰分析等,為移動應用提供從研發到上線再到運營的一站式質量管理服務。