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

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

Issue 2460953002: [recipe_modules/test_results] Refactor the logic of generating full json results files (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
« no previous file with comments | « no previous file | no next file » | 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 (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(test_results_map, builder_name, build_number, 52 def generate_json_results_file(results_json, builder_name, build_number,
53 results_directory, chrome_revision, master_name): 53 results_directory, chrome_revision, master_name):
54 """Generates JSON results files from the given test_results_map. 54 """Generates JSON results files from the given |results_json|.
55 55
56 Args: 56 Args:
57 test_results_map: A map of TestResult. 57 results_json: the raw test results object that follows GTest format.
58 """ 58 """
59 results_map = get_results_map_from_json(results_json)
59 if not os.path.exists(results_directory): 60 if not os.path.exists(results_directory):
60 os.makedirs(results_directory) 61 os.makedirs(results_directory)
61 62
62 print('Generating json: ' 63 print('Generating json: '
63 'builder_name:%s, build_number:%s, ' 64 'builder_name:%s, build_number:%s, '
64 'results_directory:%s, ' 65 'results_directory:%s, '
65 'chrome_revision:%s ' 66 'chrome_revision:%s '
66 'master_name:%s' % 67 'master_name:%s' %
67 (builder_name, build_number, 68 (builder_name, build_number,
68 results_directory, 69 results_directory,
69 chrome_revision, 70 chrome_revision,
70 master_name)) 71 master_name))
71 72
72 # TODO(estaab): This doesn't need to be an object. Make it a simple function. 73 # TODO(estaab): This doesn't need to be an object. Make it a simple function.
73 generator = JSONResultsGenerator( 74 generator = JSONResultsGenerator(
74 builder_name, build_number, 75 builder_name, build_number,
75 results_directory, 76 results_directory,
76 test_results_map, 77 test_results_map,
77 svn_revisions=[('chromium', chrome_revision)], 78 svn_revisions=[('chromium', chrome_revision)],
78 master_name=master_name) 79 master_name=master_name)
79 generator.generate_json_output() 80 generator.generate_json_output()
80 generator.generate_times_ms_file() 81 generator.generate_times_ms_file()
82 return [(f, os.path.join(results_directory, f)) for f in
83 (FULL_RESULTS_FILENAME, TIMES_MS_FILENAME)]
81 84
82 85
83 def main(): 86 def main():
84 option_parser = optparse.OptionParser() 87 option_parser = optparse.OptionParser()
85 option_parser.add_option('--test-type', 88 option_parser.add_option('--test-type',
86 help='Test type that generated the results json,' 89 help='Test type that generated the results json,'
87 ' e.g. unit-tests.') 90 ' e.g. unit-tests.')
88 option_parser.add_option('--results-directory', default=os.getcwd(), 91 option_parser.add_option('--results-directory', default=os.getcwd(),
89 help='Output results directory source dir.') 92 help='Output results directory source dir.')
90 option_parser.add_option('--input-json', 93 option_parser.add_option('--input-json',
(...skipping 27 matching lines...) Expand all
118 if not options.input_json: 121 if not options.input_json:
119 option_parser.error('--input-json needs to be specified.') 122 option_parser.error('--input-json needs to be specified.')
120 return 1 123 return 1
121 124
122 if options.test_results_server and not options.master_name: 125 if options.test_results_server and not options.master_name:
123 logging.warn('--test-results-server is given but ' 126 logging.warn('--test-results-server is given but '
124 '--master-name is not specified; the results won\'t be ' 127 '--master-name is not specified; the results won\'t be '
125 'uploaded to the server.') 128 'uploaded to the server.')
126 129
127 with file(options.input_json) as json_file: 130 with file(options.input_json) as json_file:
128 results_map = get_results_map_from_json(json_file.read()) 131 results_json = json_file.read()
129 132
130 generate_json_results(results_map, options.builder_name, 133 files = generate_json_results_file(
131 options.build_number, options.results_directory, 134 results_json, builder_name=options.builder_name,
132 options.chrome_revision, options.master_name) 135 builder_number=options.build_number,
136 results_directory=options.results_directory,
137 chrome_revision=options.chrome_revision,
138 master_name=options.master_name)
133 139
134 # Upload to a test results server if specified. 140 # Upload to a test results server if specified.
135 if options.test_results_server and options.master_name: 141 if options.test_results_server and options.master_name:
136 print 'Uploading JSON files for builder "%s" to server "%s"' % ( 142 print 'Uploading JSON files for builder "%s" to server "%s"' % (
137 options.builder_name, options.test_results_server) 143 options.builder_name, options.test_results_server)
138 attrs = [('builder', options.builder_name), 144 attrs = [('builder', options.builder_name),
139 ('testtype', options.test_type), 145 ('testtype', options.test_type),
140 ('master', options.master_name)] 146 ('master', options.master_name)]
141 147
142 files = [(f, os.path.join(options.results_directory, f)) for f in
143 (FULL_RESULTS_FILENAME, TIMES_MS_FILENAME)]
144
145 # Set uploading timeout in case appengine server is having problem. 148 # Set uploading timeout in case appengine server is having problem.
146 # 120 seconds are more than enough to upload test results. 149 # 120 seconds are more than enough to upload test results.
147 test_results_uploader.upload_test_results( 150 test_results_uploader.upload_test_results(
148 options.test_results_server, attrs, files, 120) 151 options.test_results_server, attrs, files, 120)
149 return 0 152 return 0
150 153
151 154
152 if __name__ == '__main__': 155 if __name__ == '__main__':
153 sys.exit(main()) 156 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698