diff --git a/taskcluster/docker/visual-metrics/run-visual-metrics.py b/taskcluster/docker/visual-metrics/run-visual-metrics.py index 698d66237..2593a0877 100755 --- a/taskcluster/docker/visual-metrics/run-visual-metrics.py +++ b/taskcluster/docker/visual-metrics/run-visual-metrics.py @@ -46,6 +46,9 @@ class Job: #: The extra options for this job. extra_options = attr.ib(type=str) + #: If true, we allow 0's in the vismet results + accept_zero_vismet = attr.ib(type=bool) + #: json_path: The path to the ``browsertime.json`` file on disk. json_path = attr.ib(type=Path) @@ -61,6 +64,7 @@ JOB_SCHEMA = Schema( Required("test_name"): str, Required("browsertime_json_path"): str, Required("extra_options"): [str], + Required("accept_zero_vismet"): bool, } ], Required("application"): {Required("name"): str, "version": str}, @@ -185,7 +189,7 @@ def append_result(log, suites, test_name, name, result, extra_options): "replicates": [result], "lowerIsBetter": True, "unit": "ms", - "shouldAlert": SHOULD_ALERT[name], + "shouldAlert": SHOULD_ALERT.get(name, False), } else: subtests[name]["replicates"].append(result) @@ -322,6 +326,7 @@ def main(log, args): extra_options=len(job["extra_options"]) > 0 and job["extra_options"] or jobs_json["extra_options"], + accept_zero_vismet=job["accept_zero_vismet"], json_path=browsertime_json_path, video_path=browsertime_json_path.parent / video, count=count, @@ -420,18 +425,20 @@ def run_visual_metrics(job, visualmetrics_path, options): # Python 3.5 requires a str object (not 3.6+) res = json.loads(res.decode("utf8")) - # Ensure that none of these values are at 0 which - # is indicative of a failling test - monitored_tests = [ - "contentfulspeedindex", - "lastvisualchange", - "perceptualspeedindex", - "speedindex", - ] failed_tests = [] - for metric, val in res.items(): - if metric.lower() in monitored_tests and val == 0: - failed_tests.append(metric) + if not job.accept_zero_vismet: + # Ensure that none of these values are at 0 which + # is indicative of a failling test + monitored_tests = [ + "contentfulspeedindex", + "lastvisualchange", + "perceptualspeedindex", + "speedindex", + ] + for metric, val in res.items(): + if metric.lower() in monitored_tests and val == 0: + failed_tests.append(metric) + if failed_tests: log.error( "TEST-UNEXPECTED-FAIL | Some visual metrics have an erroneous value of 0."