偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Monkey自己就能寫(xiě)腳本,你不試試嗎?

開(kāi)發(fā) 開(kāi)發(fā)工具
雖然之前是利用 Python + Monkey + adb 命令,完成的一連串自動(dòng)化測(cè)試的腳本。而 Monkey 本身也是支持編寫(xiě)腳本的,這個(gè)腳本叫 MonkeyScript(下文簡(jiǎn)稱(chēng)MS),只是 Google 官方,并沒(méi)有相關(guān)的文檔進(jìn)行描述。可我們依然可以從源碼中找到蛛絲馬跡。

[[213032]]

 一、前言

之前有講解過(guò) Android 下 Monkey 的腳本命令,而且還用 Python 寫(xiě)了一個(gè)非常簡(jiǎn)單的利用 Monkey 的測(cè)試腳本。

雖然之前是利用 Python + Monkey + adb 命令,完成的一連串自動(dòng)化測(cè)試的腳本。而 Monkey 本身也是支持編寫(xiě)腳本的,這個(gè)腳本叫 MonkeyScript(下文簡(jiǎn)稱(chēng)MS),只是 Google 官方,并沒(méi)有相關(guān)的文檔進(jìn)行描述??晌覀円廊豢梢詮脑创a中找到蛛絲馬跡。

本片文章適用于程序員和測(cè)試人員,會(huì)從源碼的角度來(lái)分析 Monkey Script,如果僅僅是測(cè)試人員,對(duì)此不感興趣,可以跳過(guò)相關(guān)小結(jié)進(jìn)行閱讀。希望閱讀者有一點(diǎn) ADB 和 Monkey 腳本的經(jīng)驗(yàn),這樣更方便閱讀。

二、什么是MonkeyScript

MS 是官方提供的,除了直接使用 Monkey 命令,像猴子一樣隨機(jī)亂點(diǎn)之外,還可以通過(guò)編寫(xiě)腳本的形式,完成一系列固定的操作。MS 提供一整套完善的 API 來(lái)進(jìn)行支持,主要還是基于坐標(biāo)點(diǎn)的操作,包含常用的:點(diǎn)擊、長(zhǎng)按、輸入、等待等操作。

1、MonkeyScript的使用

MS 雖然需要編寫(xiě)測(cè)試腳本,但是它還是屬于 Monkey 命令的一部分,需要通過(guò) Monkey 命令進(jìn)行啟動(dòng)、運(yùn)行。

Monkey 啟動(dòng) MonkeyScript 的命令如下:

  1. adb shell monkey -f <MonkeyScript> <EventCount> 

通過(guò) -f 參數(shù)即可指定一個(gè) MS 腳本進(jìn)行執(zhí)行。需要注意的是,因?yàn)?adb shell 的運(yùn)行環(huán)境是在待測(cè)試的 Android 設(shè)備上,所以需要將 MS 腳本 ,使用 adb pull 命令,傳到待測(cè)試的設(shè)備上,然后再進(jìn)行運(yùn)行。

2、MonkeyScript的常用API

MS 其實(shí)提供了非常完備的 API ,但是本篇文章并不想只是一個(gè)幫助文檔,這里僅介紹一些常用的 API ,想查看完整的 API ,可以選擇閱讀 MS 相關(guān)的源碼,或者可以在本公眾號(hào),回復(fù)關(guān)鍵字『MonkeyScriptAPI』即可得到完整的 API 文檔。

1、點(diǎn)擊事件(DispatchPointer)

DispatchPointer 命令用于向一個(gè)指定的坐標(biāo)位置,發(fā)送單個(gè)手勢(shì)消息,一般用它來(lái)模擬點(diǎn)擊的操作。

它完整的方法簽名是:

DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags)

其實(shí)這么多參數(shù),只需要關(guān)注action 、 x 、y 三個(gè)參數(shù)即可。

  • action :事件是按下還是抬起,0 表示按下,1 表示抬起。
  • x、y:表示當(dāng)前事件觸發(fā)的X軸和Y軸的坐標(biāo)。

也就是說(shuō),兩個(gè) DispatchPointer 命令加在一起,分別表示 按下 和 抬起 ,一組按下和抬起,就代表了一次點(diǎn)擊操作,其余的參數(shù),統(tǒng)一設(shè)置為 0 即可。

