Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(378)

Unified Diff: build/android/pylib/instrumentation/test_runner.py

Issue 12921004: [Android] Enable running uiautomator tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/pylib/instrumentation/test_package.py ('k') | build/android/pylib/uiautomator/__init__.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 a058c4c13b52e1a57908851811338e20ec9136b6..6948acdac0cdc692963cefa30952e8d66a3d355b 100644
--- a/build/android/pylib/instrumentation/test_runner.py
+++ b/build/android/pylib/instrumentation/test_runner.py
@@ -21,8 +21,6 @@ from pylib import valgrind_tools
from pylib.base import base_test_runner
from pylib.base import test_result
-import apk_info
-
_PERF_TEST_ANNOTATION = 'PerfTest'
@@ -47,8 +45,8 @@ class TestRunner(base_test_runner.BaseTestRunner):
'/chrome-profile*')
_DEVICE_HAS_TEST_FILES = {}
- def __init__(self, options, device, shard_index, coverage, apks,
- ports_to_forward):
+ def __init__(self, options, device, shard_index, coverage, test_pkg,
+ ports_to_forward, is_uiautomator_test=False):
"""Create a new TestRunner.
Args:
@@ -64,34 +62,30 @@ class TestRunner(base_test_runner.BaseTestRunner):
device: Attached android device.
shard_index: Shard index.
coverage: Collects coverage information if opted.
- apks: A list of ApkInfo objects need to be installed. The first element
- should be the tests apk, the rests could be the apks used in test.
- The default is ChromeTest.apk.
+ test_pkg: A TestPackage object.
ports_to_forward: A list of port numbers for which to set up forwarders.
Can be optionally requested by a test case.
+ is_uiautomator_test: Whether this is a uiautomator test.
Raises:
Exception: if coverage metadata is not available.
"""
super(TestRunner, self).__init__(device, options.tool, options.build_type)
self._lighttp_port = constants.LIGHTTPD_RANDOM_PORT_FIRST + shard_index
- if not apks:
- apks = [apk_info.ApkInfo(options.test_apk_path,
- options.test_apk_jar_path)]
-
self.build_type = options.build_type
- self.install_apk = options.install_apk
self.test_data = options.test_data
self.save_perf_json = options.save_perf_json
self.screenshot_failures = options.screenshot_failures
self.wait_for_debugger = options.wait_for_debugger
self.disable_assertions = options.disable_assertions
-
self.coverage = coverage
- self.apks = apks
- self.test_apk = apks[0]
- self.instrumentation_class_path = self.test_apk.GetPackageName()
+ self.test_pkg = test_pkg
self.ports_to_forward = ports_to_forward
+ self.is_uiautomator_test = is_uiautomator_test
+ if self.is_uiautomator_test:
+ self.package_name = options.package_name
+ else:
+ self.install_apk = options.install_apk
self.forwarder = None
@@ -125,10 +119,11 @@ class TestRunner(base_test_runner.BaseTestRunner):
self.adb.PushIfNeeded(host_test_files_path,
self.adb.GetExternalStorage() + '/' +
TestRunner._DEVICE_DATA_DIR + '/' + dst_layer)
- if self.install_apk:
- for apk in self.apks:
- self.adb.ManagedInstall(apk.GetApkPath(),
- package_name=apk.GetPackageName())
+ if self.is_uiautomator_test:
+ self.test_pkg.Install(self.adb)
+ elif self.install_apk:
+ self.test_pkg.Install(self.adb)
+
self.tool.CopyFiles()
TestRunner._DEVICE_HAS_TEST_FILES[self.device] = True
@@ -253,7 +248,7 @@ class TestRunner(base_test_runner.BaseTestRunner):
Returns:
Whether the test is annotated as a performance test.
"""
- return _PERF_TEST_ANNOTATION in self.test_apk.GetTestAnnotations(test)
+ return _PERF_TEST_ANNOTATION in self.test_pkg.GetTestAnnotations(test)
def SetupPerfMonitoringIfNeeded(self, test):
"""Sets up performance monitoring if the specified test requires it.
@@ -352,7 +347,7 @@ class TestRunner(base_test_runner.BaseTestRunner):
def _GetIndividualTestTimeoutScale(self, test):
"""Returns the timeout scale for the given |test|."""
- annotations = self.apks[0].GetTestAnnotations(test)
+ annotations = self.test_pkg.GetTestAnnotations(test)
timeout_scale = 1
if 'TimeoutScale' in annotations:
for annotation in annotations:
@@ -365,7 +360,7 @@ class TestRunner(base_test_runner.BaseTestRunner):
def _GetIndividualTestTimeoutSecs(self, test):
"""Returns the timeout in seconds for the given |test|."""
- annotations = self.apks[0].GetTestAnnotations(test)
+ annotations = self.test_pkg.GetTestAnnotations(test)
if 'Manual' in annotations:
return 600 * 60
if 'External' in annotations:
@@ -382,29 +377,31 @@ class TestRunner(base_test_runner.BaseTestRunner):
Returns:
A test_result.TestResults object.
"""
- instrumentation_path = (self.instrumentation_class_path +
- '/android.test.InstrumentationTestRunner')
- instrumentation_args = self._GetInstrumentationArgs()
raw_result = None
start_date_ms = None
test_results = test_result.TestResults()
+ timeout=(self._GetIndividualTestTimeoutSecs(test) *
+ self._GetIndividualTestTimeoutScale(test) *
+ self.tool.GetTimeoutScale())
try:
self.TestSetup(test)
start_date_ms = int(time.time()) * 1000
- args_with_filter = dict(instrumentation_args)
- args_with_filter['class'] = test
- # |raw_results| is a list that should contain
- # a single TestResult object.
- logging.warn(args_with_filter)
- (raw_results, _) = self.adb.Adb().StartInstrumentation(
- instrumentation_path=instrumentation_path,
- instrumentation_args=args_with_filter,
- timeout_time=(self._GetIndividualTestTimeoutSecs(test) *
- self._GetIndividualTestTimeoutScale(test) *
- self.tool.GetTimeoutScale()))
+
+ if self.is_uiautomator_test:
+ self.adb.ClearApplicationState(self.package_name)
+ # TODO(frankf): Stop-gap solution. Should use annotations.
+ if 'FirstRun' in test:
+ self.flags.RemoveFlags(['--disable-fre'])
+ else:
+ self.flags.AddFlags(['--disable-fre'])
+ raw_result = self.adb.RunUIAutomatorTest(
+ test, self.test_pkg.GetPackageName(), timeout)
+ else:
+ raw_result = self.adb.RunInstrumentationTest(
+ test, self.test_pkg.GetPackageName(),
+ self._GetInstrumentationArgs(), timeout)
+
duration_ms = int(time.time()) * 1000 - start_date_ms
- assert len(raw_results) == 1
- raw_result = raw_results[0]
status_code = raw_result.GetStatusCode()
if status_code:
log = raw_result.GetFailureReason()
« no previous file with comments | « build/android/pylib/instrumentation/test_package.py ('k') | build/android/pylib/uiautomator/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698