1cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2014 The Chromium Authors. All rights reserved. 2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be 3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file. 4cef7893435aa41160dd1255c43cb8498279738ccChris Craik 5cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport os 6cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport unittest 7cef7893435aa41160dd1255c43cb8498279738ccChris Craik 8cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry import story 9cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.internal.results import page_test_results 10cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry import page as page_module 11cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.value import failure 12cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.value import histogram 13cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.value import improvement_direction 14cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.value import list_of_scalar_values 15cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.value import scalar 16cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.value import summary as summary_module 17cef7893435aa41160dd1255c43cb8498279738ccChris Craik 18cef7893435aa41160dd1255c43cb8498279738ccChris Craik 19cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass TestBase(unittest.TestCase): 20cef7893435aa41160dd1255c43cb8498279738ccChris Craik def setUp(self): 21cef7893435aa41160dd1255c43cb8498279738ccChris Craik story_set = story.StorySet(base_dir=os.path.dirname(__file__)) 22cef7893435aa41160dd1255c43cb8498279738ccChris Craik story_set.AddStory( 23cef7893435aa41160dd1255c43cb8498279738ccChris Craik page_module.Page('http://www.bar.com/', story_set, story_set.base_dir)) 24cef7893435aa41160dd1255c43cb8498279738ccChris Craik story_set.AddStory( 25cef7893435aa41160dd1255c43cb8498279738ccChris Craik page_module.Page('http://www.baz.com/', story_set, story_set.base_dir)) 26cef7893435aa41160dd1255c43cb8498279738ccChris Craik story_set.AddStory( 27cef7893435aa41160dd1255c43cb8498279738ccChris Craik page_module.Page('http://www.foo.com/', story_set, story_set.base_dir)) 28cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.story_set = story_set 29cef7893435aa41160dd1255c43cb8498279738ccChris Craik 30cef7893435aa41160dd1255c43cb8498279738ccChris Craik @property 31cef7893435aa41160dd1255c43cb8498279738ccChris Craik def pages(self): 32cef7893435aa41160dd1255c43cb8498279738ccChris Craik return self.story_set.stories 33cef7893435aa41160dd1255c43cb8498279738ccChris Craik 34cef7893435aa41160dd1255c43cb8498279738ccChris Craik 35cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass SummaryTest(TestBase): 36cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testBasicSummary(self): 37cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 38cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 39cef7893435aa41160dd1255c43cb8498279738ccChris Craik 40cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 41cef7893435aa41160dd1255c43cb8498279738ccChris Craik 42cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 43cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'a', 'seconds', 3, 44cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 45cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 46cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 47cef7893435aa41160dd1255c43cb8498279738ccChris Craik 48cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 49cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = scalar.ScalarValue(page1, 'a', 'seconds', 7, 50cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 51cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 52cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 53cef7893435aa41160dd1255c43cb8498279738ccChris Craik 54cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 55cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 56cef7893435aa41160dd1255c43cb8498279738ccChris Craik 57cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0_list = list_of_scalar_values.ListOfScalarValues( 58cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'seconds', [3], 59cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 60cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1_list = list_of_scalar_values.ListOfScalarValues( 61cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'a', 'seconds', [7], 62cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 63cef7893435aa41160dd1255c43cb8498279738ccChris Craik merged_value = list_of_scalar_values.ListOfScalarValues( 64cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'a', 'seconds', [3, 7], 65cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 66cef7893435aa41160dd1255c43cb8498279738ccChris Craik 67cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(3, len(values)) 68cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v0_list, values) 69cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v1_list, values) 70cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(merged_value, values) 71cef7893435aa41160dd1255c43cb8498279738ccChris Craik 72cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testBasicSummaryWithOnlyOnePage(self): 73cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 74cef7893435aa41160dd1255c43cb8498279738ccChris Craik 75cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 76cef7893435aa41160dd1255c43cb8498279738ccChris Craik 77cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 78cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'a', 'seconds', 3, 79cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 80cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 81cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 82cef7893435aa41160dd1255c43cb8498279738ccChris Craik 83cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 84cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 85cef7893435aa41160dd1255c43cb8498279738ccChris Craik 86cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0_list = list_of_scalar_values.ListOfScalarValues( 87cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'seconds', [3], 88cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 89cef7893435aa41160dd1255c43cb8498279738ccChris Craik merged_list = list_of_scalar_values.ListOfScalarValues( 90cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'a', 'seconds', [3], 91cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 92cef7893435aa41160dd1255c43cb8498279738ccChris Craik 93cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(2, len(values)) 94cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v0_list, values) 95cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(merged_list, values) 96cef7893435aa41160dd1255c43cb8498279738ccChris Craik 97cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testBasicSummaryNonuniformResults(self): 98cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 99cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 100cef7893435aa41160dd1255c43cb8498279738ccChris Craik page2 = self.pages[2] 101cef7893435aa41160dd1255c43cb8498279738ccChris Craik 102cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 103cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 104cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'a', 'seconds', 3, 105cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 106cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 107cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = scalar.ScalarValue(page0, 'b', 'seconds', 10, 108cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 109cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 110cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 111cef7893435aa41160dd1255c43cb8498279738ccChris Craik 112cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 113cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2 = scalar.ScalarValue(page1, 'a', 'seconds', 3, 114cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 115cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v2) 116cef7893435aa41160dd1255c43cb8498279738ccChris Craik v3 = scalar.ScalarValue(page1, 'b', 'seconds', 10, 117cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 118cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v3) 119cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 120cef7893435aa41160dd1255c43cb8498279738ccChris Craik 121cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page2) 122cef7893435aa41160dd1255c43cb8498279738ccChris Craik v4 = scalar.ScalarValue(page2, 'a', 'seconds', 7, 123cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 124cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v4) 125cef7893435aa41160dd1255c43cb8498279738ccChris Craik # Note, page[2] does not report a 'b' metric. 126cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page2) 127cef7893435aa41160dd1255c43cb8498279738ccChris Craik 128cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 129cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 130cef7893435aa41160dd1255c43cb8498279738ccChris Craik 131cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0_list = list_of_scalar_values.ListOfScalarValues( 132cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'seconds', [3], 133cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 134cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1_list = list_of_scalar_values.ListOfScalarValues( 135cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'b', 'seconds', [10], 136cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 137cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2_list = list_of_scalar_values.ListOfScalarValues( 138cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'a', 'seconds', [3], 139cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 140cef7893435aa41160dd1255c43cb8498279738ccChris Craik v3_list = list_of_scalar_values.ListOfScalarValues( 141cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'b', 'seconds', [10], 142cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 143cef7893435aa41160dd1255c43cb8498279738ccChris Craik v4_list = list_of_scalar_values.ListOfScalarValues( 144cef7893435aa41160dd1255c43cb8498279738ccChris Craik page2, 'a', 'seconds', [7], 145cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 146cef7893435aa41160dd1255c43cb8498279738ccChris Craik 147cef7893435aa41160dd1255c43cb8498279738ccChris Craik a_summary = list_of_scalar_values.ListOfScalarValues( 148cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'a', 'seconds', [3, 3, 7], 149cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 150cef7893435aa41160dd1255c43cb8498279738ccChris Craik b_summary = list_of_scalar_values.ListOfScalarValues( 151cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'b', 'seconds', [10, 10], 152cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 153cef7893435aa41160dd1255c43cb8498279738ccChris Craik 154cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(7, len(values)) 155cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v0_list, values) 156cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v1_list, values) 157cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v2_list, values) 158cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v3_list, values) 159cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v4_list, values) 160cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(a_summary, values) 161cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(b_summary, values) 162cef7893435aa41160dd1255c43cb8498279738ccChris Craik 163cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testBasicSummaryPassAndFailPage(self): 164cef7893435aa41160dd1255c43cb8498279738ccChris Craik """If a page failed, only print summary for individual pages.""" 165cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 166cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 167cef7893435aa41160dd1255c43cb8498279738ccChris Craik 168cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 169cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 170cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'a', 'seconds', 3, 171cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 172cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 173cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = failure.FailureValue.FromMessage(page0, 'message') 174cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 175cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 176cef7893435aa41160dd1255c43cb8498279738ccChris Craik 177cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 178cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2 = scalar.ScalarValue(page1, 'a', 'seconds', 7, 179cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 180cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v2) 181cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 182cef7893435aa41160dd1255c43cb8498279738ccChris Craik 183cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 184cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 185cef7893435aa41160dd1255c43cb8498279738ccChris Craik 186cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0_list = list_of_scalar_values.ListOfScalarValues( 187cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'seconds', [3], 188cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 189cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2_list = list_of_scalar_values.ListOfScalarValues( 190cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'a', 'seconds', [7], 191cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 192cef7893435aa41160dd1255c43cb8498279738ccChris Craik 193cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(2, len(values)) 194cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v0_list, values) 195cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v2_list, values) 196cef7893435aa41160dd1255c43cb8498279738ccChris Craik 197cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testRepeatedPagesetOneIterationOnePageFails(self): 198cef7893435aa41160dd1255c43cb8498279738ccChris Craik """Page fails on one iteration, no averaged results should print.""" 199cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 200cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 201cef7893435aa41160dd1255c43cb8498279738ccChris Craik 202cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 203cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 204cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'a', 'seconds', 3, 205cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 206cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 207cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 208cef7893435aa41160dd1255c43cb8498279738ccChris Craik 209cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 210cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = scalar.ScalarValue(page1, 'a', 'seconds', 7, 211cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 212cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 213cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2 = failure.FailureValue.FromMessage(page1, 'message') 214cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v2) 215cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 216cef7893435aa41160dd1255c43cb8498279738ccChris Craik 217cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 218cef7893435aa41160dd1255c43cb8498279738ccChris Craik v3 = scalar.ScalarValue(page0, 'a', 'seconds', 4, 219cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 220cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v3) 221cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 222cef7893435aa41160dd1255c43cb8498279738ccChris Craik 223cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 224cef7893435aa41160dd1255c43cb8498279738ccChris Craik v4 = scalar.ScalarValue(page1, 'a', 'seconds', 8, 225cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 226cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v4) 227cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 228cef7893435aa41160dd1255c43cb8498279738ccChris Craik 229cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 230cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 231cef7893435aa41160dd1255c43cb8498279738ccChris Craik 232cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0_aggregated = list_of_scalar_values.ListOfScalarValues( 233cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'seconds', [3, 4], 234cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 235cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1_aggregated = list_of_scalar_values.ListOfScalarValues( 236cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'a', 'seconds', [7, 8], 237cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 238cef7893435aa41160dd1255c43cb8498279738ccChris Craik 239cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(2, len(values)) 240cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(page0_aggregated, values) 241cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(page1_aggregated, values) 242cef7893435aa41160dd1255c43cb8498279738ccChris Craik 243cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testRepeatedPages(self): 244cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 245cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 246cef7893435aa41160dd1255c43cb8498279738ccChris Craik 247cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 248cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 249cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'a', 'seconds', 3, 250cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 251cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 252cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 253cef7893435aa41160dd1255c43cb8498279738ccChris Craik 254cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 255cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2 = scalar.ScalarValue(page0, 'a', 'seconds', 4, 256cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 257cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v2) 258cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 259cef7893435aa41160dd1255c43cb8498279738ccChris Craik 260cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 261cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = scalar.ScalarValue(page1, 'a', 'seconds', 7, 262cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 263cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 264cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 265cef7893435aa41160dd1255c43cb8498279738ccChris Craik 266cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 267cef7893435aa41160dd1255c43cb8498279738ccChris Craik v3 = scalar.ScalarValue(page1, 'a', 'seconds', 8, 268cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 269cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v3) 270cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 271cef7893435aa41160dd1255c43cb8498279738ccChris Craik 272cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 273cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 274cef7893435aa41160dd1255c43cb8498279738ccChris Craik 275cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0_aggregated = list_of_scalar_values.ListOfScalarValues( 276cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'seconds', [3, 4], 277cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 278cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1_aggregated = list_of_scalar_values.ListOfScalarValues( 279cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'a', 'seconds', [7, 8], 280cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 281cef7893435aa41160dd1255c43cb8498279738ccChris Craik a_summary = list_of_scalar_values.ListOfScalarValues( 282cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'a', 'seconds', [3, 4, 7, 8], 283cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 284cef7893435aa41160dd1255c43cb8498279738ccChris Craik 285cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(3, len(values)) 286cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(page0_aggregated, values) 287cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(page1_aggregated, values) 288cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(a_summary, values) 289cef7893435aa41160dd1255c43cb8498279738ccChris Craik 290cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testPageRunsTwice(self): 291cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 292cef7893435aa41160dd1255c43cb8498279738ccChris Craik 293cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 294cef7893435aa41160dd1255c43cb8498279738ccChris Craik 295cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 296cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'b', 'seconds', 2, 297cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 298cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 299cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 300cef7893435aa41160dd1255c43cb8498279738ccChris Craik 301cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 302cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = scalar.ScalarValue(page0, 'b', 'seconds', 3, 303cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 304cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 305cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 306cef7893435aa41160dd1255c43cb8498279738ccChris Craik 307cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 308cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 309cef7893435aa41160dd1255c43cb8498279738ccChris Craik 310cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0_aggregated = list_of_scalar_values.ListOfScalarValues( 311cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'b', 'seconds', [2, 3], 312cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 313cef7893435aa41160dd1255c43cb8498279738ccChris Craik b_summary = list_of_scalar_values.ListOfScalarValues( 314cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'b', 'seconds', [2, 3], 315cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 316cef7893435aa41160dd1255c43cb8498279738ccChris Craik 317cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(2, len(values)) 318cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(page0_aggregated, values) 319cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(b_summary, values) 320cef7893435aa41160dd1255c43cb8498279738ccChris Craik 321cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testListValue(self): 322cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 323cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 324cef7893435aa41160dd1255c43cb8498279738ccChris Craik 325cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 326cef7893435aa41160dd1255c43cb8498279738ccChris Craik 327cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 328cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = list_of_scalar_values.ListOfScalarValues( 329cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'b', 'seconds', [2, 2], 330cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 331cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 332cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 333cef7893435aa41160dd1255c43cb8498279738ccChris Craik 334cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 335cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = list_of_scalar_values.ListOfScalarValues( 336cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'b', 'seconds', [3, 3], 337cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 338cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 339cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 340cef7893435aa41160dd1255c43cb8498279738ccChris Craik 341cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 342cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 343cef7893435aa41160dd1255c43cb8498279738ccChris Craik 344cef7893435aa41160dd1255c43cb8498279738ccChris Craik b_summary = list_of_scalar_values.ListOfScalarValues( 345cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'b', 'seconds', [2, 2, 3, 3], std=0.0, 346cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 347cef7893435aa41160dd1255c43cb8498279738ccChris Craik 348cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(3, len(values)) 349cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v0, values) 350cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v1, values) 351cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(b_summary, values) 352cef7893435aa41160dd1255c43cb8498279738ccChris Craik 353cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testHistogram(self): 354cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 355cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 356cef7893435aa41160dd1255c43cb8498279738ccChris Craik 357cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 358cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 359cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = histogram.HistogramValue( 360cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'units', 361cef7893435aa41160dd1255c43cb8498279738ccChris Craik raw_value_json='{"buckets": [{"low": 1, "high": 2, "count": 1}]}', 362cef7893435aa41160dd1255c43cb8498279738ccChris Craik important=False, improvement_direction=improvement_direction.UP) 363cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 364cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 365cef7893435aa41160dd1255c43cb8498279738ccChris Craik 366cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 367cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = histogram.HistogramValue( 368cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'a', 'units', 369cef7893435aa41160dd1255c43cb8498279738ccChris Craik raw_value_json='{"buckets": [{"low": 2, "high": 3, "count": 1}]}', 370cef7893435aa41160dd1255c43cb8498279738ccChris Craik important=False, improvement_direction=improvement_direction.UP) 371cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 372cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 373cef7893435aa41160dd1255c43cb8498279738ccChris Craik 374cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary(results.all_page_specific_values) 375cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 376cef7893435aa41160dd1255c43cb8498279738ccChris Craik 377cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(2, len(values)) 378cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v0, values) 379cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v1, values) 380cef7893435aa41160dd1255c43cb8498279738ccChris Craik 381cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testSummaryUsesKeyFunc(self): 382cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0 = self.pages[0] 383cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1 = self.pages[1] 384cef7893435aa41160dd1255c43cb8498279738ccChris Craik 385cef7893435aa41160dd1255c43cb8498279738ccChris Craik results = page_test_results.PageTestResults() 386cef7893435aa41160dd1255c43cb8498279738ccChris Craik 387cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page0) 388cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0 = scalar.ScalarValue(page0, 'a', 'seconds', 20, 389cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 390cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v0) 391cef7893435aa41160dd1255c43cb8498279738ccChris Craik 392cef7893435aa41160dd1255c43cb8498279738ccChris Craik v1 = scalar.ScalarValue(page0, 'b', 'seconds', 42, 393cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 394cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v1) 395cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page0) 396cef7893435aa41160dd1255c43cb8498279738ccChris Craik 397cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.WillRunPage(page1) 398cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2 = scalar.ScalarValue(page1, 'a', 'seconds', 20, 399cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 400cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v2) 401cef7893435aa41160dd1255c43cb8498279738ccChris Craik 402cef7893435aa41160dd1255c43cb8498279738ccChris Craik v3 = scalar.ScalarValue(page1, 'b', 'seconds', 42, 403cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 404cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.AddValue(v3) 405cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.DidRunPage(page1) 406cef7893435aa41160dd1255c43cb8498279738ccChris Craik 407cef7893435aa41160dd1255c43cb8498279738ccChris Craik summary = summary_module.Summary( 408cef7893435aa41160dd1255c43cb8498279738ccChris Craik results.all_page_specific_values, 409cef7893435aa41160dd1255c43cb8498279738ccChris Craik key_func=lambda v: True) 410cef7893435aa41160dd1255c43cb8498279738ccChris Craik values = summary.interleaved_computed_per_page_values_and_summaries 411cef7893435aa41160dd1255c43cb8498279738ccChris Craik 412cef7893435aa41160dd1255c43cb8498279738ccChris Craik v0_list = list_of_scalar_values.ListOfScalarValues( 413cef7893435aa41160dd1255c43cb8498279738ccChris Craik page0, 'a', 'seconds', [20, 42], 414cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 415cef7893435aa41160dd1255c43cb8498279738ccChris Craik v2_list = list_of_scalar_values.ListOfScalarValues( 416cef7893435aa41160dd1255c43cb8498279738ccChris Craik page1, 'a', 'seconds', [20, 42], 417cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 418cef7893435aa41160dd1255c43cb8498279738ccChris Craik merged_value = list_of_scalar_values.ListOfScalarValues( 419cef7893435aa41160dd1255c43cb8498279738ccChris Craik None, 'a', 'seconds', [20, 42, 20, 42], 420cef7893435aa41160dd1255c43cb8498279738ccChris Craik improvement_direction=improvement_direction.UP) 421cef7893435aa41160dd1255c43cb8498279738ccChris Craik 422cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertEquals(3, len(values)) 423cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v0_list, values) 424cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(v2_list, values) 425cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertIn(merged_value, values) 426