libchromiumcontent/script/run_tests

92 строки
3.3 KiB
Python
Executable File

#!/usr/bin/env python
import argparse
import os
import platform
import re
import sys
import subprocess
from lib.config import get_output_dir, VENDOR_DIR
PYYAML_LIB_DIR = os.path.join(VENDOR_DIR, 'pyyaml', 'lib')
sys.path.append(PYYAML_LIB_DIR)
import yaml
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
if sys.platform in ['win32', 'cygwin']:
BINARY_TEST_REGEX = re.compile(r'_(unit|browser)?tests(\.exe)?$', re.IGNORECASE)
else:
BINARY_TEST_REGEX = re.compile(r'_(unit|browser)?tests$')
def GetTestsToRun(args):
build_dir = get_output_dir(SOURCE_ROOT, args.target_arch, 'tests')
tests = []
if args.only is None:
for file_name in os.listdir(build_dir):
if args.exclude and file_name in args.exclude:
continue
if re.search(BINARY_TEST_REGEX, file_name):
tests.append(os.path.join(build_dir, file_name))
else:
for test_name in args.only:
if args.exclude and test_name in args.exclude:
continue
test_file = os.path.join(build_dir, test_name)
if os.path.isfile(test_file):
tests.append(test_file)
else:
print 'Invalid test target name: ' + test_name
return tests
def RunTests(binary_tests, generate_report):
if binary_tests:
disabled_tests_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'disabled-tests.yaml')
disabled_tests = {}
if os.path.isfile(disabled_tests_path):
disabled_tests = yaml.load(file(disabled_tests_path, 'r'))
else:
print 'No disabled-tests.yaml file found. Not excluding any tests.'
results = []
for test in binary_tests:
test_args = [test]
test_name = os.path.basename(test)
if disabled_tests and test_name in disabled_tests and disabled_tests[test_name]:
exclusion_filter = '-' + ':'.join(disabled_tests[test_name])
test_args.append('--gtest_filter=%s' % exclusion_filter)
# Add reporting path if enabled
if generate_report:
test_args.append("--gtest_output=xml:" + get_output_file_path(test_name))
results.append((os.path.basename(test),
subprocess.call(test_args) == 0))
failed = [test
for (test, success) in results
if not success]
print '%d tests run.' % len(results)
if failed:
print 'The following %d tests failed:' % len(failed)
for test in failed:
print test
return 1
else:
print 'All tests passed!'
else:
print 'Nothing to test - no tests found!'
return 0
def get_output_file_path(test_name):
return os.path.join(SOURCE_ROOT, 'test_reports', test_name + os.path.extsep + 'xml')
def main():
parser = argparse.ArgumentParser(description='Run Chromium tests')
parser.add_argument('-t', '--target_arch', default='x64', help='x64 or ia32')
parser.add_argument('--only', nargs='+', help='Names of the test targets to run. For example: base_unittests url_unittests')
parser.add_argument('--exclude', nargs='+', help='Names of the test targets to exclude. For example: base_unittests url_unittests')
parser.add_argument('--generate_report', action='store_true', help='Generate xml reports for test runs. Mainly for CI.')
args = parser.parse_args()
tests = GetTestsToRun(args)
return RunTests(tests, args.generate_report)
if __name__ == '__main__':
sys.exit(main())