Index: build/android/pylib/instrumentation/test_runner.py |
diff --git a/build/android/pylib/instrumentation/test_runner.py b/build/android/pylib/instrumentation/test_runner.py |
index ff0dcbdd3c54b0c2fe537baad94f416fd8f920cd..4f8cdcf304a1ff234415a93a9d279c9ecffdf649 100644 |
--- a/build/android/pylib/instrumentation/test_runner.py |
+++ b/build/android/pylib/instrumentation/test_runner.py |
@@ -339,44 +339,26 @@ class TestRunner(base_test_runner.BaseTestRunner): |
"1 minute for timeout.").format(test)) |
return 1 * 60 |
- def RunInstrumentationTest(self, test, test_package, instr_args, timeout): |
+ def _RunTest(self, test, timeout): |
"""Runs a single instrumentation test. |
Args: |
test: Test class/method. |
- test_package: Package name of test apk. |
- instr_args: Extra key/value to pass to am instrument. |
timeout: Timeout time in seconds. |
Returns: |
- An instance of InstrumentationTestResult |
+ The raw output of am instrument as a list of lines. |
""" |
# Build the 'am instrument' command |
instrumentation_path = ( |
- '%s/%s' % (test_package, self.options.test_runner)) |
+ '%s/%s' % (self.test_pkg.GetPackageName(), self.options.test_runner)) |
cmd = ['am', 'instrument', '-r'] |
- for k, v in instr_args.iteritems(): |
+ for k, v in self._GetInstrumentationArgs().iteritems(): |
cmd.extend(['-e', k, "'%s'" % v]) |
cmd.extend(['-e', 'class', "'%s'" % test]) |
cmd.extend(['-w', instrumentation_path]) |
- |
- time_ms = lambda: int(time.time() * 1000) |
- |
- # Run the test. |
- start_ms = time_ms() |
- try: |
- instr_output = self.device.RunShellCommand( |
- cmd, timeout=timeout, retries=0) |
- except device_errors.CommandTimeoutError: |
- return test_result.InstrumentationTestResult( |
- test, base_test_result.ResultType.TIMEOUT, start_ms, |
- time_ms() - start_ms) |
- duration_ms = time_ms() - start_ms |
- |
- # Parse the test output |
- _, _, statuses = self._ParseAmInstrumentRawOutput(instr_output) |
- return self._GenerateTestResult(test, statuses, start_ms, duration_ms) |
+ return self.device.RunShellCommand(cmd, timeout=timeout, retries=0) |
@staticmethod |
def _ParseAmInstrumentRawOutput(raw_output): |
@@ -502,19 +484,28 @@ class TestRunner(base_test_runner.BaseTestRunner): |
timeout = (self._GetIndividualTestTimeoutSecs(test) * |
self._GetIndividualTestTimeoutScale(test) * |
self.tool.GetTimeoutScale()) |
+ |
+ start_ms = 0 |
+ duration_ms = 0 |
try: |
self.TestSetup(test) |
- result = self.RunInstrumentationTest( |
- test, self.test_pkg.GetPackageName(), self._GetInstrumentationArgs(), |
- timeout) |
+ |
+ time_ms = lambda: int(time.time() * 1000) |
+ start_ms = time_ms() |
+ raw_output = self._RunTest(test, timeout) |
+ duration_ms = time_ms() - start_ms |
+ |
+ # Parse the test output |
+ _, _, statuses = self._ParseAmInstrumentRawOutput(raw_output) |
+ result = self._GenerateTestResult(test, statuses, start_ms, duration_ms) |
results.AddResult(result) |
- except (device_errors.CommandTimeoutError, |
- device_errors.DeviceUnreachableError) as e: |
- message = str(e) |
- if not message: |
- message = 'No information.' |
+ except device_errors.CommandTimeoutError as e: |
+ results.AddResult(test_result.InstrumentationTestResult( |
+ test, base_test_result.ResultType.TIMEOUT, start_ms, duration_ms, |
+ log=str(e) or 'No information')) |
+ except device_errors.DeviceUnreachableError as e: |
results.AddResult(test_result.InstrumentationTestResult( |
- test, base_test_result.ResultType.CRASH, int(time.time() * 1000), 0, |
- log=message)) |
+ test, base_test_result.ResultType.CRASH, start_ms, duration_ms, |
+ log=str(e) or 'No information')) |
self.TestTeardown(test, results) |
return (results, None if results.DidRunPass() else test) |