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

Side by Side Diff: scripts/slave/recipe_modules/test_results/resources/upload_test_results.py

Issue 2494883003: Add metadata to json results before uploading (Closed)
Patch Set: Created 4 years, 1 month 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2015 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2015 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 """See README.md for usage instructions. 6 """See README.md for usage instructions.
7 7
8 This file heavily modified from build/scripts/slave/gtest_slave_utils.py and 8 This file heavily modified from build/scripts/slave/gtest_slave_utils.py and
9 is intended to replace it as all tests move to swarming. 9 is intended to replace it as all tests move to swarming.
10 TODO(estaab): Remove build/scripts/slave/gtest.* once this is fully deployed. 10 TODO(estaab): Remove build/scripts/slave/gtest.* once this is fully deployed.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 for test, results in result_sets.iteritems(): 42 for test, results in result_sets.iteritems():
43 for result in results: 43 for result in results:
44 result = test_result.TestResult( 44 result = test_result.TestResult(
45 test, 45 test,
46 status=result['status'], 46 status=result['status'],
47 elapsed_time=result.get('elapsed_time_ms', 0) / 1000.) 47 elapsed_time=result.get('elapsed_time_ms', 0) / 1000.)
48 test_results_map.setdefault(test, []).append(result) 48 test_results_map.setdefault(test, []).append(result)
49 return test_results_map 49 return test_results_map
50 50
51 51
52 def generate_json_results_file(gtest_json, builder_name, build_number, 52 def generate_json_results_file_for_json(
53 results_directory, chrome_revision, master_name): 53 results_json, builder_name, build_number,
54 results_directory, chrome_revision, master_name):
55 """Generates JSON results file from the given |results_json|.
56
57 Args:
58 results_json: the raw test results object that follows full json results
59 format.
60
61 Returns:
62 A list that contains a single tuple (<file name>, <file path>). The tuple
63 represents the full test results file.
64 """
65 if not os.path.exists(results_directory):
66 os.makedirs(results_directory)
67 json_results_file_path = os.path.abspath(
68 os.path.join(results_directory, FULL_RESULTS_FILENAME))
69 results_json['builder_name'] = builder_name
70 results_json['build_number'] = build_number
71 results_json['chromium_revision'] = chrome_revision
72 results_json['master_name'] = master_name
73 with open(json_results_file_path, 'w') as f:
74 json.dump(results_json, f)
75 return [(FULL_RESULTS_FILENAME, json_results_file_path)]
76
77
78 def generate_json_results_file_for_gtest(
79 gtest_json, builder_name, build_number, results_directory, chrome_revision,
80 master_name):
54 """Generates JSON results files from the given |gtest_json|. 81 """Generates JSON results files from the given |gtest_json|.
55 82
56 Args: 83 Args:
57 gtest_json: the raw test results object that follows GTest format. 84 gtest_json: the raw test results object that follows GTest format.
58 85
59 Returns: 86 Returns:
60 A list of tuples (<file name>, <file path>). The list has two 87 A list of tuples (<file name>, <file path>). The list has two
61 elements: the first represent the full test results file, and the 88 elements: the first represent the full test results file, and the
62 second is is the times_ms.json file. 89 second is is the times_ms.json file.
63 """ 90 """
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 logging.warn('--test-results-server is given but ' 158 logging.warn('--test-results-server is given but '
132 '--master-name is not specified; the results won\'t be ' 159 '--master-name is not specified; the results won\'t be '
133 'uploaded to the server.') 160 'uploaded to the server.')
134 161
135 with file(options.input_json) as json_file: 162 with file(options.input_json) as json_file:
136 results_json = json_file.read() 163 results_json = json_file.read()
137 164
138 content = json.loads(results_json) 165 content = json.loads(results_json)
139 if content.get('version', 0) >= 3: 166 if content.get('version', 0) >= 3:
140 print 'Input JSON file probably has full json results format' 167 print 'Input JSON file probably has full json results format'
141 files = [(FULL_RESULTS_FILENAME, os.path.abspath(options.input_json))] 168 files = generate_json_results_file_for_json(
169 content, builder_name=options.builder_name,
170 build_number=options.build_number,
171 results_directory=options.results_directory,
172 chrome_revision=options.chrome_revision,
173 master_name=options.master_name)
142 else: 174 else:
143 print ('Input JSON file probably has gtest format. Converting to full json' 175 print ('Input JSON file probably has gtest format. Converting to full json'
144 ' results format') 176 ' results format')
145 files = generate_json_results_file( 177 files = generate_json_results_file_for_gtest(
146 results_json, builder_name=options.builder_name, 178 results_json, builder_name=options.builder_name,
147 build_number=options.build_number, 179 build_number=options.build_number,
148 results_directory=options.results_directory, 180 results_directory=options.results_directory,
149 chrome_revision=options.chrome_revision, 181 chrome_revision=options.chrome_revision,
150 master_name=options.master_name) 182 master_name=options.master_name)
151 183
152 # Upload to a test results server if specified. 184 # Upload to a test results server if specified.
153 if options.test_results_server and options.master_name: 185 if options.test_results_server and options.master_name:
154 print 'Uploading JSON files for builder "%s" to server "%s"' % ( 186 print 'Uploading JSON files for builder "%s" to server "%s"' % (
155 options.builder_name, options.test_results_server) 187 options.builder_name, options.test_results_server)
156 attrs = [('builder', options.builder_name), 188 attrs = [('builder', options.builder_name),
157 ('testtype', options.test_type), 189 ('testtype', options.test_type),
158 ('master', options.master_name)] 190 ('master', options.master_name)]
159 191
160 # Set uploading timeout in case appengine server is having problem. 192 # Set uploading timeout in case appengine server is having problem.
161 # 120 seconds are more than enough to upload test results. 193 # 120 seconds are more than enough to upload test results.
162 test_results_uploader.upload_test_results( 194 test_results_uploader.upload_test_results(
163 options.test_results_server, attrs, files, 120) 195 options.test_results_server, attrs, files, 120)
164 return 0 196 return 0
165 197
166 198
167 if __name__ == '__main__': 199 if __name__ == '__main__':
168 sys.exit(main(sys.argv[1:])) 200 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698