2、按鍵消息(DispatchKey)

DispatchKey 主要是用于發(fā)送一些 Android 標(biāo)準(zhǔn)的 EventKey 按鍵消息。只需要傳遞對(duì)應(yīng)的值就好了。

具體的鍵值,可以通過(guò)官網(wǎng)查詢(xún):

https://developer.android.com/reference/android/view/KeyEvent.html

DispatchKey 消息的方法前面和 DispatchPointer 一樣,所以同樣也只需要關(guān)注 action、x、y 三個(gè)參數(shù)即可。

3、開(kāi)啟關(guān)閉軟鍵盤(pán)(DispatchFlip)

DispatchFlip 命令用于打開(kāi)或者關(guān)閉軟鍵盤(pán)。它的方法簽名如下:

  1. DispatchFlip (keyboardOpen) 

其中的參數(shù),true 表示打開(kāi),false 表示關(guān)閉。

4、打開(kāi)指定的Activity(LaunchActivity)

LaunchActivity 命令用于打開(kāi)任意應(yīng)用的一個(gè)頁(yè)面,但是前提條件是打開(kāi)的Activity 需要屬性 android:exported 被設(shè)定為true,才可以通過(guò) LaunchActivity 打開(kāi)。它的方法簽名如下:

  1. LaunchActivity ( pkg_name , act_name ) 

它的兩個(gè)參數(shù),分別表示打開(kāi)的 App 的包名和打開(kāi)的 Activity 的名稱(chēng)。

5、等待(UserWait)

UserWait 命令用于讓腳本中斷執(zhí)行一段時(shí)間。因?yàn)槭悄_本自動(dòng)執(zhí)行,多個(gè)事件之間執(zhí)行的速度會(huì)非常的快,有時(shí)候我們需要等待一段時(shí)間,讓設(shè)備響應(yīng)剛才執(zhí)行的事件,需要在等待一段時(shí)間之后,再繼續(xù)執(zhí)行腳本,這個(gè)時(shí)候就可以使用 UserWait 。

它的方法簽名如下:

  1. UserWait ( sleepTime ) 

sleepTime 的單位是毫秒。

6、輸入字符串(DispatchString)

DispatchString 命令用于輸入一個(gè)字符串。

它的方法簽名如下:

  1. DispatchString( input ) 

沒(méi)什么好解釋的, input 就是一個(gè)字符串即可,但是 MS 對(duì)中文的支持并不好,所以盡量輸入英文的測(cè)試數(shù)據(jù)。

7、運(yùn)行 Shell 命令(RunCmd)

RunCmd 命令用于在設(shè)備上運(yùn)行 shell 命令。當(dāng)然這些 shell 命令必須是當(dāng)前待測(cè)試設(shè)備支持的 shell 命令。

它的方法簽名如下:

  1. RunCmd ( cmd )   

參數(shù) cmd 就是需要執(zhí)行的 shell 命令。

8、鍵盤(pán)事件(DispatchPress)

DispatchPress 命令用于模擬敲擊鍵盤(pán)的事件。

它的方法簽名如下:

DispatchPress( keyName )

三、MonkeyScript的源碼分析

雖然,Google 官方并沒(méi)有提供對(duì) MS 詳細(xì)講解的 API 文檔,但是我們是可以通過(guò)源碼來(lái)分析出 MS 支持的API的。

MS 的源碼文件是:MonkeySourceScript.java

可以在 AndroidXref 網(wǎng)站在線查看源代碼:

http://androidxref.com/5.1.1_r6/xref/development/cmds/monkey/src/com/android/commands/monkey/MonkeySourceScript.java

這里以 5.1.1 為例子,進(jìn)行講解,其實(shí)這一塊的代碼變動(dòng)非常的少,隨手找一個(gè)版本了解即可。

在源碼中,所有我們上面介紹的 API 都是以一個(gè) static final 的形式被聲明。這里簡(jiǎn)單就 LaunchActivity 的方法的源碼進(jìn)行講解,其他的 API 其實(shí)也大同小異。

