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

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

Issue 12263024: Android: Add test runner scripts to run content_browsertests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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
Index: build/android/pylib/browsertests/test_runner.py
diff --git a/build/android/pylib/browsertests/test_runner.py b/build/android/pylib/browsertests/test_runner.py
new file mode 100644
index 0000000000000000000000000000000000000000..fe6931ae4519c3e54c4c2fe7855b7b65173a9498
--- /dev/null
+++ b/build/android/pylib/browsertests/test_runner.py
@@ -0,0 +1,124 @@
+# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import logging
+import os
+import sys
+
+from pylib import android_commands
+from pylib import constants
+from pylib import perf_tests_helper
+from pylib.android_commands import errors
+from pylib.base.base_test_runner import BaseTestRunner
+from pylib.base.test_result import BaseTestResult, TestResults
+from pylib.gtest.test_package_apk import TestPackageApk
+from pylib.utils import run_tests_helper
+
+CURFILE_PATH = os.path.abspath(os.path.dirname(__file__))
+
+
+def _GetDataFilesForTestSuite():
+ return ['content/test/data',]
+
+
+class TestRunner(BaseTestRunner):
+ """Single test suite attached to a single device.
+
+ Args:
+ device: Device to run the tests.
+ test_suite: A specific test suite to run, empty to run all.
+ gtest_filter: A gtest_filter flag.
+ test_arguments: Additional arguments to pass to the test binary.
+ timeout: Timeout for each test.
+ cleanup_test_files: Whether or not to cleanup test files on device.
+ tool_name: Name of the Valgrind tool.
+ shard_index: index number of the shard on which the test suite will run.
+ build_type: 'Release' or 'Debug'.
+ """
+
+ def __init__(self, device, test_suite, gtest_filter, test_arguments, timeout,
+ cleanup_test_files, tool_name, shard_index, build_type,):
+ BaseTestRunner.__init__(self, device, tool_name, shard_index, build_type)
+ self._gtest_filter = gtest_filter
+ self._test_arguments = '--single_process %s' % test_arguments
+ self.test_results = TestResults()
+
+ logging.warning('Test suite: ' + test_suite)
+ self.test_package = TestPackageApk(
+ self.adb,
+ device,
+ test_suite,
+ timeout,
+ cleanup_test_files,
+ self.tool,
+ 'org.chromium.content_browsertests_apk',
+ 'org.chromium.content_browsertests_apk.ContentBrowserTestsActivity',
+ 'content-browser-tests-command-line')
+
+ def GetDisabledTests(self):
+ """Returns a list of disabled tests.
+
+ Returns:
+ A list of disabled tests obtained from 'filter' subdirectory.
+ """
+ gtest_filter_base_path = os.path.join(
+ CURFILE_PATH, 'filter', self.test_package.test_suite_basename)
+ disabled_tests = run_tests_helper.GetExpectations(
+ gtest_filter_base_path + '_disabled')
+ return disabled_tests
+
+ def LaunchHelperToolsForTestSuite(self):
+ """Launches helper tools for the test suite."""
+ self.LaunchChromeTestServerSpawner()
+
+ def StripAndCopyFiles(self):
+ """Strips and copies the required data files for the test suite."""
+ self.test_package.StripAndCopyExecutable()
+ self.test_package.PushDataAndPakFiles()
+ self.tool.CopyFiles()
+ test_data = _GetDataFilesForTestSuite()
+ if test_data:
+ # Make sure SD card is ready.
+ self.adb.WaitForSdCardReady(20)
+ for data in test_data:
+ self.CopyTestData([data], self.adb.GetExternalStorage())
+
+ def RunTests(self):
+ """Runs a single test on a single device.
+
+ Returns:
+ A TestResults object.
+ """
+ if not self._gtest_filter:
+ raise Exception('Cannot run browser tests without a test filter.')
+ try:
+ self.test_package.CreateTestRunnerScript(self._gtest_filter,
+ self._test_arguments)
+ self.test_results = self.test_package.RunTestsAndListResults()
+ except errors.DeviceUnresponsiveError as e:
+ # Make sure this device is not attached
+ logging.warning(e)
+ if android_commands.IsDeviceAttached(self.device):
+ raise e
+ self.test_results.device_exception = device_exception
+ finally:
+ # TODO(frankf): Do not break TestResults encapsulation.
+ all_tests = self._gtest_filter
+ all_tests_ran = set([t.name for t in self.test_results.GetAll()])
+ self.test_results.unknown = []
+ return self.test_results
+
+ def SetUp(self):
+ """Sets up necessary test enviroment for the test suite."""
+ super(TestRunner, self).SetUp()
+ self.StripAndCopyFiles()
+ self.LaunchHelperToolsForTestSuite()
+ self.tool.SetupEnvironment()
+
+ def TearDown(self):
+ """Cleans up the test enviroment for the test suite."""
+ self.tool.CleanUpEnvironment()
+ if self.test_package.cleanup_test_files:
+ self.adb.RemovePushedFiles()
+ super(TestRunner, self).TearDown()

Powered by Google App Engine
This is Rietveld 408576698