Android自動(dòng)化測(cè)試入門(mén)-Monkey和MonkeyRunner
測(cè)試是應(yīng)用開(kāi)發(fā)中不可或缺的一部分。測(cè)試所做的工作蕊苗,雖然不能讓用戶(hù)看到效果,但是想要保證一個(gè)有一定用戶(hù)基礎(chǔ)的應(yīng)用的穩(wěn)定性沿彭,測(cè)試是必須做的朽砰,否則嚴(yán)重的崩潰率肯定會(huì)導(dǎo)致用戶(hù)的差評(píng)或者流失。
歡迎加入我們喉刘。642830685锅移,群,領(lǐng)取最新Python自動(dòng)化饱搏、接口資料非剃,大家一起交流!如果對(duì)你有幫助推沸,點(diǎn)個(gè)贊唄
ADB工具使用
ADB的使用Android開(kāi)發(fā)者應(yīng)該都很熟悉了备绽,它是電腦和手機(jī)之間連接的一個(gè)橋梁。電腦端有一個(gè)Client和一個(gè)Server鬓催,Client負(fù)責(zé)輸入命令肺素,Server負(fù)責(zé)和手機(jī)連接,手機(jī)端通過(guò)adbd跟Server交互
常用的ADB命令
adb devices 列出電腦連接的設(shè)備 和 設(shè)備id宇驾,設(shè)備狀態(tài)
adb push 電腦端推送文件到手機(jī) 比如 adb -s 設(shè)備名 push 1.jpg /data/temp/1.jpg 如果連接了一個(gè)設(shè)備可以不用自定設(shè)備名稱(chēng)
adb pull 從手機(jī)拉取文件到電腦 比如 adb -s 設(shè)備名 pull /data/temp/1.jpg /data/11.jpg
adb forward 端口轉(zhuǎn)發(fā) 比如 adb forward tcp:11111 tcp:22222的意思是倍靡,將PC端的11111端口收到的數(shù)據(jù),轉(zhuǎn)發(fā)給到手機(jī)中22222端口
adb start-server/adb kill-server 啟動(dòng)/殺死ADB服務(wù)
adb install/adb uninstall 安裝/卸載 apk uninstall命令需要指定應(yīng)用的包名
adb shell 可以在電腦上直接進(jìn)入手機(jī)終端界面操作手機(jī)
進(jìn)入adb shell之后 使用 pm list packages 可以列出手機(jī)上是所有包名
android命令可以用來(lái)查看當(dāng)前Android開(kāi)發(fā)環(huán)境中的系統(tǒng)信息和操作课舍。主要有
android sdk 查看sdk
android avd 模擬器相關(guān)塌西,
android list 列表 比如 android list target 列出所支持的Android平臺(tái), android list avd 列出所有的模擬器
android create project 創(chuàng)建一個(gè)Android工程筝尾。
把sdk/tools路徑配置到環(huán)境變量中或者直接進(jìn)入sdk/tools目錄中執(zhí)行這些命令即可捡需。
Monkey 工具
Monkey是Andorid系統(tǒng)中自帶的一個(gè)黑盒測(cè)試工具,可以產(chǎn)生偽隨機(jī)事件(點(diǎn)擊筹淫、輕觸)流站辉。一般是通過(guò)隨機(jī)觸發(fā)界面事件,來(lái)確定是否發(fā)生了異常损姜。一般用于Android應(yīng)用的穩(wěn)定性饰剥、壓力測(cè)試
簡(jiǎn)單使用
Monkey是一個(gè)命令行工具,可以在任何模擬器或者設(shè)備上運(yùn)行摧阅,將偽隨機(jī)事件流發(fā)送到系統(tǒng)中來(lái)進(jìn)行壓力測(cè)試汰蓉。 需要通過(guò)adb shell來(lái)啟動(dòng),命令格式
adb shell monkey [option] <event-count>
下面進(jìn)入adb shell中做一個(gè)小例子:
通過(guò) pm list packages 命令可以看到手機(jī)中所有的包名逸尖,可以隨便找一個(gè)測(cè)試古沥,這里使用系統(tǒng)計(jì)算器來(lái)測(cè)試它的包名是 com.android.calculator2 。
可以執(zhí)行下面的命令娇跟,來(lái)執(zhí)隨機(jī)行應(yīng)用1000次
monkey -p com.android.calculator2 1000
可以通過(guò)-v 來(lái)輸出執(zhí)行日志岩齿,比如
monkey -p com.android.calculator2 -v -v 100
-v的個(gè)數(shù)表示日志輸出的級(jí)別,最多三個(gè)苞俘,越多日志越詳細(xì)來(lái)看看輸出的日志
data="com.android.calculator2"
//使用monkdy工具 測(cè)試了100次
//通過(guò)-s指定seed的值可以重復(fù)跟本次操作一模一樣的操作
:Monkey: seed=1582553186510 count=100
//測(cè)試的包名
:AllowPackage: com.android.calculator2
//策略
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
// + Using main activity com.android.calculator2.Calculator (from package com.android.calculator2)
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1582553186510
// Event percentages:
//每一種事件測(cè)試的占比盹沈,每個(gè)數(shù)組代表不同的事件類(lèi)型
//
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: -0.0%
// 6: 25.0%
// 7: 15.0%
// 8: 2.0%
// 9: 2.0%
// 10: 1.0%
// 11: 13.0%
.....
//網(wǎng)絡(luò)狀況 執(zhí)行時(shí)間
## Network stats: elapsed time=484ms (0ms mobile, 0ms wifi, 484ms not connected)
// Monkey finished
日志最開(kāi)始有個(gè)輸出 seed=1582553186510 ,通過(guò)這個(gè)值我們可以重新執(zhí)行一次一模一樣的當(dāng)前操作 adb shell monkey -s 1487572980979 -v 1000
1-11的占比代表各種事件的執(zhí)行比例,比如輕觸事件吃谣,手勢(shì)事件乞封,縮放事件,導(dǎo)航事件岗憋,屏幕旋轉(zhuǎn)事件等在 MonkeySourceRandom 這個(gè)類(lèi)中有常量表示肃晚。下面是Android 9.0源碼中的數(shù)值常量。
public static final int FACTOR_TOUCH = 0; //輕觸
public static final int FACTOR_MOTION = 1; //滑動(dòng)
public static final int FACTOR_PINCHZOOM = 2; //縮放
public static final int FACTOR_TRACKBALL = 3; //軌跡球
public static final int FACTOR_ROTATION = 4; //旋轉(zhuǎn)
public static final int FACTOR_PERMISSION = 5; //權(quán)限
public static final int FACTOR_NAV = 6; //基本導(dǎo)航 上下左右鍵等
public static final int FACTOR_MAJORNAV = 7; //主要導(dǎo)航(一般會(huì)導(dǎo)致UI變化) 回退鍵 菜單鍵等
public static final int FACTOR_SYSOPS = 8; //系統(tǒng)事件
public static final int FACTOR_APPSWITCH = 9; //activity啟動(dòng)事件
public static final int FACTOR_FLIP = 10; //鍵盤(pán)翻轉(zhuǎn)
public static final int FACTOR_ANYTHING = 11; //其他事件
如果執(zhí)行過(guò)程中發(fā)生了崩潰仔戈,Monkey會(huì)停在崩潰的地方关串,使用 --ignore-crashes 可以在崩潰的時(shí)候繼續(xù)執(zhí)行后序操作 adb shell monkey —ignore-crashes 1000 。
程序ANR對(duì)于andorid應(yīng)用來(lái)說(shuō)是一個(gè)比較嚴(yán)重的問(wèn)題监徘,Monkey在執(zhí)行中遇到ANR的時(shí)候會(huì)停止晋修,執(zhí)定 --ignore-timeouts 參數(shù)可以讓monkey繼續(xù)執(zhí)行 adb shell monkey --ignore-timeouts 1000 。
使用 > 符號(hào)將日志輸出到特定的文件中查看比如 adb shell monkey —ignore-crashes 1000>d:\monkey.txt 凰盔,此文件中會(huì)告訴我們那個(gè)地方出了問(wèn)題墓卦,具體的錯(cuò)誤日志可以通過(guò) adb bugreport 命令將運(yùn)行日志導(dǎo)出來(lái)查看更詳細(xì)的信息
//6.0及以下設(shè)備
adb bugreport > bugreport.txt
//7.0及以上設(shè)備
adb bugreport bugreport.zip
Monkey 腳本
有時(shí)候我們不想讓它隨機(jī)執(zhí)行,通過(guò)腳本可以讓測(cè)試按照我們自定義的流程來(lái)執(zhí)行户敬。使用-f參數(shù)就可以執(zhí)行Monkey的腳本了 adb shell monkey -f
官網(wǎng)沒(méi)有介紹Monkey腳本的使用的文章落剪,可以參照sdk源碼中的寫(xiě)法。在 MonkeySourceScript.java 這個(gè)類(lèi)中可以參考尿庐。
Monkey腳本的主要命令:
1.DispatchPointer(downtime,eventTime,action,x,y,xpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags):手勢(shì)操作著榴,相當(dāng)于手指按到某個(gè)位置。參數(shù)x,y是手指按下的坐標(biāo)位置屁倔,坐標(biāo)位置可以通過(guò)DDMS中的工具UI Automator來(lái)獲取脑又,位置在sdk/tools/monitor中
2.DispatchPress[keycode] 按下系統(tǒng)的某個(gè)固定的按鍵,比如home鍵锐借,back鍵等问麸,在官網(wǎng) KeyEvent
這個(gè)類(lèi)中有對(duì)每種keycode含義的詳細(xì)介紹。
3.LaunchActivity(pkg_name, cl_name): 用來(lái)啟動(dòng)應(yīng)用 參數(shù)是 包名+類(lèi)名
4.UserWait:讓腳本暫停一段時(shí)間
5.UserWait(sleepTime):指定睡眠時(shí)間
6.RotateScreen(rotationDegree, persist):參數(shù)是旋轉(zhuǎn)角度+旋轉(zhuǎn)后是否停在當(dāng)前位置钞翔。0代表0度严卖,1代表90度 2代表180度 3代表 270度;第二個(gè)參數(shù) 0表示旋轉(zhuǎn)后恢復(fù),非0則表示固定不變
7.Tap(x, y,tapDuration):?jiǎn)螕魰r(shí)間 x y 是點(diǎn)擊屏幕的坐標(biāo) 點(diǎn)擊的時(shí)長(zhǎng)
8.Drag(xStart, yStart, xEnd, yEnd):在屏幕上滑動(dòng)參數(shù)是滑動(dòng)坐標(biāo)的起始點(diǎn)
9.LongPress(): 長(zhǎng)按2s
10.ProfileWait(): 等待5s
11.PressAndHold(x, y, pressDuration) :模擬長(zhǎng)按
12.PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End,y2End, stepCount): 模擬縮放
13.DispatchString(input): 輸入字符串
14RunCmd(cmd) :執(zhí)行shell命令布轿,比如截圖 screencap -p /data/temp/temp.png
15.DispatchFlip(true/false) :打開(kāi)或者關(guān)閉軟鍵盤(pán)
16.DeviceWakeUp() :?jiǎn)拘哑聊?/h6>
獲取某個(gè)界面元素在屏幕上的坐標(biāo)使用sdk中的工具uiautomatorviewer.bat位置在sdk/tools/bin/uiautomatorviewer.bat哮笆,雙擊即可運(yùn)行如下来颤。
開(kāi)始編寫(xiě)腳本測(cè)試系統(tǒng)計(jì)算器 定義一個(gè)腳本文件monkey.script
type= raw events
count= 10
speed= 1.0
start data >>
LaunchActivity(com.android.calculator2,com.android.calculator2.Calculator)
#點(diǎn)擊 6
#使用DispatchPointer(downtime,eventTime,action,x,y,xpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags)來(lái)完成
#第三個(gè)參數(shù)action 0是按下 1是抬起
#使用sdk中的uiautomatorviewer.bat工具來(lái)獲取x y的坐標(biāo) sdk/tools/bin/uiautomatorviewer.bat
DispatchPointer(0,0,0,600,1200,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,600,1200,0,0,0,0,0,0,0)
#等待1秒
UserWait(1000)
#點(diǎn)擊 + 號(hào)
DispatchPress(KEYCODE_PLUS)
UserWait(1000)
#點(diǎn)擊 9
DispatchPress(KEYCODE_9)
UserWait(1000);
#點(diǎn)擊 =
Tap(600,1600)
UserWait(1000)
#翻轉(zhuǎn)屏幕 參數(shù)0123分別代表0,90稠肘,180福铅,270
#第二個(gè)參數(shù) 0表示旋轉(zhuǎn)后恢復(fù),非0則表示固定不變
RotateScreen(2,1)
UserWait(500)
腳本需要運(yùn)行在手機(jī)上项阴,所以先上傳到手機(jī)上
adb push monkey.script /sdcard/monkey.script
執(zhí)行腳本
adb shell monkey -f /sdcard/monkey.script -v -v 1
執(zhí)行效果如下圖:
Monkey Server
Monkey Server可以讓我們從電腦端直接通過(guò)命令操控手機(jī)滑黔。Monkey Server在官方文檔中沒(méi)有介紹,不過(guò)源碼中有示例环揽,源碼示例可以在這里查看 README.NETWORK.txt
adb shell monkey --port 1080 &
adb forward tcp:1080 tcp:1080
telnet 127.0.0.1 1080
Monkey Server的常用命令:
key [down|up] keycode – 指定Keycode的按鍵事件(分按下略荡、彈起)
touch [down|up|move] x y – 指定坐標(biāo)的觸屏操作(分按下、彈起歉胶、移動(dòng))
trackball dx dy – 軌跡球操作
tap x y – 指定坐標(biāo)的觸屏操作
flip [open|close] – 調(diào)用軟鍵盤(pán)
wake – 喚醒設(shè)備
press keycode – 指定Keycode的按鍵事件
listvar – 列出所有的系統(tǒng)變量
getvar varname – 獲取給定系統(tǒng)變量值
quit – 退出當(dāng)前連接汛兜,且不接受新的連接
done – 退出當(dāng)前連接,但可以接受新的連接
type – 輸入字符
命令執(zhí)行成功之后會(huì)返回OK通今,注意操作退出telnet前序无,需要執(zhí)行done指令,否則再次連接衡创,會(huì)報(bào)端口已占用的錯(cuò)誤帝嗡。只能重啟設(shè)備以釋放端口。
一個(gè)一個(gè)的輸入命令來(lái)控制手機(jī)太麻煩璃氢,沒(méi)人愿意使用哟玷。Monkey Server也是可以編寫(xiě)腳本,Linux中可以直接編寫(xiě)shell腳本即可一也,Window中可以借助 wscript.shell 來(lái)完成
定義一個(gè)名為monkey_server_run.vbs的文件來(lái)寫(xiě)腳本
set sh=WScript.CreateObject("WScript.Shell")
WScript.Sleep 2000
sh.SendKeys "open 127.0.0.1 1080 {ENTER}"
WScript.Sleep 2000
sh.SendKeys "press KEYCODE_6 {ENTER}"
WScript.Sleep 2000
sh.SendKeys "press KEYCODE_NUMPAD_ADD {ENTER}"
WScript.Sleep 2000
sh.SendKeys "press KEYCODE_9 {ENTER}"
WScript.Sleep 2000
sh.SendKeys "press KEYCODE_NUMPAD_EQUALS {ENTER}"
WScript.Sleep 2000
sh.SendKeys "done {ENTER}"
WScript.Sleep 1000
注意:這里有個(gè)問(wèn)題巢寡,每次執(zhí)行sh.SendKeys后面的指令的時(shí)候,指令中間的空格都會(huì)莫名的消失導(dǎo)致執(zhí)行失敗椰苟,試了一些辦法之后也沒(méi)成功抑月,由于Monkey Server的用途也不是很大,前面的Monkey 腳本完全可以完成舆蝴,后面還有更加強(qiáng)大的MonkeyRunner谦絮,遂放棄。
還需要先提前啟動(dòng)應(yīng)用洁仗,所以使用一個(gè)bat批處理來(lái)完成下面的一些命令层皱。定義一個(gè)文件名為monkey_server.bat
adb forward tcp:1080 tcp:1080
adb shell am start -n com.android.calculator2/com.android.calculator2.Calculator
start telnet.exe
cscript //nologo .\monkey_server_run.vbs
寫(xiě)完之后雙擊monkey_server.bat即可運(yùn)行。
MonkeyRunner
MonkeyRunner也是Android SDK中自帶的一個(gè)黑盒測(cè)試工具赠潦,支持Pyhon和Java叫胖,可以實(shí)現(xiàn)Monkey無(wú)法實(shí)現(xiàn)的一些邏輯控制。
寫(xiě)完之后雙擊monkey_server.bat即可運(yùn)行她奥。
先說(shuō)說(shuō)這倆后啥區(qū)別呢瓮增?
Monkey是運(yùn)行在設(shè)備上的怎棱,可以脫離PC,MonkeyRunner運(yùn)行在PC上绷跑,往手機(jī)或模擬器上發(fā)送指令來(lái)測(cè)試拳恋。
Monkey一般用來(lái)做一些隨機(jī)性的測(cè)試,前面文章也寫(xiě)了你踩,官方文檔上就寫(xiě)了隨機(jī)測(cè)試怎么用诅岩,至于編寫(xiě)自定義腳本還需要自己看源碼讳苦,還是簡(jiǎn)單的腳本带膜。MonkeyRunner支持條件判斷,可以寫(xiě)出更強(qiáng)大的自定義測(cè)試腳本鸳谜。
onkeyRunner支持條件判斷膝藕,可以寫(xiě)出更強(qiáng)大的自定義測(cè)試腳本。
MonkeyRunner可以同時(shí)運(yùn)行多個(gè)測(cè)試設(shè)備咐扭,還可以將運(yùn)行結(jié)果截圖并跟已知的一個(gè)正確的截圖做比較芭挽。
開(kāi)始
想要運(yùn)行MonkeyRunner的程序袜爪,首先要打開(kāi)MonkeyRunner的控制界面,無(wú)論是官網(wǎng)還是網(wǎng)上的大部分文章說(shuō)的打開(kāi)方式都是雙擊打開(kāi)sdk/tools/monkeyrunner.bat薛闪。不過(guò)我的sdk中卻沒(méi)有,后來(lái)在sdk/tools/bin/monkeyrunner.bat找到了它豁延,可惜雙擊沒(méi)反應(yīng)昙篙,在cmd窗口中進(jìn)入到當(dāng)前文件夾執(zhí)行 monkeyrunner 命令報(bào)錯(cuò)
SWT folder '..\framework\x86_64' does not exist.
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.
MonkeyRunner包括三大模塊:
MonkeyRunner :
提供了將monkeyrunner程序連接到模擬器或者手機(jī)設(shè)備的方法焚辅。還提供了monkeyrunner程序創(chuàng)建界面和顯示內(nèi)置幫助的方法
MonkeyDevice : 提供了安裝卸載軟件,啟動(dòng) Activity以及向設(shè)備發(fā)送按鍵或者輕觸事件傻丝。
MonkeyImage :提供了截屏间影,將位圖轉(zhuǎn)換為各種格式,比較兩個(gè)MonkeyImage對(duì)象和將圖片寫(xiě)入文件的方法牙言。
這三個(gè)模塊都有啥方法可以供我們調(diào)用呢徒恋,官網(wǎng)有詳細(xì)方法列表和解說(shuō):
使用MonkeyRunner的時(shí)候monkeyrunner 工具不會(huì)自動(dòng)導(dǎo)入這些模塊带斑。要導(dǎo)入模塊使用下面的命令
from com.android.monkeyrunner import <module>
其中 是要導(dǎo)入的類(lèi)名稱(chēng)亲怠。我們可以在同一個(gè) from 語(yǔ)句中導(dǎo)入多個(gè)模塊焙格,只需用英文逗號(hào)分隔各模塊名稱(chēng)即可。
簡(jiǎn)單小例子:進(jìn)入monkeyrunner的命令行中輸入下面的指令驳庭,可以看到如何操作一臺(tái)設(shè)備
#導(dǎo)入MonkeyRunner和MonkeyDevice兩個(gè)模塊
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
#連接當(dāng)前設(shè)備并返回一個(gè)MonkeyDevice對(duì)象
device = MonkeyRunner.waitForConnection()
#安裝一個(gè)應(yīng)用不皆,返回值是Boolean類(lèi)型,可以根據(jù)返回值判斷安裝結(jié)果
device.installPackage('app-debug.apk')
#定義一個(gè)package變量
package="com.chs.androiddailytext"
#定義一個(gè)activity變量
activity="com.chs.androiddailytext.MainActivity"
#拼接成要啟動(dòng)的組件的名稱(chēng)
runComponent=package + '/' + activity
#啟動(dòng)組件
device.startActivity(component=runComponent)
#截屏
image=device.takeSnapshot()
#保存截屏的圖片
image.writeToFile('111.png','png')
#按下菜單鍵
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
MonkeyRunner的錄制回放工具
MonkeyRunner的錄制回放工具用起來(lái)很方便茸苇,手動(dòng)操作界面就可以自動(dòng)生成執(zhí)行腳本学密。不過(guò)不知道為啥官網(wǎng)并沒(méi)有介紹這倆的用法,需要到源碼中去把腳本拷貝過(guò)來(lái)自行查看: 點(diǎn)擊查源碼 传藏,將源碼中的monkey_recorder.py和monkey_playback.py兩個(gè)文件拷貝到monkeyrunner.bat的同級(jí)目錄下腻暮。
Monkey_recorder 錄制工具
Monkey_playback 回放工具
可以看到這倆文件都是python文件,所以電腦上需要安裝python的環(huán)境毯侦,具體安裝方法可以去 python 官網(wǎng)下載安裝
使用Monkey_recorder錄制
雙擊monkey_recorder.py文件就可以啟動(dòng)錄制工具了如下圖
在上圖的手機(jī)界面投影中哭靖,點(diǎn)擊相應(yīng)地方,它就會(huì)自動(dòng)生成該位置的點(diǎn)擊事件的腳本侈离,頭部有好幾個(gè)菜單试幽,這些菜單也能圖形化的來(lái)設(shè)置不同的事件
.mr
下面我們隨便點(diǎn)擊應(yīng)用中的一些位置,生成的腳本保存如下
TOUCH|{'x':924,'y':1180,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':465,'y':888,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':148,'y':752,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':560,'y':1708,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':911,'y':1684,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':182,'y':1704,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':243,'y':1856,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':104,'y':528,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
TOUCH|{'x':1366,'y':1848,'type':'downAndUp',}
WAIT|{'seconds':2.0,}
注意:如果我們沒(méi)有點(diǎn)擊Wait按鈕添加延時(shí)霍狰,它是不會(huì)自己添加延時(shí)的抡草,上面代碼中的延時(shí)操作都是自己打開(kāi)文件添加的,如果不添加延時(shí)PC這邊的指令可能嗖的一下就執(zhí)行完了蔗坯,而手機(jī)那邊可能剛執(zhí)行了兩個(gè)就完了康震,剩下的執(zhí)行也接收不到了。
使用monkey_playback.py播放
上面的文件生成了宾濒,下面開(kāi)始播放腿短,到monkeyrunner.bat所在目錄下執(zhí)行下面命令。如果不想每次都要該文件夾下執(zhí)行monkeyrunner的命令可以配置一下環(huán)境變量。
monkeyrunner %ANDROID_HOME%\tools\bin\monkey_playback.py F:\test\recorder.mr
recorder.mr需要寫(xiě)絕對(duì)路徑橘忱,相對(duì)路徑運(yùn)行不成功赴魁,另外運(yùn)行monkey_playback的時(shí)候需要把monkey_recorder停掉否則沒(méi)效果。我就是一開(kāi)始沒(méi)停掉結(jié)果運(yùn)行回放沒(méi)反應(yīng)钝诚,就是不動(dòng)也沒(méi)日志颖御,找了好久暈。
前面的操作方法基本上都是是基于touch事件的凝颇,touch事件是依賴(lài)于屏幕的坐標(biāo)值的潘拱,而Android手機(jī)的碎片化導(dǎo)致有N多種屏幕分辨率的手機(jī)。導(dǎo)致從一個(gè)手機(jī)上生成的腳本在別的手機(jī)上運(yùn)行部正確拧略,無(wú)法復(fù)用腳本芦岂。想要更好的重用的話(huà),可以使用界面上控件的id來(lái)做測(cè)試垫蛆。
使用控件的id來(lái)做測(cè)試禽最,需要用到EasyMonkeyDevice和By這兩個(gè)類(lèi),這哥倆的用法很網(wǎng)也沒(méi)有介紹袱饭,只能去源碼中查看 點(diǎn)擊查看源碼 川无。不過(guò)使用它的話(huà)需要測(cè)試的手機(jī)設(shè)備能打開(kāi)view server。一般情況下只有Android開(kāi)發(fā)版手機(jī) 宁赤、模擬器舀透、root后的手機(jī)才能打開(kāi)view server栓票。我嘗試了下模擬器沒(méi)有成功打開(kāi)view server就放棄了决左,畢竟官方也沒(méi)推薦使用。后面有更好用的UI Automator走贪、Espresso等工具佛猛。