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

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

Issue 7003131: Adding HTML5 track(caption) test case in PyAuto media functional tests. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Add basic media track event test in media functional test. Created 9 years, 6 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
« no previous file with comments | « chrome/test/functional/media/media_test_base.py ('k') | 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/python 1 #!/usr/bin/python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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 """A module to execute a subclass of MediaTastBase class. 6 """A module to execute a subclass of MediaTastBase class.
7 7
8 This executes a media test class (a subclass of MediaTastBase class) with 8 This executes a media test class (a subclass of MediaTastBase class) with
9 different configuration (parameters) which are passed in the form of 9 different configuration (parameters) which are passed in the form of
10 environment variables (e.g., the number of runs). The location of the 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 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, 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. 13 media_perf.py will be invoked using the default set of parameters.
14 The list of possible combinations of parameters are: T parameter 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 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 16 in data source file (CSV file - its content is list form or its content is
17 in matrix form), 17 in matrix form),
18 """ 18 """
19 19
20 import copy 20 import copy
21 import csv 21 import csv
22 import glob
22 import logging 23 import logging
23 import os 24 import os
24 from optparse import OptionParser 25 from optparse import OptionParser
25 import shlex 26 import shlex
26 import sys 27 import sys
27 from subprocess import Popen 28 from subprocess import Popen
28 29
29 from media_test_env_names import MediaTestEnvNames 30 from media_test_env_names import MediaTestEnvNames
30 from media_test_matrix import MediaTestMatrix 31 from media_test_matrix import MediaTestMatrix
31 32
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 default=False, action='store_true') 124 default=False, action='store_true')
124 parser.add_option('-j', '--track', dest='track', 125 parser.add_option('-j', '--track', dest='track',
125 help=('Run track test (binary should be downloaded' 126 help=('Run track test (binary should be downloaded'
126 ' from http://www.annacavender.com/track/' 127 ' from http://www.annacavender.com/track/'
127 ' and put into reference_build_dir).'), 128 ' and put into reference_build_dir).'),
128 default=False, action='store_true') 129 default=False, action='store_true')
129 parser.add_option('-g', '--track-file', dest='track_file', 130 parser.add_option('-g', '--track-file', dest='track_file',
130 help=('Track file in vtt format (binary should be' 131 help=('Track file in vtt format (binary should be'
131 ' downloaded from http://www.annacavender.com/track/' 132 ' downloaded from http://www.annacavender.com/track/'
132 ' and put into reference_build_dir).')) 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'))
133 136
134 options, args = parser.parse_args() 137 options, args = parser.parse_args()
135 if args: 138 if args:
136 parser.print_help() 139 parser.print_help()
137 sys.exit(1) 140 sys.exit(1)
138 141
139 test_data_list = [] 142 test_data_list = []
140 if options.media_file: 143 if options.media_file:
141 opts = options.media_file.split('|') 144 opts = options.media_file.split('|')
142 # The media file should have the following format: 145 # The media file should have the following format:
143 # tag(video|audio)|filename|nickname|video_title. 146 # tag(video|audio)|filename|nickname|video_title.
144 if len(opts) != 4: 147 if len(opts) != 4:
145 logging.error('--media_file option argument does not have correct format.' 148 logging.error('--media_file option argument does not have correct'
146 'The correct format is tag(video|audio)|filename|nickname' 149 'format. The correct format is tag(video|audio)'
147 '|video_title') 150 '|filename|nickname|video_title')
148 sys.exit(1) 151 sys.exit(1)
149 test_data_list.append(opts) 152 test_data_list.append(opts)
150 elif options.input_matrix_filename is None: 153 elif options.input_matrix_filename is None:
151 file = open(options.input_filename, 'rb') 154 file = open(options.input_filename, 'rb')
152 test_data_list = csv.reader(file) 155 test_data_list = csv.reader(file)
153 # First line contains headers that can be skipped. 156 # First line contains headers that can be skipped.
154 test_data_list.next() 157 test_data_list.next()
155 else: 158 else:
156 # Video_matrix_home_url requires "/" at the end. 159 # Video_matrix_home_url requires "/" at the end.
157 if not options.video_matrix_home_url.endswith('/'): 160 if not options.video_matrix_home_url.endswith('/'):
(...skipping 11 matching lines...) Expand all
169 all_data_list, options.input_matrix_testcase_name) 172 all_data_list, options.input_matrix_testcase_name)
170 if media_info is not None: 173 if media_info is not None:
171 test_data_list.append(media_info) 174 test_data_list.append(media_info)
172 175
173 # Determine whether we need to repeat a test using a reference build. 176 # Determine whether we need to repeat a test using a reference build.
174 # The default is not to include a test using a reference build. 177 # The default is not to include a test using a reference build.
175 if options.reference_build: 178 if options.reference_build:
176 reference_build_list = [False, True] 179 reference_build_list = [False, True]
177 else: 180 else:
178 reference_build_list = [False] 181 reference_build_list = [False]
179 if options.track_file or options.track: 182 track_files = ['']
183 if options.track_file or options.track or options.track_file_dir:
180 # TODO(imasaki@chromium.org): change here after track functionality is 184 # TODO(imasaki@chromium.org): change here after track functionality is
181 # available on Chrome. Currently, track patch is still under development. 185 # available on Chrome. Currently, track patch is still under development.
182 # So, I need to download the binary from 186 # So, I need to download the binary from
183 # http://www.annacavender.com/track/ and use it for testing. 187 # http://www.annacavender.com/track/ and use it for testing.
184 # I temporarily use reference build mechanism. 188 # I temporarily use reference build mechanism.
185 reference_build_list = [True] 189 reference_build_list = [True]
190 if options.track_file_dir:
191 track_files_orig = (
192 glob.glob(os.path.join(options.track_file_dir, '*.vtt')))
193 track_files = []
194 for tf in track_files_orig:
195 # The location should be relative path from HTML files.
196 # So it needs to remove data and media from the path.
197 track_files.append(tf.replace(os.path.join('data', 'media'), ''))
198 if options.track_file:
199 track_files = [options.track_file]
186 # This is a loop for iterating through all videos defined above (list 200 # This is a loop for iterating through all videos defined above (list
187 # or matrix). Each video has associated tag and nickname for display 201 # or matrix). Each video has associated tag and nickname for display
188 # purpose. 202 # purpose.
189 for tag, filename, nickname, title in test_data_list: 203 for tag, filename, nickname, title in test_data_list:
190 # This inner loop iterates twice. The first iteration of the loop 204 for track_file in track_files:
191 # disables the media cache, and the second iteration enables the media 205 for reference_build in reference_build_list:
192 # cache. Other parameters remain the same on both loop iterations. 206 parent_envs = copy.deepcopy(os.environ)
193 # There are two ways to disable the media cache: setting Chrome option 207 if options.input_matrix_filename is None:
194 # to --media-cache-size=1 or adding t parameter in query parameter of 208 par_filename = os.path.join(os.pardir, filename)
195 # URL in which player.js (data/media/html/player.js) disables the
196 # media cache).
197 #
198 # The default name for track vtt file is the name of the video title
199 # in the case --track-file is not set. The track file should be in
200 # the same directory as video files. For example, bear_en.vtt.
201 if options.track and not options.track_file:
202 # TODO(imasaki@chromium.org): add more languages.
203 lang = 'en'
204 options.track_file = os.path.join(os.path.dirname(filename),
205 title + '_' + lang + '.vtt')
206 for reference_build in reference_build_list:
207 parent_envs = copy.deepcopy(os.environ)
208 if options.input_matrix_filename is None:
209 par_filename = os.path.join(os.pardir, filename)
210 else:
211 par_filename = filename
212 envs = {
213 MediaTestEnvNames.MEDIA_TAG_ENV_NAME: tag,
214 MediaTestEnvNames.MEDIA_FILENAME_ENV_NAME: par_filename,
215 MediaTestEnvNames.MEDIA_FILENAME_NICKNAME_ENV_NAME: nickname,
216 MediaTestEnvNames.PLAYER_HTML_URL_ENV_NAME:
217 options.player_html_url,
218 MediaTestEnvNames.PLAYER_HTML_URL_NICKNAME_ENV_NAME:
219 options.player_html_url_nickname,
220 MediaTestEnvNames.N_RUNS_ENV_NAME: str(options.number_of_runs),
221 MediaTestEnvNames.MEASURE_INTERVAL_ENV_NAME:
222 str(options.measure_intervals),
223 MediaTestEnvNames.TEST_SCENARIO_FILE_ENV_NAME:
224 options.test_scenario_input_filename,
225 MediaTestEnvNames.TEST_SCENARIO_ENV_NAME:
226 options.test_scenario,
227 }
228 # Boolean variables and their related variables.
229 if options.disable_media_cache:
230 # The 't' parameter is passed to player.html to disable/enable
231 # the media cache (refer to data/media/html/player.js).
232 envs[MediaTestEnvNames.ADD_T_PARAMETER_ENV_NAME] = str(
233 options.disable_media_cache)
234 if reference_build:
235 envs[MediaTestEnvNames.REFERENCE_BUILD_ENV_NAME] = str(
236 reference_build)
237 if REMOVE_FIRST_RESULT:
238 envs[MediaTestEnvNames.REMOVE_FIRST_RESULT_ENV_NAME] = str(
239 REMOVE_FIRST_RESULT)
240 if options.reference_build_dir:
241 envs[MediaTestEnvNames.REFERENCE_BUILD_DIR_ENV_NAME] = (
242 options.reference_build_dir)
243 if options.track_file:
244 envs[MediaTestEnvNames.TRACK_FILE_ENV_NAME] = (
245 options.track_file)
246 envs.update(parent_envs)
247 if options.suite is None and options.test_prog_name is not None:
248 # Suite is not used - run test program directly.
249 test_prog_name = options.test_prog_name
250 suite_string = ''
251 else:
252 # Suite is used.
253 # The test script names are in the PYAUTO_TESTS file.
254 test_prog_name = pyauto_functional_script_name
255 if options.suite is None:
256 suite_name = DEFAULT_SUITE_NAME
257 else: 209 else:
258 suite_name = options.suite 210 par_filename = filename
259 suite_string = ' --suite=%s' % suite_name 211 envs = {
260 test_prog_name = sys.executable + ' ' + test_prog_name 212 MediaTestEnvNames.MEDIA_TAG_ENV_NAME: tag,
261 chrome_flag = '' 213 MediaTestEnvNames.MEDIA_FILENAME_ENV_NAME: par_filename,
262 if options.disable_media_cache: 214 MediaTestEnvNames.MEDIA_FILENAME_NICKNAME_ENV_NAME: nickname,
263 chrome_flag += CHROME_FLAGS['disable_cache'] 215 MediaTestEnvNames.PLAYER_HTML_URL_ENV_NAME:
264 if options.track_file: 216 options.player_html_url,
217 MediaTestEnvNames.PLAYER_HTML_URL_NICKNAME_ENV_NAME:
218 options.player_html_url_nickname,
219 MediaTestEnvNames.N_RUNS_ENV_NAME: str(options.number_of_runs),
220 MediaTestEnvNames.MEASURE_INTERVAL_ENV_NAME:
221 str(options.measure_intervals),
222 MediaTestEnvNames.TEST_SCENARIO_FILE_ENV_NAME:
223 options.test_scenario_input_filename,
224 MediaTestEnvNames.TEST_SCENARIO_ENV_NAME:
225 options.test_scenario,
226 }
227 # Boolean variables and their related variables.
265 if options.disable_media_cache: 228 if options.disable_media_cache:
266 chrome_flag += ' ' 229 # The 't' parameter is passed to player.html to disable/enable
267 chrome_flag += CHROME_FLAGS['track'] 230 # the media cache (refer to data/media/html/player.js).
268 if chrome_flag: 231 envs[MediaTestEnvNames.ADD_T_PARAMETER_ENV_NAME] = str(
269 chrome_flag = '--chrome-flags=\'%s\'' % chrome_flag 232 options.disable_media_cache)
270 cmd = test_prog_name + suite_string + ' ' + chrome_flag 233 if reference_build:
271 if options.verbose: 234 envs[MediaTestEnvNames.REFERENCE_BUILD_ENV_NAME] = str(
272 cmd += ' -v' 235 reference_build)
273 proc = Popen(cmd, env=envs, shell=True) 236 if REMOVE_FIRST_RESULT:
274 proc.communicate() 237 envs[MediaTestEnvNames.REMOVE_FIRST_RESULT_ENV_NAME] = str(
238 REMOVE_FIRST_RESULT)
239 if options.reference_build_dir:
240 envs[MediaTestEnvNames.REFERENCE_BUILD_DIR_ENV_NAME] = (
241 options.reference_build_dir)
242 if track_file:
243 envs[MediaTestEnvNames.TRACK_FILE_ENV_NAME] = track_file
244 envs.update(parent_envs)
245 if options.suite is None and options.test_prog_name is not None:
246 # Suite is not used - run test program directly.
247 test_prog_name = options.test_prog_name
248 suite_string = ''
249 else:
250 # Suite is used.
251 # The test script names are in the PYAUTO_TESTS file.
252 test_prog_name = pyauto_functional_script_name
253 if options.suite is None:
254 suite_name = DEFAULT_SUITE_NAME
255 else:
256 suite_name = options.suite
257 suite_string = ' --suite=%s' % suite_name
258 test_prog_name = sys.executable + ' ' + test_prog_name
259 chrome_flag = ''
260 if options.disable_media_cache:
261 chrome_flag += CHROME_FLAGS['disable_cache']
262 if options.track_file:
263 if options.disable_media_cache:
264 chrome_flag += ' '
265 chrome_flag += CHROME_FLAGS['track']
266 if chrome_flag:
267 chrome_flag = '--chrome-flags=\'%s\'' % chrome_flag
268 cmd = test_prog_name + suite_string + ' ' + chrome_flag
269 if options.verbose:
270 cmd += ' -v'
271 proc = Popen(cmd, env=envs, shell=True)
272 proc.communicate()
275 273
276 if options.one_video: 274 if options.one_video:
277 break 275 break
278 276
279 277
280 if __name__ == '__main__': 278 if __name__ == '__main__':
281 main() 279 main()
OLDNEW
« no previous file with comments | « chrome/test/functional/media/media_test_base.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698