日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

测试——Monkey测试的介绍及使用

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 测试——Monkey测试的介绍及使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Monkey的簡單介紹:

  • Monkey是android系統自帶的測試工具,他能運行在虛擬機和真機中。
  • Monkey能向系統發送偽隨機的用戶事件流(像按鍵,觸摸,手勢操作等)進行模擬操作,實現對程序的壓力測試。
  • Monkey所產生的事件都是隨機的,不會帶有主觀性。
  • 用來測試安卓移動端App的健壯性和穩定性。
  • ?

    Monkey的簡單使用:?

    搭建環境:

    Android SDK環境:下載Android SDK,下載完成后,添加路徑到Path。(步驟簡單不會的自行百度)

    下面是Android SDK下載地址:Android SDK下載地址。

    ?

    Python環境:下載Python下載完成后一路next安裝上就行了。

    下面是Python下載地址:Python下載地址

    配置好環境之后連接手機或者模擬器(注意要在連接電腦之前把usb調試打開),然后在cmd命令行輸入adb? devices會出現一行手機唯一標志名。代表手機和電腦已經建立了軟連接。

    安裝一個被測軟件:

    (命令行輸入)adb install? App文件名.apk

    卸載一個軟件:

    (命令行輸入)adb.uninstall 包名? ?

    ?

    發送各種測試指令:?

  • 發送壓測指令? ? ? ? ? ? ? ? adb shell monkey 1000? ?adb shell +工具名稱+完成1000次指令(隨機)? ? ? ? ? ? ? ? ? ? ?一些提示信息: activityResuming (com.******) 代表這個程序從前臺調入到后臺再從后臺回調到前臺這個過程。? ? ?Events injected:1000? ? ? ? ? ? 這個提示信息就代表完成了一千次操作,如果小于1000的話代表有錯誤,未執行1000次。? ??
  • 要給某個程序打壓力,就要獲取App包名。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?獲取包名方法: (命令行輸入)adb shell pm list package -f? ? ? ? ? ? (獲取手機內所有程序的包名,包括系統程序)? ? ? ? ? ? (命令行輸入)adb shell dumpsys window w | findstr \/ | findstr name=? ? (獲取正在打開的程序的包名)注意空格要加齊了,沒空格的地方不要亂加。

    輸出的東西是:包名/Activity名。

  • 給某一個程序打壓力 :? ? ? ? ? ? ? ? ? ? ? adb shell monkey -p 包名 -v? -v? -v 1000? ? (-v 代表輸出信息級別,1000代表次數) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
  • 時間間隔參數--throttle? 就是說在執行每個操作之間的時間間隔? ? :? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? adb shell? monkey -p 包名? --throttle 500? -v -v -v 100? ? ? ? ?(延遲500毫秒執行一次,共執行100次)

    ?

  • 打印輸出的日志結果:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? adb shell? monkey -p 包名? --throttle 500? -v -v -v 100? > D:/monkey_log.txt? ? ? ? (延遲500毫秒執行一次,共執行100次 ,并且記錄下日志結果打印到D盤下)? ? ? ? ? ? ? ??
  • ? ? ? ?然后我們看一下打印出來的結果。

    首先我們能看到日志文件確實存在了。然后我們打開看一下。

    這上邊的提示是:

    測試的seed值(因為是隨機事件100次,所以seed值是隨機的),這個seed值就是說如果我們此次測試出現問題下次用這個seed值就能復現。

    count:測試各種事件總共的次數。

    Include Category:測試包含的類別。

    這個就是說測試了100次,sending rotation degree 未發現錯誤,下邊的那些也是一樣。

    順便說一下他主要測試的一些點。

    我們知道seed是測試編號,下邊的0-11就是這次測試都進行了什么事件。做了多少(按百分比)。

    ?

    其他一些參數的使用:

  • Seed :想要兩次執行相同的操作,我們就要設置一個seed值:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?adb shell monkey -p? 包名? -s 數字? ?次數? ? ? 例如:? adb shell monkey -p 包名 -s 50 100

    ?

  • 設置點擊事件占總事件的百分比:? adb shell monkey -v -p 包名 --pct-touch 50 100? ?(解釋一下:-v打印日志,-p測試哪個app, --pct-touch 50 點擊事件占總事件的50%? ? ? 100觸發100次隨機事件)? ? ? ? ? ? ?我在下邊放一張圖你就能直觀看到其中含義,可以看到0事件觸發概率是50%。

    ?

  • 動作事件:? ? adb shell monkey -v -p 包名 --pct-motion 50 100? ? ?(由第二小點總結的理解第三小點并不難)

    ?如果想要約束兩個或者三個事件一起執行的百分比,寫法如下:

    adb shell monkey -v -p 包名 --pct-touch 50?--pct-motion 50 100(意思就是點擊事件和動作事件的百分比各占50%)

    ?

  • 軌跡球事件:

    adb shell monkey -v -p 包名 --pct-trackball 80 100 軌跡球事件占總事件的80%,總共執行100次

    ?

  • 基本導航事件: adb shell monkey --pct-nav 80 100 基本導航事件(輸入設備的上下左右)占總事件的80%,總共執行100次

    ?

  • 主要導航事件:設定主要導航事件的百分比,兼容性中間鍵,返回鍵,菜單鍵? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? adb shell monkey --pct-majornav 80 100 主要導航事件占總事件的80%,總共執行100次

    ?

  • 系統導航事件:設定系統導航事件的百分比,HOME、BACK、撥號及音量鍵? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? adb shell monkey --pct-syskeys 80 100 系統導航事件占總事件的80%,總共執行100次

    ?

  • 啟動Activity事件: adb shell monkey --pct-appswitch 80 100 啟動Activity事件占總事件的80%,總共執行100次

    ?

  • 不常用事件: adb shell monkey --pct-anyevent 80 100 不常用事件占總事件的80%,總共執行100次

    ?

  • 崩潰事件:設置一下,在系統跑崩潰之后還要繼續執行。直到事件數跑夠才停止。 adb shell monkey --ignore-crashes <event-count>

    ?

  • 超時事件:設置一下,在系超時之后還要繼續執行。直到事件數跑夠才停止。 adb shell monkey --ignore-timeouts <event-count>

    ?

  • ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  • CRASH結果的析取:

    實現步驟:安裝一個能引發CRASH 的 App →執行壓力測試命令(觸發CRASH)→提取CRASH的Exception信息。

    adb shell monkey -v -p 包名 --ignore-crashes 10000 //出現Crash后繼續執行

    ANR結果的析取:

    實現步驟:安裝一個能引發ANR的 App →執行壓力測試命令(觸發ANR)→提取ANR的Exception信息。

    ?

    ?

    手動測試的時候出現ANR怎么獲取Log信息:

    adb shell cd data/anr //到anr目錄下 ls //查看一下文件 more (tracts)文件名 //查看文件內容

    執行Monkey腳本功能:

    在測試過程中如果不使用腳本功能可能執行的事件是隨機的。所以想要執行相同功能就要用到

    Monkey Script:它的使用就先要把腳本傳輸到手機上

    adb push d:\monkey.txt sdcard/monkey.txt 將文件發送到手機 格式:adb push 電腦路徑文件 手機路徑文件。

    ?然后通過指令執行:

    adb shell monkey -f <scriptfile> <event-count>

    Monkey Script 的一些命令:

    1 Dispatch Trackball 命令

    軌跡球事件: Dispatch Trackball(longdowntime,long eventide,int action,float x ,float y ,....) action 0 代表按下 , 1 代表彈起 ,x,y代表坐標點。

    2 Dispatch Pointer 命令

    點擊事件: Dispatch Pointer(longdowntime,long eventide,int action,float x ,float y ,....) action 0 代表按下 , 1 代表彈起 ,x,y代表坐標點。

    3 Dispatch String命令

    輸入字符串事件 Dispatch String (String text)

    4 Launch Activity 命令

    啟動應用 Launch Activity(package,Activity)(包名,活動頁面名)

    ?5 UserWait命令

    等待事件 UserWait(1000)

    6 Dispatch Press

    按下鍵值 Dispatch Press (int keycode) #keycode 66 回車鍵 ,不同的keycode 代表不同的鍵值

    其他一些命令:

    RotateScreen(rotationDegree, persist): 翻轉屏幕,第一個參數是旋轉角度,第二個是旋轉后是否停在當前位置Tap(x, y) :單擊事件,點擊屏幕,參數是點擊坐標Drag(xStart, yStart, xEnd, yEnd) :在屏幕上滑動,坐標是從哪一點滑到哪一點LongPress(): 長按2sProfileWait():?等待5sPressAndHold(x, y, pressDuration) :模擬長按?PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模擬縮放RunCmd(cmd) :執行shell命令,比如截圖?screencap -p /data/local/tmp/tmp.pngDispatchFlip(true/false) :打開或者關閉軟鍵盤UserWait(sleepTime) :睡眠指定時間DeviceWakeUp() :喚醒屏幕

    ?

    編寫一個簡單的瀏覽器搜索腳本:

    編寫步驟: 1 啟動App 2 點擊輸入框 3 輸入查詢詞 4 點擊鍵盤回車鍵 5 點擊搜索按鈕 6 等待結果出現 7 點擊清除按鈕typ = user count = 10 speed = 1.0 start data >>LaunchActivity(com.android.browser,com.android.browser.BrowserActivity) //設置開啟那個軟件,哪個界面 UserWait(2000) //等待兩秒 DispatchPointer(10,10,0,400,400,1,1,-1,1,1,0,0) //設置按下輸入框點擊焦點 DispatchPointer(10,10,1,400,400,1,1,-1,1,1,0,0) //設置抬起輸入框點擊焦點 DispatchString(test) //設置要搜索的文字 UserWait(1000) //等待一秒 DispatchPress(66) //點擊回車鍵 UserWait(1000) //等待一秒 DispatchPointer(10,10,0,400,900,1,1,-1,1,1,0,0) //設置按下搜索的點擊焦點 DispatchPointer(10,10,1,400,900,1,1,-1,1,1,0,0) //設置抬起搜索的點擊焦點 UserWait(6000) //等待6秒 DispatchPointer(10,10,0,756,281,1,1,-1,1,1,0,0) //設置按下輸入框點擊焦點 DispatchPointer(10,10,1,756,281,1,1,-1,1,1,0,0) //設置抬起輸入框點擊焦點 UserWait(3000) //等待三秒

    腳本編寫完成以后想要運行這個腳本就要把此腳本放到手機中。那編寫的腳本文件在電腦中怎么放到手機中呢?用如下命令

    腳本名monkey.script 位置:D盤根目錄下 想要放到手機中的位置: data/local/tmp 目錄下命令行執行:adb push D:/monkey.script /data/local/tmp/

    可以看到如下執行結果,代表文件已經成功導入到手機中。

    ?導入成功后就要切換到手機目錄下,用手機里的monkey去執行我們的monkey.script.腳本了操作步驟如下:

    命令行輸入: adb shell //切換到手機目錄下 cd /data/local/tmp //進入到我們存放腳本的目錄 ls //查看目錄下是否有我們已經導入的腳本,確認存在 monkey -f monkey.script 2 //執行monkey.script腳本執行兩次

    這里要注意,要確定app工程中設置了能被外部調起 android:exported = "true"。

    ?

    MonkeyRunner

    在運行monkeyrunner的時候可能會有踩到一些坑,我把坑總結了一下,如有monkeyrunner? ?無法啟動的問題,腳本執行命令問題請查看——————MonkeyRunner無法正常運行

    為了要滿足更多的模擬操作我們就要用到monkeyRunner中的一些API

    1、MonkeyRunner API - alert

    警示框 代碼段 void alert (string message ,stringtitle,string okTitle) //正文內容,警告框的title ,按鈕上的文字我們在編譯器中編寫如下代碼#!/usr/bin/python#-*- UTF-8 -*-from com.android.monkeyrunner import MonkeyRunner MonkeyRunner.alert('hello mook frends','this is title','OK')

    執行結果:

    ?

    2、MonkeyRunner API -waitForConnection

    等待設備連接,有多個device id,需要指明具體哪個設備。waitForConnection(float timeout,string deviceid)

    3、MonkeyDevice API -drag

    拖動:drag(tuple start,tuple end,float duration,integer steps) (拖動起始點位置,拖動結束點位置,手勢持續時間,插值點的步數,默認10)

    4、MonkeyDevice API -press

    按鍵 press(string keycode,dictionary type)(keycode(回車鍵66),動作類型Down、UP、DOWN_AND_UP(彈起,按下))

    5、MonkeyDevice API - startActivity

    啟動應用startActivity(package+'/'+activity)

    6、MonkeyDevice API -touch

    touch(integer x,integer y,integer type)(x坐標值,y坐標值,type= DOWN,UP,DOWN_AND_UP)

    7、MonkeyDevice API -type

    輸入 type(string message) 文本信息

    8、MonkeyDevice API -takeSnapshot

    截屏 MonkeyImage takeSnapshot()

    9、Monkey Image API - sameAs

    圖像對比boolean sameAs (MonkeyImage other,float percent) (文件名稱,相似度百分比)

    10、MonkeyImage API -writetoFile

    保存圖像文件void writeTOFile(string path,string format) (保存文件的路徑,保存文件的格式(JPG、PNG...))

    綜合:在輸入框輸入文字,并截圖。

    #!/usr/bin/python#-*- UTF-8 -*-#把要用到的模塊導入到工程中 from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage#連接手機(延遲多少秒,手機的devices號) device = MonkeyRunner.waitForConnection(5,"emulator-5556")#要運行軟件的包名和Activity名 device.startActivity("com.android.browser/com.android.browser.BrowserActivity") #延遲兩秒 MonkeyRunner.sleep(2)#按下輸入文本框操作 device.touch(400,400,'DOWN_AND_UP') #延遲一秒 MonkeyRunner.sleep(1)#輸入文本 device.type('test') #延遲一秒 MonkeyRunner.sleep(1)#按下回車鍵 device.press('66','DOWN_AND_UP') #延遲一秒 MonkeyRunner.sleep(1)#點擊搜索按鈕 device.touch(400,900,'DOWN_AND_UP') #延遲六秒 MonkeyRunner.sleep(6)#將執行后的界面截圖,并保存到D盤下 result = device.takeSnapshot() result.writeToFile('D:\TEST.png','png')

    腳本文件如上,編寫的時候不要添加中文。否則會出現編碼錯誤的問題。

    編好后,執行結果如下:

    查看一下D盤下的文件:

    到此為止,monkey的簡單使用就介紹完了。

    總結

    以上是生活随笔為你收集整理的测试——Monkey测试的介绍及使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。