| Index: tools/chrome_proxy/webdriver/variations_combinations.py
|
| diff --git a/tools/chrome_proxy/webdriver/variations_combinations.py b/tools/chrome_proxy/webdriver/variations_combinations.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3471a418acd2a44887806c0aab0c0c678fadf48e
|
| --- /dev/null
|
| +++ b/tools/chrome_proxy/webdriver/variations_combinations.py
|
| @@ -0,0 +1,101 @@
|
| +# Copyright 2017 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import os
|
| +import re
|
| +import sys
|
| +import time
|
| +import unittest
|
| +
|
| +import common
|
| +
|
| +
|
| +combinations = [
|
| + # One object for each set of tests to run with the given variations.
|
| + {
|
| + 'label': 'dummy example',
|
| + 'tests': [
|
| + # Of the form <file_name>.<class_name>.<method_name>
|
| + # Also accepts wildcard (*) as matching anything.
|
| + "lite_page.LitePage.testLitePage",
|
| + "lite_page.LitePage.testLitePageFallback",
|
| + "quic*"
|
| + ],
|
| + 'variations': [
|
| + "DataReductionProxyUseQuic/Enabled",
|
| + "DataCompressionProxyLoFi/Enabled_Preview",
|
| + "DataCompressionProxyLitePageFallback/Enabled"
|
| + ],
|
| + 'variations-params': [
|
| + "DataCompressionProxyLoFi.Enabled_Preview:effective_connection_type/4G"
|
| + ]
|
| + }
|
| +]
|
| +
|
| +
|
| +def GetAllTestsFromRegexList(test_list, test_suite_iter):
|
| + """A helper function to make a test suite from tests matching the given list.
|
| +
|
| + Args:
|
| + test_list: a string list of all tests to run, allowing for simple regex
|
| + test_suite_iter: An iterator of all test suites to search
|
| + Returns:
|
| + a test suite with all the tests specified by the test_list
|
| + """
|
| + id_to_test_map = {}
|
| + for test_suite in test_suite_iter:
|
| + for test_case in test_suite:
|
| + for test_method in test_case:
|
| + id_to_test_map[test_method.id()] = test_method
|
| + my_test_suite = unittest.TestSuite()
|
| + for test_spec in test_list:
|
| + regex = re.compile('^' + test_spec.replace('.', '\\.').replace('*', '.*')
|
| + + '$')
|
| + for test_id in sorted(id_to_test_map):
|
| + if regex.match(test_id):
|
| + my_test_suite.addTest(id_to_test_map[test_id])
|
| + return my_test_suite
|
| +
|
| +def ParseFlagsWithExtraBrowserArgs(extra_args):
|
| + """Generates a function to override common.ParseFlags.
|
| +
|
| + The returned function will honor everything in the original ParseFlags(), but
|
| + adds on additional browser_args.
|
| +
|
| + Args:
|
| + extra_args: The extra browser agruments to add.
|
| + Returns:
|
| + A function to override common.ParseFlags with additional browser_args.
|
| + """
|
| + original_flags = common.ParseFlags()
|
| + def AddExtraBrowserArgs():
|
| + original_flags.browser_args = ((original_flags.browser_args if
|
| + original_flags.browser_args else '') + ' ' + extra_args)
|
| + return original_flags
|
| + return AddExtraBrowserArgs
|
| +
|
| +def main():
|
| + """Runs each set of tests against its set of variations.
|
| +
|
| + For each test combination, the above variation specifications will be used to
|
| + setup the browser arguments for each test given above that will be run.
|
| + """
|
| + flags = common.ParseFlags()
|
| + for variation_test in combinations:
|
| + # Set browser arguments to use the given variations.
|
| + extra_args = '--force-fieldtrials=' + '/'.join(variation_test['variations'])
|
| + extra_args += ' --force-fieldtrial-params=' + ','.join(
|
| + variation_test['variations-params'])
|
| + common.ParseFlags = ParseFlagsWithExtraBrowserArgs(extra_args)
|
| + # Run the given tests.
|
| + loader = unittest.TestLoader()
|
| + test_suite_iter = loader.discover(os.path.dirname(__file__), pattern='*.py')
|
| + my_test_suite = GetAllTestsFromRegexList(variation_test['tests'],
|
| + test_suite_iter)
|
| + testRunner = unittest.runner.TextTestRunner(verbosity=2,
|
| + failfast=flags.failfast, buffer=(not flags.disable_buffer))
|
| + testRunner.run(my_test_suite)
|
| +
|
| +if __name__ == '__main__':
|
| + main()
|
|
|