Android自動(dòng)化測(cè)試-Monkey和MonkeyRunner

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)行如下来颤。


image.png

開(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í)行效果如下圖:


image.png

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)錄制工具了如下圖


image.png

在上圖的手機(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等工具佛猛。

歡迎加入我們。642830685坠狡,群继找,領(lǐng)取最新Python自動(dòng)化、接口資料逃沿。大家一起交流

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婴渡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凯亮,更是在濱河造成了極大的恐慌边臼,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件假消,死亡現(xiàn)場(chǎng)離奇詭異柠并,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)臼予,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸣戴,“玉大人,你說(shuō)我怎么就攤上這事粘拾≌” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵缰雇,是天一觀的道長(zhǎng)酬滤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)寓涨,這世上最難降的妖魔是什么盯串? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮戒良,結(jié)果婚禮上体捏,老公的妹妹穿的比我還像新娘。我一直安慰自己糯崎,他們只是感情好几缭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著沃呢,像睡著了一般年栓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上薄霜,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天某抓,我揣著相機(jī)與錄音,去河邊找鬼惰瓜。 笑死否副,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崎坊。 我是一名探鬼主播备禀,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奈揍!你這毒婦竟也來(lái)了曲尸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤男翰,失蹤者是張志新(化名)和其女友劉穎另患,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奏篙,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柴淘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年迫淹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片为严。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敛熬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出第股,到底是詐尸還是另有隱情应民,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布夕吻,位于F島的核電站诲锹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涉馅。R本人自食惡果不足惜归园,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稚矿。 院中可真熱鬧庸诱,春花似錦、人聲如沸晤揣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昧识。三九已至钠四,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跪楞,已是汗流浹背缀去。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留习霹,地道東北人朵耕。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像淋叶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伪阶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348