如源碼所示,LaunchActiviity 會(huì)以數(shù)組的形式接收兩個(gè)參數(shù),分別表示 PackageName 和 Activity 的 ClassName,下面具體對(duì)應(yīng)的實(shí)現(xiàn),我們就不細(xì)看了。再參照上面介紹的 API ,就可以很清晰的定位出方法和參數(shù)的含義了。

四、舉個(gè)例子

介紹了 MS 的 API 和在源碼中的實(shí)現(xiàn),當(dāng)然需要寫(xiě)個(gè) Demo 才是一個(gè)完整的技術(shù)文章。

1、測(cè)試需要一個(gè)待測(cè)試的App

既然是為了測(cè)試,就需要一個(gè)待測(cè)試的 App ,這里簡(jiǎn)單編寫(xiě)一個(gè)頁(yè)面,模擬一個(gè)用戶(hù)登錄的操作,兩個(gè)對(duì)話框,一個(gè)表示 用戶(hù)名 一個(gè)表示 密碼,然后點(diǎn)擊 Login 進(jìn)行登錄。這個(gè)待測(cè)試的App,無(wú)論填寫(xiě)什么,都是彈出提示登錄成功,***將輸入的內(nèi)容清空。

2、編寫(xiě) MonkeyScript 文件

有了待測(cè)試的 App ,我們就可以開(kāi)始編寫(xiě) MonkeyScript 腳本文件了。

MS 腳本,只要是文本即可,不關(guān)心后綴是什么。一般來(lái)說(shuō),會(huì)以.script 或者 .mks來(lái)作為后綴,標(biāo)識(shí)它是一個(gè) Monkey 腳本。

MS 腳本雖然有一些指定的 API ,但是也有一些固定的腳本頭,需要寫(xiě)在腳本的最前面。

  1. # 控制 monkey 發(fā)送消息的 Monkey 頭 
  2. count=10 
  3. speed=1.0 
  4. start data>> 
  5. # 在此之下,編寫(xiě) monkey 腳本命令 
  6. # ... 

在腳本中,腳本頭是一直不變動(dòng)的,為了避免寫(xiě)錯(cuò),可以直接復(fù)制粘貼最為保險(xiǎn)。在 start data>> 之后就可以正式開(kāi)始編寫(xiě) monkey 腳本了,在腳本中,使用 # 號(hào),對(duì)單行進(jìn)行注釋。

接下來(lái)就開(kāi)始利用 MS 提供的 API 進(jìn)行腳本的編寫(xiě)。首先我們需要熟悉測(cè)試的步驟。

步驟如下:

  1. 啟動(dòng)App。
  2. 點(diǎn)擊用戶(hù)名的輸入框,輸入 250。
  3. 點(diǎn)擊密碼的輸入框,輸入 abcdef。
  4. 點(diǎn)擊 LOGIN 按鈕,彈出 Toast 提示登錄成功。
  5. 此次測(cè)試結(jié)束。

按照此步驟,編寫(xiě)測(cè)試腳本,如下:

  1. count = 1 
  2. speed = 1.0 
  3. start data >> 
  4.  
  5. LaunchActivity(com.example.cxmy.monkeyscriptdemo,com.example.cxmy.monkeyscriptdemo.MainActivity) 
  6. UserWait(1000) 
  7.  
  8. # 點(diǎn)擊密碼框 
  9. DispatchPointer(10000,10000,0,68,345,0,0,0,0,0,0,0) 
  10. DispatchPointer(10000,10000,1,68,345,0,0,0,0,0,0,0) 
  11. UserWait(100) 
  12.  
  13. DispatchPress(KEYCODE_2) 
  14. UserWait(100) 
  15. DispatchPress(KEYCODE_5) 
  16. UserWait(100) 
  17. DispatchPress(KEYCODE_0) 
  18. UserWait(100) 
  19.  
  20. # 點(diǎn)擊密碼框 
  21. DispatchPointer(10000,10000,0,68,446,0,0,0,0,0,0,0) 
  22. DispatchPointer(10000,10000,1,68,446,0,0,0,0,0,0,0) 
  23. UserWait(100) 
  24.  
  25. DispatchString(abcdef) 
  26. UserWait(100) 
  27.  
  28. DispatchPointer(10000,10000,0,548,627,0,0,0,0,0,0,0) 
  29. DispatchPointer(10000,10000,1,548,627,0,0,0,0,0,0,0) 
  30. UserWait(100) 

