1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 """Run specific test on specific environment."""
11 from pylib
import constants
12 from pylib
.base
import base_test_result
13 from pylib
.remote
.device
import appurify_sanitized
14 from pylib
.remote
.device
import remote_device_test_run
15 from pylib
.remote
.device
import remote_device_helper
18 class RemoteDeviceUirobotTestRun(remote_device_test_run
.RemoteDeviceTestRun
):
19 """Run uirobot tests on a remote device."""
22 def __init__(self
, env
, test_instance
):
26 env: Environment the tests will run in.
27 test_instance: The test that will be run.
29 super(RemoteDeviceUirobotTestRun
, self
).__init
__(env
, test_instance
)
32 def TestPackage(self
):
33 return self
._test
_instance
.package_name
36 def _TriggerSetUp(self
):
37 """Set up the triggering of a test run."""
38 logging
.info('Triggering test run.')
40 if self
._env
.device_type
== 'Android':
41 default_runner_type
= 'android_robot'
42 elif self
._env
.device_type
== 'iOS':
43 default_runner_type
= 'ios_robot'
45 raise remote_device_helper
.RemoteDeviceError(
46 'Unknown device type: %s' % self
._env
.device_type
)
48 self
._app
_id
= self
._UploadAppToDevice
(self
._test
_instance
.app_under_test
)
49 if not self
._env
.runner_type
:
50 runner_type
= default_runner_type
51 logging
.info('Using default runner type: %s', default_runner_type
)
53 runner_type
= self
._env
.runner_type
55 self
._test
_id
= self
._UploadTestToDevice
(
56 'android_robot', None, app_id
=self
._app
_id
)
57 config_body
= {'duration': self
._test
_instance
.minutes
}
58 self
._SetTestConfig
(runner_type
, config_body
)
61 # TODO(rnephew): Switch to base class implementation when supported.
63 def _UploadTestToDevice(self
, test_type
, test_path
, app_id
=None):
65 logging
.info("Ignoring test path.")
67 'access_token':self
._env
.token
,
68 'test_type':test_type
,
71 with appurify_sanitized
.SanitizeLogging(self
._env
.verbose_count
,
73 test_upload_res
= appurify_sanitized
.utils
.post('tests/upload',
75 remote_device_helper
.TestHttpResponse(
76 test_upload_res
, 'Unable to get UiRobot test id.')
77 return test_upload_res
.json()['response']['test_id']
80 def _ParseTestResults(self
):
81 logging
.info('Parsing results from remote service.')
82 results
= base_test_result
.TestRunResults()
83 if self
._results
['results']['pass']:
84 result_type
= base_test_result
.ResultType
.PASS
86 result_type
= base_test_result
.ResultType
.FAIL
87 results
.AddResult(base_test_result
.BaseTestResult('uirobot', result_type
))