monkeyrunner自動化測試工具--腳本實例

最近研究monkeyrunner,感覺還是挺好用的,最終陸續耗費兩天時間完成以下腳本。有寫的不好的地方,歡迎批評指導,共同進步。

該腳本實現以下功能:

自動識別多設備

自動在各設備運行app

自動將運行結果截圖

自動對比運行結果

首先 adb devices   >E:\devices.txt

腳本

#導入我們需要用到的包和類並且起別名
import sys,time,datetime
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
from com.android.chimpchat.hierarchyviewer import HierarchyViewer #根據ID找到ViewNode,對viewnode的一些操作等
from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根據ID進行訪問方法touch、drag等
from com.android.monkeyrunner.easy import By    #根據ID返回PyObject的方法
from com.android.hierarchyviewerlib.models import ViewNode as vn #代表一個控件,可獲取控件屬性

templist = []#設置一個空列表,用來放設備內容
deviceslist =[]#設置一個空列表,用來放分割後的設備內容
devices = []	#設置一個空列表,用來讀取放分割後的設備內容
snapshot = []#設置一個空列表,用來讀取截圖
text = []#設置一個空列表,用來讀取結果文本

#已經將設備列表導出adb devices>E:\devices.txt
#將設備列表導入到templist中
f = open("E:\devices.txt")#讀取文件
while True:
	line = f.readline()#逐行讀
	print line 
	if line:
		templist.append(line.strip())#刪除所讀行的空格,增加到templist列表中,默認每個元素後都有\tdevices
		print templist
	else:
		break;
f.close() #關閉
print templist
templist.pop(0) #刪除下標爲0的元素,現在templist列表元素爲['emulator-5554\tdevices','emulator-5556\tdevices','']
print templist
print len(templist)

#將每個元素使用\t分割,並導入到新列表 deviceslist中
for i in range(0,len(templist)-1):
	deviceslist.append(templist[i].split('\t')) #deviceslist列表元素爲[['emulator-5554','devices'],['emulator-5556','devices']]	
	
	
for i in range(len(deviceslist)):#遍歷每個元素
	print 'current devices:'
	print deviceslist[i][0]#只讀取元素的前半部分
	devices.append(mr.waitForConnection(1.0,deviceslist[i][0]))##devices列表元素爲['emulator-5554','emulator-5556']
	if not devices:
		print >> sys.stderr,"fail"
		sys.exit(1)
	else:
		print 'connnect success'
	#啓動activity
	devices[i].startActivity('com.sky.jisuanji/.JisuanjizixieActivity')
	
	easy_device = EasyMonkeyDevice(devices[i])#初始化EasyMonkeyDevice模塊,必須放在startActivity之後,用來通過ID訪問控件
	hViewer = devices[i].getHierarchyViewer() # 對當前UI視圖進行解析
	
	#2、執行計算1+2=3
	easy_device.touch(By.id('id/qingchu'),devices[i].DOWN_AND_UP)
	easy_device.touch(By.id('id/btn1'),devices[i].DOWN_AND_UP)
	easy_device.touch(By.id('id/jia'),devices[i].DOWN_AND_UP)
	easy_device.touch(By.id('id/btn2'),devices[i].DOWN_AND_UP)
	easy_device.touch(By.id('id/denyu'),devices[i].DOWN_AND_UP)  #=
	mr.sleep(5.0)
	
	#進行takeSnapshot截圖
	snapshot.append(devices[i].takeSnapshot())
	print 'end snapshot'
	#創建時間字符串
	t = time.strftime("%Y-%m-%d-%X",time.localtime())
	t = t.replace(":","-")
	#保存截圖
	snapshot[0].writeToFile(deviceslist[i][0]+'-'+t+'-'+'.png','png');
	snapshot.pop()

	#通過By來獲取
	text.append(easy_device.getText(By.id('id/text')))
	print text[i].encode('utf-8')#打印結果
	
#比較設備輸出的結果
for i in range(len(devices)-1):
	for j in range(1,len(devices)):
		if text[i]==text[j]:
			print 'true'
		else:
			print 'false'	

效果圖:


最終運行結果:

List of devices attached 

['List of devices attached']
emulator-5554	device

['List of devices attached', 'emulator-5554\tdevice']
emulator-5556	device

['List of devices attached', 'emulator-5554\tdevice', 'emulator-5556\tdevice']


['List of devices attached', 'emulator-5554\tdevice', 'emulator-5556\tdevice', '']

['List of devices attached', 'emulator-5554\tdevice', 'emulator-5556\tdevice', '']
['emulator-5554\tdevice', 'emulator-5556\tdevice', '']
3
current devices:
emulator-5554
connnect success
end snapshot
3.0
current devices:
emulator-5556
connnect success
end snapshot
3.0
true


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章