注意這里分別使用了 DispatchPress 和 DispatchString 來(lái)分別使用,就是為了做演示,實(shí)際你可以依賴(lài)場(chǎng)景選擇使用的 API 。而其中涉及到坐標(biāo)點(diǎn)的問(wèn)題,這個(gè)在后面會(huì)講解如何獲取控件的坐標(biāo)點(diǎn)。

編寫(xiě)好腳本,保存為 monkey.mks 文件,并通過(guò) adb push 將其上傳到待測(cè)試的設(shè)備中。

  1. adb push monkey.mks /data/local/tmp/ 

然后通過(guò) monkey -f 執(zhí)行此腳本,例如下面執(zhí)行 10 次。

  1. adb shell monkey -f /data/local/tmp/monkey.mks 10 

執(zhí)行完成之后,可以在控制臺(tái),看到輸出的 Log 信息。

在執(zhí)行的過(guò)程中,就可以看到 MS 會(huì)自動(dòng)啟動(dòng)我們待測(cè)試的 App ,然后按照我們的編寫(xiě)的測(cè)試腳本,進(jìn)行重復(fù)執(zhí)行 10 次。

 

3、控件坐標(biāo)點(diǎn)的獲取

網(wǎng)上很多推薦獲取坐標(biāo)點(diǎn)的方式,是使用 android-sdk/tools 目錄下,提供的 uiautomatorviewer 工具來(lái)獲取。但是這種方式非常的繁瑣,而實(shí)際上,我們又不需要如此精確的坐標(biāo)點(diǎn),畢竟控件那么大,只要點(diǎn)擊的坐標(biāo)落在控件的位置上,就滿(mǎn)足我們的需要。

那么我推薦另外一種更簡(jiǎn)單的方式,來(lái)獲取當(dāng)前你看見(jiàn)的,在待測(cè)試設(shè)備上的控件的坐標(biāo)點(diǎn)的定位方式。那就是利用 Android 設(shè)備的開(kāi)發(fā)者選項(xiàng)。

設(shè)置 → 開(kāi)發(fā)者選項(xiàng) → 指針位置 ,將這個(gè)屬性開(kāi)啟之后,當(dāng)手指在屏幕上滑動(dòng)的時(shí)候,就可以在頂部看到當(dāng)前觸摸點(diǎn)的 X、Y 軸的坐標(biāo),這就是我們需要的。

開(kāi)發(fā)者選項(xiàng)不是默認(rèn)可見(jiàn)的,你需要自行開(kāi)啟開(kāi)發(fā)者模式,之后再進(jìn)行此操作。

五、總結(jié)

MS 提供的API非常的方便,可以利用它們做一些自動(dòng)化操作。

【本文為51CTO專(zhuān)欄作者“張旸”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)微信公眾號(hào)聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

 

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2010-08-16 10:10:22

SQL腳本

2024-03-11 08:21:49

2016-09-07 12:44:43

2021-11-12 06:11:00

M1 MacLinuxCanonical

2022-07-19 07:30:06

BigDecimal運(yùn)算float

2020-08-17 15:25:25

HTMLPython網(wǎng)頁(yè)

2010-08-23 10:46:52

英特爾

2019-10-10 09:35:01

分庫(kù)分表JDK

2021-01-27 11:36:34

代碼開(kāi)發(fā)工具

2020-07-14 07:48:19

Java對(duì)象JVM

2013-06-07 09:42:45

微信移動(dòng)應(yīng)用營(yíng)銷(xiāo)工具

2023-09-07 17:11:07

畫(huà)質(zhì)評(píng)估工具

2018-10-15 15:24:18

Python函數(shù)代碼

2022-08-14 22:35:37

EurekaConsul

2022-11-11 10:01:35

代碼Copilot函數(shù)

2012-04-27 10:13:08

云計(jì)算數(shù)據(jù)IaaS

2016-01-21 09:55:51

2022-04-01 09:01:55

Dubbo接口系統(tǒng)

2021-08-10 22:49:20

Windows 11Windows微軟

2020-01-14 17:02:20

Windows 7Windows 10微軟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)