The test case or script is created as usual, but when the --multi-device option is present in the command line, the statements generated will be slightly different, still you can easily recognize them. These statements will include support for several devices using python's list comprehension.
For example, a typical self.vc.dump(window=-1) will become
[vc.dump(window=-1) for vc in self.allVcs()]
that is, for all the ViewClient's dump the content of the default window. You may wonder where the list of all ViewClient's obtained by self.allVcs() comes from. CulebraTestCase class handles multiple devices in its setUp() method and it's there where the lists of all devices, serial numbers and ViewClient's are handled
self.devices.append(ConnectedDevice(serialno=serialno, device=device, vc=vc))
Everything is handled automatically, so there's nothing to worry about. If only one device is connected to adb or a single serial number is passed to the test case as an argument, then the test case behaves exactly as single-device. However, if more than one device is connected to adb and they are specified on the command line the multi-device capabilities kicks-in and the test is run on all devices at the same time.
The special command line keyword all can be used to mean all the connected devices.
This trivial test for Calculator generated using
shows multi-device capabilities.
This trivial test for Calculator generated using
$ culebra --gui --multi-device \
--unit-test-class \
--do-not-verify-screen-dump \
-o ~/tmp/multi.py
--unit-test-class \
--do-not-verify-screen-dump \
-o ~/tmp/multi.py
shows multi-device capabilities.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013-2014 Diego Torres Milano
Created on 2015-05-19 by Culebra v10.5.1
__ __ __ __
/ \ / \ / \ / \
____________________/ __\/ __\/ __\/ __\_____________________________
___________________/ /__/ /__/ /__/ /________________________________
| / \ / \ / \ / \ \___
|/ \_/ \_/ \_/ \ o \
\_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''
import re
import sys
import os
import unittest
try:
sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
pass
from com.dtmilano.android.viewclient import ViewClient, CulebraTestCase
TAG = 'CULEBRA'
class CulebraTests(CulebraTestCase):
@classmethod
def setUpClass(cls):
cls.kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
cls.kwargs2 = {'compresseddump': True, 'startviewserver': True, 'forceviewserveruse': False, 'autodump': False, 'ignoreuiautomatorkilled': True}
cls.options = {'start-activity': None, 'device-art': None, 'use-jar': False, 'multi-device': True, 'unit-test-class': True, 'save-screenshot': None, 'use-dictionary': False, 'glare': False, 'dictionary-keys-from': 'id', 'scale': 1, 'find-views-with-content-description': True, 'window': -1, 'orientation-locked': None, 'save-view-screenshots': None, 'find-views-by-id': True, 'log-actions': False, 'use-regexps': False, 'null-back-end': False, 'auto-regexps': None, 'do-not-verify-screen-dump': True, 'verbose-comments': False, 'gui': True, 'find-views-with-text': True, 'prepend-to-sys-path': True, 'drop-shadow': False, 'output': '/Users/diego/tmp/multi2.py', 'unit-test-method': None, 'interactive': False}
cls.sleep = 5
def setUp(self):
super(CulebraTests, self).setUp()
def tearDown(self):
super(CulebraTests, self).tearDown()
def preconditions(self):
if not super(CulebraTests, self).preconditions():
return False
return True
def testSomething(self):
if not self.preconditions():
self.fail('Preconditions failed')
_s = CulebraTests.sleep
_v = CulebraTests.verbose
[_vc.dump(window=-1) for _vc in self.allVcs()]
[_vc.findViewWithTextOrRaise(u'2').touch() for _vc in self.allVcs()]
[_vc.sleep(_s) for _vc in self.allVcs()]
[_vc.dump(window=-1) for _vc in self.allVcs()]
[_vc.findViewWithContentDescriptionOrRaise(u'''plus''').touch() for _vc in self.allVcs()]
[_vc.sleep(_s) for _vc in self.allVcs()]
[_vc.dump(window=-1) for _vc in self.allVcs()]
[_vc.findViewWithTextOrRaise(u'1').touch() for _vc in self.allVcs()]
[_vc.sleep(_s) for _vc in self.allVcs()]
[_vc.dump(window=-1) for _vc in self.allVcs()]
[_vc.findViewWithContentDescriptionOrRaise(u'''equals''').touch() for _vc in self.allVcs()]
[_vc.sleep(_s) for _vc in self.allVcs()]
[_vc.dump(window=-1) for _vc in self.allVcs()]
if __name__ == '__main__':
CulebraTests.main()
Then, when you run the test with several devices connected as
$ ~/tmp/multi.py -s all
you will obtain something like this
No comments:
Post a Comment