前面几张详细的讲了MonkeyRunner的模块,包括MonkeyRunner、MonkeyDevice、MonkeyImage,也包括easyMonkeyDevice,还有getHierarchyViewer这样的一些方法。
这一章具体的使用python来编写自动化测试的脚本,利用MonkeyRunner完成自动化测试。
Case1
用press、touch方法分别触发计算器按键,并用MonkeyImage比较两次计算结果是否一致
python脚本的编写如下:
#第一次运算press
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage #导入模块
from com.android.monkeyrunner.easy import EasyMonkeyDevice,By #导入方法
device = MonkeyRunner.waitForConnection() #建立和设备的连接
print '******Case1:Use MonkeyDevice and MonkeyImage to check calculator result******' #输出
print '---- start calculator App'
device.startActivity('com.android.calculator2/.Calculator') #启动应用
print '---- calculator 3*8 with press method'
device.press('KEYCODE_3',MonkeyDevice.DOWN_AND_UP)
device.press('KEYCODE_NUMPAD_MULTIPLY',MonkeyDevice.DOWN_AND_UP)
device.press('KEYCODE_8',MonkeyDevice.DOWN_AND_UP)
device.press('KEYCODE_EQUALS',MonkeyDevice.DOWN_AND_UP)
easy = EasyMonkeyDevice(device)
image = device.takeSnapshot() #把当前的界面保存到MonkeyImage对象里
subimage = image.getSubImage(easy.locate(By.id('id/display')))
#打开uiautomatorviewer查看保存结果文本框的坐标范围[0,75][912,426],由于结果只在区域有半部分,所以坐标可以变为[300,75][912,426]
subimage = image.getSubImage((300,75,612,351)) #这样子就保存了第一次运算的结果
#第二次运算touch
print '---- calculator 4*6 with touch method'
easy.touch(By.id('id/digit4'),MonkeyDevice.DOWN_AND_UP)
easy.touch(By.id('id/mul'),MonkeyDevice.DOWN_AND_UP)
easy.touch(By.id('id/digit6'),MonkeyDevice.DOWN_AND_UP)
easy.touch(By.id('id/equal'),MonkeyDevice.DOWN_AND_UP)
image2 = device.takeSnapshot()
subimage2 = image2.getSubImage(easy.locate(By.id('id/display')))
if (subimage2.sameAs(subimage,0.8)):
print '[Pass] the resault of 3*8 and 4*6 is equal !'
else:
print '[Fail] the resault of 3*8 and 4*6 is not equal !'
把以上的脚本编写好命名为calculator_mr.py保存到C:Usershou-00下面,然后把脚本拖到命令行执行
Case2
用EasyMonkeyDevice来获取按键并触发,再用HierarchyViewer获取对象属性校验结果正确性
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
from com.android.monkeyrunner.easy import EasyMonkeyDevice,By
device = MonkeyRunner.waitForConnection()
print '******Case2: Use EasyMonkeyDevice to check claculator result******'
print '---- calculator 5*7 with EasyMonkeyDevice touch'
easy = EasyMonkeyDevice(device)
easy.touch(By.id('id/digit5'),MonkeyDevice.DOWN_AND_UP)
easy.touch(By.id('id/mul'),MonkeyDevice.DOWN_AND_UP)
easy.touch(By.id('id/digit7'),MonkeyDevice.DOWN_AND_UP)
easy.touch(By.id('id/equal'),MonkeyDevice.DOWN_AND_UP)
hv=device.getHierarchyViewer()
view = hv.findViewById('id/display')
str =view.children[0].namedProperties.get('text:mText').toString().split('=')[1].encode('utf8')
if (str == '35'):
print '[PASS] the result of 5*7 is correct!'
else:
print '[Fail] the result of 5*7 is correct! the result is -- ' +str
easy.touch(By.id('id/clear'),MonkeyDevice.DOWN_AND_UP)
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)