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

Side by Side Diff: build/android/pylib/local/device/local_device_instrumentation_test_run.py

Issue 2963683002: Simplify CommandLine parameterizing J3 Instrumentation Tests (Closed)
Patch Set: Created 3 years, 5 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
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import contextlib 5 import contextlib
6 import logging 6 import logging
7 import os 7 import os
8 import posixpath 8 import posixpath
9 import re 9 import re
10 import tempfile 10 import tempfile
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 311
312 #override 312 #override
313 def _GetUniqueTestName(self, test): 313 def _GetUniqueTestName(self, test):
314 return instrumentation_test_instance.GetUniqueTestName(test) 314 return instrumentation_test_instance.GetUniqueTestName(test)
315 315
316 #override 316 #override
317 def _RunTest(self, device, test): 317 def _RunTest(self, device, test):
318 extras = {} 318 extras = {}
319 319
320 flags_to_add = [] 320 flags_to_add = []
321 flags_to_remove = []
322 test_timeout_scale = None 321 test_timeout_scale = None
323 if self._test_instance.coverage_directory: 322 if self._test_instance.coverage_directory:
324 coverage_basename = '%s.ec' % ('%s_group' % test[0]['method'] 323 coverage_basename = '%s.ec' % ('%s_group' % test[0]['method']
325 if isinstance(test, list) else test['method']) 324 if isinstance(test, list) else test['method'])
326 extras['coverage'] = 'true' 325 extras['coverage'] = 'true'
327 coverage_directory = os.path.join( 326 coverage_directory = os.path.join(
328 device.GetExternalStoragePath(), 'chrome', 'test', 'coverage') 327 device.GetExternalStoragePath(), 'chrome', 'test', 'coverage')
329 coverage_device_file = os.path.join( 328 coverage_device_file = os.path.join(
330 coverage_directory, coverage_basename) 329 coverage_directory, coverage_basename)
331 extras['coverageFile'] = coverage_device_file 330 extras['coverageFile'] = coverage_device_file
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 test_name = instrumentation_test_instance.GetTestName(test) 366 test_name = instrumentation_test_instance.GetTestName(test)
368 test_display_name = self._GetUniqueTestName(test) 367 test_display_name = self._GetUniqueTestName(test)
369 if test['is_junit4']: 368 if test['is_junit4']:
370 target = '%s/%s' % ( 369 target = '%s/%s' % (
371 self._test_instance.test_package, 370 self._test_instance.test_package,
372 self._test_instance.test_runner_junit4) 371 self._test_instance.test_runner_junit4)
373 else: 372 else:
374 target = '%s/%s' % ( 373 target = '%s/%s' % (
375 self._test_instance.test_package, self._test_instance.test_runner) 374 self._test_instance.test_package, self._test_instance.test_runner)
376 extras['class'] = test_name 375 extras['class'] = test_name
377 if 'flags' in test: 376 if 'flags' in test and test['flags']:
378 flags_to_add.extend(test['flags'].add) 377 flags_to_add.extend(test['flags'])
379 flags_to_remove.extend(test['flags'].remove)
380 timeout = self._GetTimeoutFromAnnotations( 378 timeout = self._GetTimeoutFromAnnotations(
381 test['annotations'], test_display_name) 379 test['annotations'], test_display_name)
382 380
383 test_timeout_scale = self._GetTimeoutScaleFromAnnotations( 381 test_timeout_scale = self._GetTimeoutScaleFromAnnotations(
384 test['annotations']) 382 test['annotations'])
385 if test_timeout_scale and test_timeout_scale != 1: 383 if test_timeout_scale and test_timeout_scale != 1:
386 valgrind_tools.SetChromeTimeoutScale( 384 valgrind_tools.SetChromeTimeoutScale(
387 device, test_timeout_scale * self._test_instance.timeout_scale) 385 device, test_timeout_scale * self._test_instance.timeout_scale)
388 386
389 logging.info('preparing to run %s: %s', test_display_name, test) 387 logging.info('preparing to run %s: %s', test_display_name, test)
390 388
391 render_tests_device_output_dir = None 389 render_tests_device_output_dir = None
392 if _IsRenderTest(test): 390 if _IsRenderTest(test):
393 # TODO(mikecase): Add DeviceTempDirectory class and use that instead. 391 # TODO(mikecase): Add DeviceTempDirectory class and use that instead.
394 render_tests_device_output_dir = posixpath.join( 392 render_tests_device_output_dir = posixpath.join(
395 device.GetExternalStoragePath(), 393 device.GetExternalStoragePath(),
396 'render_test_output_dir') 394 'render_test_output_dir')
397 flags_to_add.append('--render-test-output-dir=%s' % 395 flags_to_add.append('--render-test-output-dir=%s' %
398 render_tests_device_output_dir) 396 render_tests_device_output_dir)
399 397
400 if flags_to_add or flags_to_remove: 398 if flags_to_add:
401 self._CreateFlagChangerIfNeeded(device) 399 self._CreateFlagChangerIfNeeded(device)
402 self._flag_changers[str(device)].PushFlags( 400 self._flag_changers[str(device)].PushFlags(add=flags_to_add)
403 add=flags_to_add, remove=flags_to_remove)
404 401
405 time_ms = lambda: int(time.time() * 1e3) 402 time_ms = lambda: int(time.time() * 1e3)
406 start_ms = time_ms() 403 start_ms = time_ms()
407 404
408 stream_name = 'logcat_%s_%s_%s' % ( 405 stream_name = 'logcat_%s_%s_%s' % (
409 test_name.replace('#', '.'), 406 test_name.replace('#', '.'),
410 time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime()), 407 time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime()),
411 device.serial) 408 device.serial)
412 logmon = logdog_logcat_monitor.LogdogLogcatMonitor( 409 logmon = logdog_logcat_monitor.LogdogLogcatMonitor(
413 device.adb, stream_name, filter_specs=LOGCAT_FILTERS) 410 device.adb, stream_name, filter_specs=LOGCAT_FILTERS)
414 411
415 with contextlib_ext.Optional( 412 with contextlib_ext.Optional(
416 logmon, self._test_instance.should_save_logcat): 413 logmon, self._test_instance.should_save_logcat):
417 with _LogTestEndpoints(device, test_name): 414 with _LogTestEndpoints(device, test_name):
418 with contextlib_ext.Optional( 415 with contextlib_ext.Optional(
419 trace_event.trace(test_name), 416 trace_event.trace(test_name),
420 self._env.trace_output): 417 self._env.trace_output):
421 output = device.StartInstrumentation( 418 output = device.StartInstrumentation(
422 target, raw=True, extras=extras, timeout=timeout, retries=0) 419 target, raw=True, extras=extras, timeout=timeout, retries=0)
423 420
424 logcat_url = logmon.GetLogcatURL() 421 logcat_url = logmon.GetLogcatURL()
425 duration_ms = time_ms() - start_ms 422 duration_ms = time_ms() - start_ms
426 if flags_to_add or flags_to_remove: 423 if flags_to_add:
427 self._flag_changers[str(device)].Restore() 424 self._flag_changers[str(device)].Restore()
428 if test_timeout_scale: 425 if test_timeout_scale:
429 valgrind_tools.SetChromeTimeoutScale( 426 valgrind_tools.SetChromeTimeoutScale(
430 device, self._test_instance.timeout_scale) 427 device, self._test_instance.timeout_scale)
431 428
432 # TODO(jbudorick): Make instrumentation tests output a JSON so this 429 # TODO(jbudorick): Make instrumentation tests output a JSON so this
433 # doesn't have to parse the output. 430 # doesn't have to parse the output.
434 result_code, result_bundle, statuses = ( 431 result_code, result_bundle, statuses = (
435 self._test_instance.ParseAmInstrumentRawOutput(output)) 432 self._test_instance.ParseAmInstrumentRawOutput(output))
436 results = self._test_instance.GenerateTestResults( 433 results = self._test_instance.GenerateTestResults(
437 result_code, result_bundle, statuses, start_ms, duration_ms) 434 result_code, result_bundle, statuses, start_ms, duration_ms)
438 for result in results: 435 for result in results:
439 if logcat_url: 436 if logcat_url:
440 result.SetLink('logcat', logcat_url) 437 result.SetLink('logcat', logcat_url)
441 438
442 if _IsRenderTest(test): 439 if _IsRenderTest(test):
443 # Render tests do not cause test failure by default. So we have to check 440 # Render tests do not cause test failure by default. So we have to check
444 # to see if any failure images were generated even if the test does not 441 # to see if any failure images were generated even if the test does not
445 # fail. 442 # fail.
446 try: 443 try:
447 self._ProcessRenderTestResults( 444 self._ProcessRenderTestResults(
448 device, render_tests_device_output_dir, results) 445 device, render_tests_device_output_dir, results)
449 finally: 446 finally:
450 device.RemovePath(render_tests_device_output_dir, 447 device.RemovePath(render_tests_device_output_dir,
451 recursive=True, force=True) 448 recursive=True, force=True)
452 449
453 # Update the result name if the test used flags. 450 # Update the result name if the test used flags.
454 if flags_to_add or flags_to_remove: 451 if flags_to_add:
455 for r in results: 452 for r in results:
456 if r.GetName() == test_name: 453 if r.GetName() == test_name:
457 r.SetName(test_display_name) 454 r.SetName(test_display_name)
458 455
459 # Add UNKNOWN results for any missing tests. 456 # Add UNKNOWN results for any missing tests.
460 iterable_test = test if isinstance(test, list) else [test] 457 iterable_test = test if isinstance(test, list) else [test]
461 test_names = set(self._GetUniqueTestName(t) for t in iterable_test) 458 test_names = set(self._GetUniqueTestName(t) for t in iterable_test)
462 results_names = set(r.GetName() for r in results) 459 results_names = set(r.GetName() for r in results)
463 results.extend( 460 results.extend(
464 base_test_result.BaseTestResult(u, base_test_result.ResultType.UNKNOWN) 461 base_test_result.BaseTestResult(u, base_test_result.ResultType.UNKNOWN)
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) 685 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations)
689 686
690 return timeout 687 return timeout
691 688
692 def _IsRenderTest(test): 689 def _IsRenderTest(test):
693 """Determines if a test or list of tests has a RenderTest amongst them.""" 690 """Determines if a test or list of tests has a RenderTest amongst them."""
694 if not isinstance(test, list): 691 if not isinstance(test, list):
695 test = [test] 692 test = [test]
696 return any([RENDER_TEST_FEATURE_ANNOTATION in t['annotations'].get( 693 return any([RENDER_TEST_FEATURE_ANNOTATION in t['annotations'].get(
697 FEATURE_ANNOTATION, {}).get('value', ()) for t in test]) 694 FEATURE_ANNOTATION, {}).get('value', ()) for t in test])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698