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

Side by Side Diff: build/android/pylib/instrumentation/dispatch.py

Issue 12256021: [Android] Split out the instrumentation test runner, sharder, and dispatcher. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix some host_driven imports 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2013 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.
4
5 """Dispatches the instrumentation tests."""
6
7 import logging
8 import os
9
10 from pylib import android_commands
11 from pylib.base import test_result
12
13 import apk_info
14 import test_sharder
15
16
17 def Dispatch(options, apks):
18 """Dispatches instrumentation tests onto connected device(s).
19
20 If possible, this method will attempt to shard the tests to
21 all connected devices. Otherwise, dispatch and run tests on one device.
22
23 Args:
24 options: Command line options.
25 apks: list of APKs to use.
26
27 Returns:
28 A TestResults object holding the results of the Java tests.
29
30 Raises:
31 Exception: when there are no attached devices.
32 """
33 test_apk = apks[0]
34 # The default annotation for tests which do not have any sizes annotation.
35 default_size_annotation = 'SmallTest'
36
37 def _GetTestsMissingAnnotation(test_apk):
38 test_size_annotations = frozenset(['Smoke', 'SmallTest', 'MediumTest',
39 'LargeTest', 'EnormousTest', 'FlakyTest',
40 'DisabledTest', 'Manual', 'PerfTest'])
41 tests_missing_annotations = []
42 for test_method in test_apk.GetTestMethods():
43 annotations = frozenset(test_apk.GetTestAnnotations(test_method))
44 if (annotations.isdisjoint(test_size_annotations) and
45 not apk_info.ApkInfo.IsPythonDrivenTest(test_method)):
46 tests_missing_annotations.append(test_method)
47 return sorted(tests_missing_annotations)
48
49 if options.annotation:
50 available_tests = test_apk.GetAnnotatedTests(options.annotation)
51 if options.annotation.count(default_size_annotation) > 0:
52 tests_missing_annotations = _GetTestsMissingAnnotation(test_apk)
53 if tests_missing_annotations:
54 logging.warning('The following tests do not contain any annotation. '
55 'Assuming "%s":\n%s',
56 default_size_annotation,
57 '\n'.join(tests_missing_annotations))
58 available_tests += tests_missing_annotations
59 else:
60 available_tests = [m for m in test_apk.GetTestMethods()
61 if not apk_info.ApkInfo.IsPythonDrivenTest(m)]
62 coverage = os.environ.get('EMMA_INSTRUMENT') == 'true'
63
64 tests = []
65 if options.test_filter:
66 # |available_tests| are in adb instrument format: package.path.class#test.
67 filter_without_hash = options.test_filter.replace('#', '.')
68 tests = [t for t in available_tests
69 if filter_without_hash in t.replace('#', '.')]
70 else:
71 tests = available_tests
72
73 if not tests:
74 logging.warning('No Java tests to run with current args.')
75 return test_result.TestResults()
76
77 tests *= options.number_of_runs
78
79 attached_devices = android_commands.GetAttachedDevices()
80 test_results = test_result.TestResults()
81
82 if not attached_devices:
83 raise Exception('You have no devices attached or visible!')
84 if options.device:
85 attached_devices = [options.device]
86
87 logging.info('Will run: %s', str(tests))
88
89 if len(attached_devices) > 1 and (coverage or options.wait_for_debugger):
90 logging.warning('Coverage / debugger can not be sharded, '
91 'using first available device')
92 attached_devices = attached_devices[:1]
93 sharder = test_sharder.TestSharder(attached_devices, options, tests, apks)
94 test_results = sharder.RunShardedTests()
95 return test_results
OLDNEW
« no previous file with comments | « build/android/pylib/host_driven/run_python_tests.py ('k') | build/android/pylib/instrumentation/run_java_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698