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

Side by Side Diff: chrome/test/functional/media/media_test_runner.py

Issue 9666032: Cleanup deprecated PyAuto media tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update year. Created 8 years, 9 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 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """A module to execute a subclass of MediaTastBase class.
7
8 This executes a media test class (a subclass of MediaTastBase class) with
9 different configuration (parameters) which are passed in the form of
10 environment variables (e.g., the number of runs). The location of the
11 subclass is passed as one of arguments. An example of invocation is
12 "./media_test_runner.py -p ./media_perf.py". In this example,
13 media_perf.py will be invoked using the default set of parameters.
14 The list of possible combinations of parameters are: T parameter
15 for media cache is set/non-set, Chrome flag is set/non-set, data element
16 in data source file (CSV file - its content is list form or its content is
17 in matrix form),
18 """
19
20 import copy
21 import csv
22 import glob
23 import logging
24 import os
25 from optparse import OptionParser
26 import shlex
27 import sys
28 from subprocess import Popen
29
30 from media_test_env_names import MediaTestEnvNames
31 from media_test_matrix import MediaTestMatrix
32
33
34 def main():
35 CHROME_FLAGS = {'disable_cache': '--media-cache-size=1',
36 # Please note track (caption) option is not implemented yet
37 # as of 6/8/2011.
38 'track': '--enable-video-track'}
39 # Player.html should contain all the HTML and Javascript that is
40 # necessary to run these tests.
41 DEFAULT_PLAYER_HTML_URL = 'DEFAULT'
42 DEFAULT_PLAYER_HTML_URL_NICKNAME = 'local'
43 # Default base url nickname used to display the result in case it is not
44 # specified by the environment variable.
45 DEFAULT_PLAYER_HTML_URL_NICKNAME = 'local'
46 REMOVE_FIRST_RESULT = True
47 # The number of runs for each test. This is used to compute average values
48 # from among all runs.
49 DEFAULT_NUMBER_OF_RUNS = 3
50 # The interval between measurement calls.
51 DEFAULT_MEASURE_INTERVALS = 3
52 DEFAULT_SUITE_NAME = 'AV_PERF'
53 # This script is used to run the PYAUTO suite.
54 pyauto_functional_script_name = os.path.join(os.path.dirname(__file__),
55 'pyauto_media.py')
56 # This defines default file name for CSV file.
57 default_input_filename = os.path.join(os.pardir, 'data', 'media', 'csv',
58 'media_list_data.csv')
59 parser = OptionParser()
60 # TODO(imasaki@chromium.org): add parameter verification.
61 parser.add_option(
62 '-i', '--input', dest='input_filename', default=default_input_filename,
63 help='Data source file (file contents in list form) [defaults to "%s"]' %
64 default_input_filename, metavar='FILE')
65 parser.add_option(
66 '-x', '--input_matrix', dest='input_matrix_filename',
67 help='Data source file (file contents in matrix form)', metavar='FILE')
68 parser.add_option('-t', '--input_matrix_testcase',
69 dest='input_matrix_testcase_name',
70 help='Run particular test in matrix')
71 parser.add_option('-r', '--video_matrix_home_url',
72 default='',
73 dest='video_matrix_home_url',
74 help='Video Matrix home URL')
75 parser.add_option('-p', '--test_prog_name', dest='test_prog_name',
76 help='Test main program name (not using suite)',
77 metavar='FILE')
78 parser.add_option('-b', '--player_html_url', dest='player_html_url',
79 default='None',
80 help='Player.html URL [defaults to "%s"] ' %
81 DEFAULT_PLAYER_HTML_URL, metavar='FILE')
82 parser.add_option('-u', '--player_html_url_nickname',
83 dest='player_html_url_nickname',
84 default=DEFAULT_PLAYER_HTML_URL_NICKNAME,
85 help='Player.html Nickname [defaults to "%s"]' %
86 DEFAULT_PLAYER_HTML_URL_NICKNAME)
87 parser.add_option('-n', '--number_of_runs', dest='number_of_runs',
88 default=DEFAULT_NUMBER_OF_RUNS,
89 help='The number of runs [defaults to "%d"]' %
90 DEFAULT_NUMBER_OF_RUNS)
91 parser.add_option('-m', '--measure_intervals', dest='measure_intervals',
92 default=DEFAULT_MEASURE_INTERVALS,
93 help='Interval for measurement data [defaults to "%d"]' %
94 DEFAULT_MEASURE_INTERVALS)
95 parser.add_option('-c', '--disable_media_cache', dest='disable_media_cache',
96 default=False, help='Disable media cache',
97 action='store_true')
98 parser.add_option('-z', '--test-one-video', dest='one_video',
99 default=False, help='Run only one video',
100 action='store_true')
101 parser.add_option(
102 '-w', '--test_scenario_input_filename',
103 dest='test_scenario_input_filename',
104 default='', help='Test scenario file (CSV form)', metavar='FILE')
105 parser.add_option(
106 '-q', '--test_scenario', dest='test_scenario',
107 default='', help='Test scenario (action triples delimited by \'|\')')
108 parser.add_option('-s', '--suite', dest='suite',
109 help='Suite file')
110 parser.add_option('-e', '--media_file', dest='media_file',
111 default='',
112 help=('Media file to be played using player.html. '
113 'The relative path needs to be specified starting '
114 'from data/html/ directory. '
115 'The data should have the following format: '
116 'tag(video|audio)|filename|nickname|video_title'))
117 parser.add_option('-a', '--reference_build', dest='reference_build',
118 help='Include reference build run', default=False,
119 action='store_true')
120 parser.add_option('-k', '--reference_build_dir', dest='reference_build_dir',
121 help=('A absolute path to the directory that contains'
122 'binaries of reference build.'))
123 parser.add_option('-v', '--verbose', dest='verbose', help='Verbose mode.',
124 default=False, action='store_true')
125 parser.add_option('-j', '--track', dest='track',
126 help=('Run track test (binary should be downloaded'
127 ' from http://www.annacavender.com/track/'
128 ' and put into reference_build_dir).'),
129 default=False, action='store_true')
130 parser.add_option('-g', '--track-file', dest='track_file',
131 help=('Track file in vtt format (binary should be'
132 ' downloaded from http://www.annacavender.com/track/'
133 ' and put into reference_build_dir).'))
134 parser.add_option('-y', '--track-file_dir', dest='track_file_dir',
135 help=('A directory that contains vtt format files.'))
136 parser.add_option('-d', '--num-extra-players',
137 dest='number_of_extra_players',
138 help=('The number of extra players for '
139 'stress testing using the same media file.'))
140 parser.add_option('-l', '--jerky-tool-location',
141 dest='jerky_tool_location',
142 help='The location of the jerky tool binary.')
143 parser.add_option('--jo', '--jerky-tool-output-directory',
144 dest='jerky_tool_output_directory',
145 help='The output directory of the jerky tool.')
146 parser.add_option('--jb', '--jerky-tool-baseline-directory',
147 dest='jerky_tool_baseline_directory',
148 help='The baseline directory of the jerky tool.')
149 options, args = parser.parse_args()
150 if args:
151 parser.print_help()
152 sys.exit(1)
153
154 test_data_list = []
155 if options.media_file:
156 opts = options.media_file.split('|')
157 # The media file should have the following format:
158 # tag(video|audio)|filename|nickname|video_title.
159 if len(opts) != 4:
160 logging.error('--media_file option argument does not have correct'
161 'format. The correct format is tag(video|audio)'
162 '|filename|nickname|video_title')
163 sys.exit(1)
164 test_data_list.append(opts)
165 elif options.input_matrix_filename is None:
166 file = open(options.input_filename, 'rb')
167 test_data_list = csv.reader(file)
168 # First line contains headers that can be skipped.
169 test_data_list.next()
170 else:
171 # Video_matrix_home_url requires "/" at the end.
172 if not options.video_matrix_home_url.endswith('/'):
173 options.video_matrix_home_url += '/'
174 media_test_matrix = MediaTestMatrix()
175 media_test_matrix.ReadData(options.input_matrix_filename)
176 all_data_list = media_test_matrix.GenerateAllMediaInfosInCompactForm(
177 True, options.video_matrix_home_url)
178 if options.input_matrix_testcase_name is None:
179 # Use all test cases.
180 test_data_list = all_data_list
181 else:
182 # Choose particular video.
183 media_info = MediaTestMatrix.LookForMediaInfoInCompactFormByNickName(
184 all_data_list, options.input_matrix_testcase_name)
185 if media_info is not None:
186 test_data_list.append(media_info)
187
188 # Determine whether we need to repeat a test using a reference build.
189 # The default is not to include a test using a reference build.
190 if options.reference_build:
191 reference_build_list = [False, True]
192 else:
193 reference_build_list = [False]
194 track_files = ['']
195 if any([options.track_file, options.track, options.track_file_dir]):
196 # TODO(imasaki@chromium.org): change here after track functionality is
197 # available on Chrome. Currently, track patch is still under development.
198 # So, I need to download the binary from
199 # http://www.annacavender.com/track/ and use it for testing.
200 # I temporarily use reference build mechanism.
201 reference_build_list = [True]
202 if options.track_file_dir:
203 track_files_orig = (
204 glob.glob(os.path.join(options.track_file_dir, '*.vtt')))
205 track_files = []
206 for tf in track_files_orig:
207 # The location should be relative path from HTML files.
208 # So it needs to remove data and media from the path.
209 track_files.append(tf.replace(os.path.join('data', 'media'), ''))
210 if not track_files:
211 logging.warning('No track files in %s', options.track_file_dir)
212 if options.track_file:
213 track_files = [options.track_file]
214 # This is a loop for iterating through all videos defined above (list
215 # or matrix). Each video has associated tag and nickname for display
216 # purpose.
217 for tag, filename, nickname, title in test_data_list:
218 for track_file in track_files:
219 for reference_build in reference_build_list:
220 parent_envs = copy.deepcopy(os.environ)
221 if options.input_matrix_filename is None:
222 par_filename = os.path.join(os.pardir, filename)
223 else:
224 par_filename = filename
225 envs = {
226 MediaTestEnvNames.MEDIA_TAG_ENV_NAME: tag,
227 MediaTestEnvNames.MEDIA_FILENAME_ENV_NAME: par_filename,
228 MediaTestEnvNames.MEDIA_FILENAME_NICKNAME_ENV_NAME: nickname,
229 MediaTestEnvNames.PLAYER_HTML_URL_ENV_NAME:
230 options.player_html_url,
231 MediaTestEnvNames.PLAYER_HTML_URL_NICKNAME_ENV_NAME:
232 options.player_html_url_nickname,
233 MediaTestEnvNames.N_RUNS_ENV_NAME: str(options.number_of_runs),
234 MediaTestEnvNames.MEASURE_INTERVAL_ENV_NAME:
235 str(options.measure_intervals),
236 MediaTestEnvNames.TEST_SCENARIO_FILE_ENV_NAME:
237 options.test_scenario_input_filename,
238 MediaTestEnvNames.TEST_SCENARIO_ENV_NAME:
239 options.test_scenario,
240 }
241 # Boolean variables and their related variables.
242 if options.disable_media_cache:
243 # The 't' parameter is passed to player.html to disable/enable
244 # the media cache (refer to data/media/html/player.js).
245 envs[MediaTestEnvNames.ADD_T_PARAMETER_ENV_NAME] = str(
246 options.disable_media_cache)
247 if reference_build:
248 envs[MediaTestEnvNames.REFERENCE_BUILD_ENV_NAME] = str(
249 reference_build)
250 if REMOVE_FIRST_RESULT:
251 envs[MediaTestEnvNames.REMOVE_FIRST_RESULT_ENV_NAME] = str(
252 REMOVE_FIRST_RESULT)
253 if options.reference_build_dir:
254 envs[MediaTestEnvNames.REFERENCE_BUILD_DIR_ENV_NAME] = (
255 options.reference_build_dir)
256 if track_file:
257 envs[MediaTestEnvNames.TRACK_FILE_ENV_NAME] = track_file
258 if options.number_of_extra_players:
259 envs[MediaTestEnvNames.N_EXTRA_PLAYERS_ENV_NAME] = (
260 options.number_of_extra_players)
261 if options.jerky_tool_location:
262 envs[MediaTestEnvNames.JERKY_TOOL_BINARY_LOCATION_ENV_NAME] = (
263 options.jerky_tool_location)
264 if options.jerky_tool_output_directory:
265 envs[MediaTestEnvNames.JERKY_TOOL_OUTPUT_DIR_ENV_NAME] = (
266 options.jerky_tool_output_directory)
267 if options.jerky_tool_baseline_directory:
268 envs[MediaTestEnvNames.JERKY_TOOL_BASELINE_DIR_ENV_NAME] = (
269 options.jerky_tool_baseline_directory)
270 envs.update(parent_envs)
271 if options.suite is None and options.test_prog_name is not None:
272 # Suite is not used - run test program directly.
273 test_prog_name = options.test_prog_name
274 suite_string = ''
275 else:
276 # Suite is used.
277 # The test script names are in the PYAUTO_TESTS file.
278 test_prog_name = pyauto_functional_script_name
279 if options.suite is None:
280 suite_name = DEFAULT_SUITE_NAME
281 else:
282 suite_name = options.suite
283 suite_string = ' --suite=%s' % suite_name
284 test_prog_name = sys.executable + ' ' + test_prog_name
285 chrome_flag = ''
286 if options.disable_media_cache:
287 chrome_flag += CHROME_FLAGS['disable_cache']
288 if options.track_file:
289 if options.disable_media_cache:
290 chrome_flag += ' '
291 chrome_flag += CHROME_FLAGS['track']
292 if chrome_flag:
293 chrome_flag = '--chrome-flags=\'%s\'' % chrome_flag
294 cmd = test_prog_name + suite_string + ' ' + chrome_flag
295 if options.verbose:
296 cmd += ' -v'
297 proc = Popen(cmd, env=envs, shell=True)
298 proc.communicate()
299
300 if options.one_video:
301 break
302
303
304 if __name__ == '__main__':
305 main()
OLDNEW
« no previous file with comments | « chrome/test/functional/media/media_test_matrix_unittest.py ('k') | chrome/test/functional/media/media_track.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698