2014年7月11日 星期五

丟掉Monkeyrunner投向AndroidViewClient的懷抱吧!


Monkeyrunner是一套android device自動化測試的工具

腳本使用jython語言

詳細的介紹如下:
http://developer.android.com/tools/help/monkeyrunner_concepts.html

不過由於monkeydevice的takeSnapshot method丟出exception的機率太高

導致我不得不放棄monkeyrunner轉向AndroidViewClient

AndroidViewClient是純python語言寫成

原始碼在此
https://github.com/dtmilano/AndroidViewClient
Download

安裝方式為
windows內環境變數加上
變數:
ANDROID_VIEW_CLIENT_HOME
值:
C:\AndroidViewClient-master\AndroidViewClient\src

之後就能夠直接於python內調用了

連接上deivce並screenshot的範例腳本


from com.dtmilano.android.adb.adbclient import AdbClient

if len(sys.argv) >= 2:
    serialno = sys.argv[1]
else:
    serialno = '.*'

device = AdbClient(serialno=serialno)
img = device.takeSnapshot()




另外monkeyimage的功能必須使用PIL (Python Image Library)來替代
http://www.pythonware.com/products/pil/
讀取電腦中的picimg圖片與拍screenshot之後切圖下來的picimg2作比對的腳本
     

        #Monkeyrunner
picimp = MonkeyRunner.loadImageFromFile('./pic/picimp.png')
picimp2=device1.takeSnapshot()
picimp2=picimp2.getSubImage((300,660,150,70))
        if picimp.sameAs(picimp2) == 1:
     
        #AndroidViewClient with PIL
picimp = Image.open("../pic/picimp.png")
picimp2= device1.takeSnapshot(reconnect=True)
picimp2= picimp2.transform((150,60),Image.EXTENT, (300,660,450,720))
        if device1.sameAs(picimp, picimp2, 1)== 1:


整體來說
AndroidViewClient效率高出Monkeyrunner許多
而且takesnapshot也不像monkeydevice一樣太多的出錯
目前實測沒有出錯過
如果要跑長時間的測試有包含到takesnapshot
使用AndroidViewClient會好上許多

補充:
monkeyrunner下的read()與python的read()不太一樣
我的python file.read()讀不出tshark所擷取的封包資訊
反而monkeyrunner下使用的file.read()就能夠讀取出來
估計是monkeyrunner使用java的直譯器的關係

沒有留言:

張貼留言