OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2013 The Chromium Authors. All rights reserved. | 3 # Copyright 2013 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Runs all types of tests from one unified interface. | 7 """Runs all types of tests from one unified interface. |
8 | 8 |
9 TODO(gkanwar): | 9 TODO(gkanwar): |
10 * Add options to run Monkey tests. | 10 * Add options to run Monkey tests. |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 'Use this at own risk for speeding up test ' | 84 'Use this at own risk for speeding up test ' |
85 'execution on local machine.')) | 85 'execution on local machine.')) |
86 option_parser.add_option('-d', '--device', dest='test_device', | 86 option_parser.add_option('-d', '--device', dest='test_device', |
87 help=('Target device for the test suite ' | 87 help=('Target device for the test suite ' |
88 'to run on.')) | 88 'to run on.')) |
89 | 89 |
90 | 90 |
91 def ProcessCommonOptions(options): | 91 def ProcessCommonOptions(options): |
92 """Processes and handles all common options.""" | 92 """Processes and handles all common options.""" |
93 run_tests_helper.SetLogLevel(options.verbose_count) | 93 run_tests_helper.SetLogLevel(options.verbose_count) |
| 94 constants.SetBuildType(options.build_type) |
94 | 95 |
95 | 96 |
96 def AddGTestOptions(option_parser): | 97 def AddGTestOptions(option_parser): |
97 """Adds gtest options to |option_parser|.""" | 98 """Adds gtest options to |option_parser|.""" |
98 | 99 |
99 option_parser.usage = '%prog gtest [options]' | 100 option_parser.usage = '%prog gtest [options]' |
100 option_parser.command_list = [] | 101 option_parser.command_list = [] |
101 option_parser.example = '%prog gtest -s base_unittests' | 102 option_parser.example = '%prog gtest -s base_unittests' |
102 | 103 |
103 # TODO(gkanwar): Make this option required | 104 # TODO(gkanwar): Make this option required |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 else: | 265 else: |
265 options.test_apk_path = os.path.join(_SDK_OUT_DIR, | 266 options.test_apk_path = os.path.join(_SDK_OUT_DIR, |
266 options.build_type, | 267 options.build_type, |
267 constants.SDK_BUILD_APKS_DIR, | 268 constants.SDK_BUILD_APKS_DIR, |
268 '%s.apk' % options.test_apk) | 269 '%s.apk' % options.test_apk) |
269 options.test_apk_jar_path = os.path.join( | 270 options.test_apk_jar_path = os.path.join( |
270 _SDK_OUT_DIR, options.build_type, constants.SDK_BUILD_TEST_JAVALIB_DIR, | 271 _SDK_OUT_DIR, options.build_type, constants.SDK_BUILD_TEST_JAVALIB_DIR, |
271 '%s.jar' % options.test_apk) | 272 '%s.jar' % options.test_apk) |
272 | 273 |
273 return instrumentation_test_options.InstrumentationOptions( | 274 return instrumentation_test_options.InstrumentationOptions( |
274 options.build_type, | |
275 options.tool, | 275 options.tool, |
276 options.cleanup_test_files, | 276 options.cleanup_test_files, |
277 options.push_deps, | 277 options.push_deps, |
278 options.annotations, | 278 options.annotations, |
279 options.exclude_annotations, | 279 options.exclude_annotations, |
280 options.test_filter, | 280 options.test_filter, |
281 options.test_data, | 281 options.test_data, |
282 options.save_perf_json, | 282 options.save_perf_json, |
283 options.screenshot_failures, | 283 options.screenshot_failures, |
284 options.wait_for_debugger, | 284 options.wait_for_debugger, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 options.uiautomator_jar = options.test_jar | 333 options.uiautomator_jar = options.test_jar |
334 else: | 334 else: |
335 options.uiautomator_jar = os.path.join( | 335 options.uiautomator_jar = os.path.join( |
336 _SDK_OUT_DIR, options.build_type, constants.SDK_BUILD_JAVALIB_DIR, | 336 _SDK_OUT_DIR, options.build_type, constants.SDK_BUILD_JAVALIB_DIR, |
337 '%s.dex.jar' % options.test_jar) | 337 '%s.dex.jar' % options.test_jar) |
338 options.uiautomator_info_jar = ( | 338 options.uiautomator_info_jar = ( |
339 options.uiautomator_jar[:options.uiautomator_jar.find('.dex.jar')] + | 339 options.uiautomator_jar[:options.uiautomator_jar.find('.dex.jar')] + |
340 '_java.jar') | 340 '_java.jar') |
341 | 341 |
342 return uiautomator_test_options.UIAutomatorOptions( | 342 return uiautomator_test_options.UIAutomatorOptions( |
343 options.build_type, | |
344 options.tool, | 343 options.tool, |
345 options.cleanup_test_files, | 344 options.cleanup_test_files, |
346 options.push_deps, | 345 options.push_deps, |
347 options.annotations, | 346 options.annotations, |
348 options.exclude_annotations, | 347 options.exclude_annotations, |
349 options.test_filter, | 348 options.test_filter, |
350 options.test_data, | 349 options.test_data, |
351 options.save_perf_json, | 350 options.save_perf_json, |
352 options.screenshot_failures, | 351 options.screenshot_failures, |
353 options.uiautomator_jar, | 352 options.uiautomator_jar, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 monkey tests. | 399 monkey tests. |
401 """ | 400 """ |
402 if not options.package_name: | 401 if not options.package_name: |
403 error_func('Package name is required.') | 402 error_func('Package name is required.') |
404 | 403 |
405 category = options.category | 404 category = options.category |
406 if category: | 405 if category: |
407 category = options.category.split(',') | 406 category = options.category.split(',') |
408 | 407 |
409 return monkey_test_options.MonkeyOptions( | 408 return monkey_test_options.MonkeyOptions( |
410 options.build_type, | |
411 options.verbose_count, | 409 options.verbose_count, |
412 options.package_name, | 410 options.package_name, |
413 options.activity_name, | 411 options.activity_name, |
414 options.event_count, | 412 options.event_count, |
415 category, | 413 category, |
416 options.throttle, | 414 options.throttle, |
417 options.seed, | 415 options.seed, |
418 options.extra_args) | 416 options.extra_args) |
419 | 417 |
420 | 418 |
421 def _RunGTests(options, error_func): | 419 def _RunGTests(options, error_func): |
422 """Subcommand of RunTestsCommands which runs gtests.""" | 420 """Subcommand of RunTestsCommands which runs gtests.""" |
423 ProcessGTestOptions(options) | 421 ProcessGTestOptions(options) |
424 | 422 |
425 exit_code = 0 | 423 exit_code = 0 |
426 for suite_name in options.suite_name: | 424 for suite_name in options.suite_name: |
427 # TODO(gkanwar): Move this into ProcessGTestOptions once we require -s for | 425 # TODO(gkanwar): Move this into ProcessGTestOptions once we require -s for |
428 # the gtest command. | 426 # the gtest command. |
429 gtest_options = gtest_test_options.GTestOptions( | 427 gtest_options = gtest_test_options.GTestOptions( |
430 options.build_type, | |
431 options.tool, | 428 options.tool, |
432 options.cleanup_test_files, | 429 options.cleanup_test_files, |
433 options.push_deps, | 430 options.push_deps, |
434 options.test_filter, | 431 options.test_filter, |
435 options.test_arguments, | 432 options.test_arguments, |
436 options.timeout, | 433 options.timeout, |
437 suite_name) | 434 suite_name) |
438 runner_factory, tests = gtest_setup.Setup(gtest_options) | 435 runner_factory, tests = gtest_setup.Setup(gtest_options) |
439 | 436 |
440 results, test_exit_code = test_dispatcher.RunTests( | 437 results, test_exit_code = test_dispatcher.RunTests( |
441 tests, runner_factory, False, options.test_device, | 438 tests, runner_factory, False, options.test_device, |
442 shard=True, | 439 shard=True, |
443 build_type=options.build_type, | |
444 test_timeout=None, | 440 test_timeout=None, |
445 num_retries=options.num_retries) | 441 num_retries=options.num_retries) |
446 | 442 |
447 if test_exit_code and exit_code != constants.ERROR_EXIT_CODE: | 443 if test_exit_code and exit_code != constants.ERROR_EXIT_CODE: |
448 exit_code = test_exit_code | 444 exit_code = test_exit_code |
449 | 445 |
450 report_results.LogFull( | 446 report_results.LogFull( |
451 results=results, | 447 results=results, |
452 test_type='Unit test', | 448 test_type='Unit test', |
453 test_package=suite_name, | 449 test_package=suite_name, |
454 build_type=options.build_type, | |
455 flakiness_server=options.flakiness_dashboard_server) | 450 flakiness_server=options.flakiness_dashboard_server) |
456 | 451 |
457 if os.path.isdir(constants.ISOLATE_DEPS_DIR): | 452 if os.path.isdir(constants.ISOLATE_DEPS_DIR): |
458 shutil.rmtree(constants.ISOLATE_DEPS_DIR) | 453 shutil.rmtree(constants.ISOLATE_DEPS_DIR) |
459 | 454 |
460 return exit_code | 455 return exit_code |
461 | 456 |
462 | 457 |
463 def _RunInstrumentationTests(options, error_func): | 458 def _RunInstrumentationTests(options, error_func): |
464 """Subcommand of RunTestsCommands which runs instrumentation tests.""" | 459 """Subcommand of RunTestsCommands which runs instrumentation tests.""" |
465 instrumentation_options = ProcessInstrumentationOptions(options, error_func) | 460 instrumentation_options = ProcessInstrumentationOptions(options, error_func) |
466 | 461 |
467 results = base_test_result.TestRunResults() | 462 results = base_test_result.TestRunResults() |
468 exit_code = 0 | 463 exit_code = 0 |
469 | 464 |
470 if options.run_java_tests: | 465 if options.run_java_tests: |
471 runner_factory, tests = instrumentation_setup.Setup(instrumentation_options) | 466 runner_factory, tests = instrumentation_setup.Setup(instrumentation_options) |
472 | 467 |
473 test_results, exit_code = test_dispatcher.RunTests( | 468 test_results, exit_code = test_dispatcher.RunTests( |
474 tests, runner_factory, options.wait_for_debugger, | 469 tests, runner_factory, options.wait_for_debugger, |
475 options.test_device, | 470 options.test_device, |
476 shard=True, | 471 shard=True, |
477 build_type=options.build_type, | |
478 test_timeout=None, | 472 test_timeout=None, |
479 num_retries=options.num_retries) | 473 num_retries=options.num_retries) |
480 | 474 |
481 results.AddTestRunResults(test_results) | 475 results.AddTestRunResults(test_results) |
482 | 476 |
483 if options.run_python_tests: | 477 if options.run_python_tests: |
484 runner_factory, tests = host_driven_setup.InstrumentationSetup( | 478 runner_factory, tests = host_driven_setup.InstrumentationSetup( |
485 options.python_test_root, options.official_build, | 479 options.python_test_root, options.official_build, |
486 instrumentation_options) | 480 instrumentation_options) |
487 | 481 |
488 if tests: | 482 if tests: |
489 test_results, test_exit_code = test_dispatcher.RunTests( | 483 test_results, test_exit_code = test_dispatcher.RunTests( |
490 tests, runner_factory, False, | 484 tests, runner_factory, False, |
491 options.test_device, | 485 options.test_device, |
492 shard=True, | 486 shard=True, |
493 build_type=options.build_type, | |
494 test_timeout=None, | 487 test_timeout=None, |
495 num_retries=options.num_retries) | 488 num_retries=options.num_retries) |
496 | 489 |
497 results.AddTestRunResults(test_results) | 490 results.AddTestRunResults(test_results) |
498 | 491 |
499 # Only allow exit code escalation | 492 # Only allow exit code escalation |
500 if test_exit_code and exit_code != constants.ERROR_EXIT_CODE: | 493 if test_exit_code and exit_code != constants.ERROR_EXIT_CODE: |
501 exit_code = test_exit_code | 494 exit_code = test_exit_code |
502 | 495 |
503 report_results.LogFull( | 496 report_results.LogFull( |
504 results=results, | 497 results=results, |
505 test_type='Instrumentation', | 498 test_type='Instrumentation', |
506 test_package=os.path.basename(options.test_apk), | 499 test_package=os.path.basename(options.test_apk), |
507 annotation=options.annotations, | 500 annotation=options.annotations, |
508 build_type=options.build_type, | |
509 flakiness_server=options.flakiness_dashboard_server) | 501 flakiness_server=options.flakiness_dashboard_server) |
510 | 502 |
511 return exit_code | 503 return exit_code |
512 | 504 |
513 | 505 |
514 def _RunUIAutomatorTests(options, error_func): | 506 def _RunUIAutomatorTests(options, error_func): |
515 """Subcommand of RunTestsCommands which runs uiautomator tests.""" | 507 """Subcommand of RunTestsCommands which runs uiautomator tests.""" |
516 uiautomator_options = ProcessUIAutomatorOptions(options, error_func) | 508 uiautomator_options = ProcessUIAutomatorOptions(options, error_func) |
517 | 509 |
518 runner_factory, tests = uiautomator_setup.Setup(uiautomator_options) | 510 runner_factory, tests = uiautomator_setup.Setup(uiautomator_options) |
519 | 511 |
520 results, exit_code = test_dispatcher.RunTests( | 512 results, exit_code = test_dispatcher.RunTests( |
521 tests, runner_factory, False, options.test_device, | 513 tests, runner_factory, False, options.test_device, |
522 shard=True, | 514 shard=True, |
523 build_type=options.build_type, | |
524 test_timeout=None, | 515 test_timeout=None, |
525 num_retries=options.num_retries) | 516 num_retries=options.num_retries) |
526 | 517 |
527 report_results.LogFull( | 518 report_results.LogFull( |
528 results=results, | 519 results=results, |
529 test_type='UIAutomator', | 520 test_type='UIAutomator', |
530 test_package=os.path.basename(options.test_jar), | 521 test_package=os.path.basename(options.test_jar), |
531 annotation=options.annotations, | 522 annotation=options.annotations, |
532 build_type=options.build_type, | |
533 flakiness_server=options.flakiness_dashboard_server) | 523 flakiness_server=options.flakiness_dashboard_server) |
534 | 524 |
535 return exit_code | 525 return exit_code |
536 | 526 |
537 | 527 |
538 def _RunMonkeyTests(options, error_func): | 528 def _RunMonkeyTests(options, error_func): |
539 """Subcommand of RunTestsCommands which runs monkey tests.""" | 529 """Subcommand of RunTestsCommands which runs monkey tests.""" |
540 monkey_options = ProcessMonkeyTestOptions(options, error_func) | 530 monkey_options = ProcessMonkeyTestOptions(options, error_func) |
541 | 531 |
542 runner_factory, tests = monkey_setup.Setup(monkey_options) | 532 runner_factory, tests = monkey_setup.Setup(monkey_options) |
543 | 533 |
544 results, exit_code = test_dispatcher.RunTests( | 534 results, exit_code = test_dispatcher.RunTests( |
545 tests, runner_factory, False, None, shard=False) | 535 tests, runner_factory, False, None, shard=False) |
546 | 536 |
547 report_results.LogFull( | 537 report_results.LogFull( |
548 results=results, | 538 results=results, |
549 test_type='Monkey', | 539 test_type='Monkey', |
550 test_package='Monkey', | 540 test_package='Monkey') |
551 build_type=options.build_type) | |
552 | 541 |
553 return exit_code | 542 return exit_code |
554 | 543 |
555 | 544 |
556 | 545 |
557 def RunTestsCommand(command, options, args, option_parser): | 546 def RunTestsCommand(command, options, args, option_parser): |
558 """Checks test type and dispatches to the appropriate function. | 547 """Checks test type and dispatches to the appropriate function. |
559 | 548 |
560 Args: | 549 Args: |
561 command: String indicating the command that was received to trigger | 550 command: String indicating the command that was received to trigger |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 option_parser.error('Invalid command.') | 674 option_parser.error('Invalid command.') |
686 command = argv[1] | 675 command = argv[1] |
687 VALID_COMMANDS[command].add_options_func(option_parser) | 676 VALID_COMMANDS[command].add_options_func(option_parser) |
688 options, args = option_parser.parse_args(argv) | 677 options, args = option_parser.parse_args(argv) |
689 return VALID_COMMANDS[command].run_command_func( | 678 return VALID_COMMANDS[command].run_command_func( |
690 command, options, args, option_parser) | 679 command, options, args, option_parser) |
691 | 680 |
692 | 681 |
693 if __name__ == '__main__': | 682 if __name__ == '__main__': |
694 sys.exit(main(sys.argv)) | 683 sys.exit(main(sys.argv)) |
OLD | NEW |