From 6f55e949a1b272389f45811c59603c6c3076107a Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Thu, 11 Feb 2016 09:56:57 -0800 Subject: [PATCH] Add --repeat-until-unexpected option to wptrunner --- tests/wpt/harness/wptrunner/wptcommandline.py | 2 ++ tests/wpt/harness/wptrunner/wptrunner.py | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/wpt/harness/wptrunner/wptcommandline.py b/tests/wpt/harness/wptrunner/wptcommandline.py index 96b69060767..5b110094e5c 100644 --- a/tests/wpt/harness/wptrunner/wptcommandline.py +++ b/tests/wpt/harness/wptrunner/wptcommandline.py @@ -72,6 +72,8 @@ def create_parser(product_choices=None): help="Multiplier relative to standard test timeout to use") parser.add_argument("--repeat", action="store", type=int, default=1, help="Number of times to run the tests") + parser.add_argument("--repeat-until-unexpected", action="store_true", default=None, + help="Run tests in a loop until one returns an unexpected result") parser.add_argument("--no-capture-stdio", action="store_true", default=False, help="Don't capture stdio and write to logging") diff --git a/tests/wpt/harness/wptrunner/wptrunner.py b/tests/wpt/harness/wptrunner/wptrunner.py index 29fd06a3619..65b02cc2431 100644 --- a/tests/wpt/harness/wptrunner/wptrunner.py +++ b/tests/wpt/harness/wptrunner/wptrunner.py @@ -160,10 +160,15 @@ def run_tests(config, test_paths, product, **kwargs): browser_kwargs = get_browser_kwargs(ssl_env=ssl_env, **kwargs) repeat = kwargs["repeat"] - for repeat_count in xrange(repeat): - if repeat > 1: - logger.info("Repetition %i / %i" % (repeat_count + 1, repeat)) + repeat_count = 0 + repeat_until_unexpected = kwargs["repeat_until_unexpected"] + while repeat_count < repeat or repeat_until_unexpected: + repeat_count += 1 + if repeat_until_unexpected: + logger.info("Repetition %i" % (repeat_count)) + elif repeat > 1: + logger.info("Repetition %i / %i" % (repeat_count, repeat)) unexpected_count = 0 logger.suite_start(test_loader.test_ids, run_info) @@ -208,6 +213,8 @@ def run_tests(config, test_paths, product, **kwargs): unexpected_total += unexpected_count logger.info("Got %i unexpected results" % unexpected_count) + if repeat_until_unexpected and unexpected_total > 0: + break logger.suite_end() return unexpected_total == 0