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

Side by Side Diff: mojo/tools/get_test_list.py

Issue 863263004: Add a link to the perf dashboard in the test output. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 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
« no previous file with comments | « no previous file | mojo/tools/perf_test_runner.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Central list of tests to run (as appropriate for a given config). Add tests 6 """Central list of tests to run (as appropriate for a given config). Add tests
7 to run by modifying this file. 7 to run by modifying this file.
8 8
9 Note that this file is both imported (by mojob.py) and run directly (via a 9 Note that this file is both imported (by mojob.py) and run directly (via a
10 recipe).""" 10 recipe)."""
11 11
12 12
13 import argparse 13 import argparse
14 import json 14 import json
15 import os 15 import os
16 import subprocess
16 import sys 17 import sys
18 import urllib
17 19
18 from mopy.config import Config 20 from mopy.config import Config
19 from mopy.paths import Paths 21 from mopy.paths import Paths
20 22
21 23
22 def GetTestList(config): 24 def GetTestList(config):
23 """Gets the list of tests to run for the given config. The test list (which is 25 """Gets the list of tests to run for the given config. The test list (which is
24 returned) is just a list of dictionaries, each dictionary having two required 26 returned) is just a list of dictionaries, each dictionary having the following
25 fields: 27 fields:
26 { 28 {
29 # Required:
27 "name": "Short name", 30 "name": "Short name",
28 "command": ["python", "test_runner.py", "--some", "args"] 31 "command": ["python", "test_runner.py", "--some", "args"]
32
33 # Optional:
34 "links": {
viettrungluu 2015/01/28 01:51:45 I'm dubious about this having a dictionary value.
35 "Anchor text": "URL"
36 }
29 } 37 }
30 """ 38 """
31 39
32 types_to_run = set(config.test_types) 40 types_to_run = set(config.test_types)
33 41
34 # See above for a description of the test list. 42 # See above for a description of the test list.
35 test_list = [] 43 test_list = []
36 44
37 paths = Paths(config) 45 paths = Paths(config)
38 build_dir = paths.SrcRelPath(paths.build_dir) 46 build_dir = paths.SrcRelPath(paths.build_dir)
39 target_os = config.target_os 47 target_os = config.target_os
40 48
41 # Utility functions ---------------------------------------------------------- 49 # Utility functions ----------------------------------------------------------
42 50
43 # Call this to determine if a test matching classes this_tests_types should 51 # Call this to determine if a test matching classes this_tests_types should
44 # run: e.g., ShouldRunTest(Config.TEST_TYPE_DEFAULT, "sky") returns true if 52 # run: e.g., ShouldRunTest(Config.TEST_TYPE_DEFAULT, "sky") returns true if
45 # the test list being requested specifies the default set or the "sky" set. 53 # the test list being requested specifies the default set or the "sky" set.
46 def ShouldRunTest(*this_tests_types): 54 def ShouldRunTest(*this_tests_types):
47 return not types_to_run.isdisjoint(this_tests_types) 55 return not types_to_run.isdisjoint(this_tests_types)
48 56
49 # Call this to add the given command to the test list. 57 # Call this to add the given command to the test list.
50 def AddEntry(name, command): 58 def AddEntry(name, command, links=None):
51 if config.sanitizer == Config.SANITIZER_ASAN: 59 if config.sanitizer == Config.SANITIZER_ASAN:
52 command = (['python', os.path.join("mojo", "tools", 60 command = (['python', os.path.join("mojo", "tools",
53 "run_command_through_symbolizer.py")] + 61 "run_command_through_symbolizer.py")] +
54 command) 62 command)
55 test_list.append({"name": name, "command": command}) 63 entry = {"name": name, "command": command}
64 if links is not None:
65 entry["links"] = links
66 test_list.append(entry)
56 67
57 # Call this to add the given command to the test list. If appropriate, the 68 # Call this to add the given command to the test list. If appropriate, the
58 # command will be run under xvfb. 69 # command will be run under xvfb.
59 def AddXvfbEntry(name, command): 70 def AddXvfbEntry(name, command, links=None):
viettrungluu 2015/01/28 01:51:45 Just do **kwargs here.
60 real_command = ["python"] 71 real_command = ["python"]
61 if config.target_os == Config.OS_LINUX: 72 if config.target_os == Config.OS_LINUX:
62 real_command += ["./testing/xvfb.py", paths.SrcRelPath(paths.build_dir)] 73 real_command += ["./testing/xvfb.py", paths.SrcRelPath(paths.build_dir)]
63 real_command += command 74 real_command += command
64 AddEntry(name, real_command) 75 AddEntry(name, real_command, links)
viettrungluu 2015/01/28 01:51:45 And here.
76
77 def GetCurrentCommitCount():
viettrungluu 2015/01/28 01:51:45 Please don't do this (actually run outside stuff,
78 return subprocess.check_output(
79 ["git", "rev-list", "HEAD", "--count"]).strip()
80
65 81
66 # ---------------------------------------------------------------------------- 82 # ----------------------------------------------------------------------------
67 83
68 # TODO(vtl): Currently, we only know how to run tests for Android, Linux, or 84 # TODO(vtl): Currently, we only know how to run tests for Android, Linux, or
69 # Windows. 85 # Windows.
70 if target_os not in (Config.OS_ANDROID, Config.OS_LINUX, Config.OS_WINDOWS): 86 if target_os not in (Config.OS_ANDROID, Config.OS_LINUX, Config.OS_WINDOWS):
71 return test_list 87 return test_list
72 88
73 # Tests run by default ------------------------------------------------------- 89 # Tests run by default -------------------------------------------------------
74 90
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 if config.values.get("test_results_server"): 140 if config.values.get("test_results_server"):
125 sky_command += ["--test-results-server", 141 sky_command += ["--test-results-server",
126 config.values["test_results_server"]] 142 config.values["test_results_server"]]
127 AddXvfbEntry("Sky tests", sky_command) 143 AddXvfbEntry("Sky tests", sky_command)
128 144
129 # Perf tests ----------------------------------------------------------------- 145 # Perf tests -----------------------------------------------------------------
130 146
131 if target_os == Config.OS_LINUX and ShouldRunTest(Config.TEST_TYPE_PERF): 147 if target_os == Config.OS_LINUX and ShouldRunTest(Config.TEST_TYPE_PERF):
132 perf_id = "linux_%s" % ("debug" if config.is_debug else "release") 148 perf_id = "linux_%s" % ("debug" if config.is_debug else "release")
133 test_names = ["mojo_public_system_perftests"] 149 test_names = ["mojo_public_system_perftests"]
150 point_id = GetCurrentCommitCount()
134 151
135 for test_name in test_names: 152 for test_name in test_names:
136 command = ["python", 153 command = ["python",
137 os.path.join("mojo", "tools", "perf_test_runner.py"), 154 os.path.join("mojo", "tools", "perf_test_runner.py"),
138 "--perf-id", perf_id, 155 "--perf-id", perf_id,
139 "--test-name", test_name, 156 "--test-name", test_name,
140 "--perf-data-path", 157 "--perf-data-path",
141 os.path.join(build_dir, test_name + "_perf.log"), 158 os.path.join(build_dir, test_name + "_perf.log"),
159 "--point-id", point_id,
142 "--production-dashboard"] 160 "--production-dashboard"]
143 if config.values.get("builder_name"): 161 if config.values.get("builder_name"):
144 command += ["--builder-name", config.values["builder_name"]] 162 command += ["--builder-name", config.values["builder_name"]]
145 if config.values.get("build_number"): 163 if config.values.get("build_number"):
146 command += ["--build-number", config.values["build_number"]] 164 command += ["--build-number", config.values["build_number"]]
147 if config.values.get("master_name"): 165 if config.values.get("master_name"):
148 command += ["--master-name", config.values["master_name"]] 166 command += ["--master-name", config.values["master_name"]]
149 command += [os.path.join(build_dir, test_name)] 167 command += [os.path.join(build_dir, test_name)]
150 168
151 AddEntry(test_name, command) 169 dashboard_params = urllib.urlencode({
170 "masters": config.values.get("master_name"),
171 "bots": perf_id,
172 "tests": test_name,
173 "rev": point_id,
174 })
175 links = {
176 "Results Dashboard": ("https://chromeperf.appspot.com/report?%s"
177 % dashboard_params)
178 }
179 AddEntry(test_name, command, links)
viettrungluu 2015/01/28 01:51:45 You should use your kwarg as a kwarg, given that y
152 180
153 # Integration tests ---------------------------------------------------------- 181 # Integration tests ----------------------------------------------------------
154 182
155 if target_os == Config.OS_ANDROID and ShouldRunTest( 183 if target_os == Config.OS_ANDROID and ShouldRunTest(
156 Config.TEST_TYPE_DEFAULT, Config.TEST_TYPE_INTEGRATION): 184 Config.TEST_TYPE_DEFAULT, Config.TEST_TYPE_INTEGRATION):
157 AddEntry("Integration test (MojoTest)", 185 AddEntry("Integration test (MojoTest)",
158 ["python", 186 ["python",
159 os.path.join("build", "android", "test_runner.py"), 187 os.path.join("build", "android", "test_runner.py"),
160 "instrumentation", 188 "instrumentation",
161 "--test-apk=MojoTest", 189 "--test-apk=MojoTest",
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 config = Config(**json.load(args.config_file)) 231 config = Config(**json.load(args.config_file))
204 test_list = GetTestList(config) 232 test_list = GetTestList(config)
205 json.dump(test_list, args.test_list_file, indent=2) 233 json.dump(test_list, args.test_list_file, indent=2)
206 args.test_list_file.write("\n") 234 args.test_list_file.write("\n")
207 235
208 return 0 236 return 0
209 237
210 238
211 if __name__ == "__main__": 239 if __name__ == "__main__":
212 sys.exit(main()) 240 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | mojo/tools/perf_test_runner.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698