blob: 12662a7a6492bf309863e11eb61cec4ecc64e99c [file] [log] [blame]
# Copyright 2014 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 unittest
from telemetry import perf_tests_helper
from telemetry.page import page_set
from telemetry.results import page_measurement_results
from telemetry.value import histogram
from telemetry.value import scalar
def _MakePageSet():
ps = page_set.PageSet(file_path=os.path.dirname(__file__))
ps.AddPageWithDefaultRunNavigate("http://www.bar.com/")
ps.AddPageWithDefaultRunNavigate("http://www.baz.com/")
ps.AddPageWithDefaultRunNavigate("http://www.foo.com/")
return ps
class NonPrintingPageMeasurementResults(
page_measurement_results.PageMeasurementResults):
def __init__(self):
super(NonPrintingPageMeasurementResults, self).__init__()
def _PrintPerfResult(self, *args):
pass
class SummarySavingPageMeasurementResults(
page_measurement_results.PageMeasurementResults):
def __init__(self):
super(SummarySavingPageMeasurementResults, self).__init__()
self.results = []
def _PrintPerfResult(self, *args):
res = perf_tests_helper.PrintPerfResult(*args, print_to_stdout=False)
self.results.append(res)
class PageMeasurementResultsTest(unittest.TestCase):
def setUp(self):
self._page_set = _MakePageSet()
@property
def pages(self):
return self._page_set.pages
def test_basic(self):
results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'seconds', 3))
results.DidMeasurePage()
results.WillMeasurePage(self.pages[1])
results.AddValue(scalar.ScalarValue(self.pages[1], 'a', 'seconds', 3))
results.DidMeasurePage()
results.PrintSummary()
values = results.FindPageSpecificValuesForPage(self.pages[0], 'a')
self.assertEquals(1, len(values))
v = values[0]
self.assertEquals(v.name, 'a')
self.assertEquals(v.page, self.pages[0])
values = results.FindAllPageSpecificValuesNamed('a')
assert len(values) == 2
def test_url_is_invalid_value(self):
results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
self.assertRaises(
AssertionError,
lambda: results.AddValue(scalar.ScalarValue(
self.pages[0], 'url', 'string', 'foo')))
def test_add_summary_value_with_page_specified(self):
results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
self.assertRaises(
AssertionError,
lambda: results.AddSummaryValue(scalar.ScalarValue(self.pages[0],
'a', 'units', 3)))
def test_unit_change(self):
results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'seconds', 3))
results.DidMeasurePage()
results.WillMeasurePage(self.pages[1])
self.assertRaises(
AssertionError,
lambda: results.AddValue(scalar.ScalarValue(
self.pages[1], 'a', 'foobgrobbers', 3)))
def test_type_change(self):
results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'seconds', 3))
results.DidMeasurePage()
results.WillMeasurePage(self.pages[1])
self.assertRaises(
AssertionError,
lambda: results.AddValue(histogram.HistogramValue(
self.pages[1], 'a', 'seconds',
raw_value_json='{"buckets": [{"low": 1, "high": 2, "count": 1}]}')))
def test_basic_summary_all_pages_fail(self):
"""If all pages fail, no summary is printed."""
results = SummarySavingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'seconds', 3))
results.DidMeasurePage()
results.AddFailureMessage(self.pages[0], 'message')
results.WillMeasurePage(self.pages[1])
results.AddValue(scalar.ScalarValue(self.pages[1], 'a', 'seconds', 7))
results.DidMeasurePage()
results.AddFailureMessage(self.pages[1], 'message')
results.PrintSummary()
self.assertEquals(results.results, [])
def test_get_successful_page_values_merged_no_failures(self):
results = SummarySavingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'seconds', 3))
self.assertEquals(1, len(results.page_specific_values_for_current_page))
results.DidMeasurePage()
self.assertRaises(
AssertionError,
lambda: results.page_specific_values_for_current_page)
def test_get_all_values_for_successful_pages(self):
results = SummarySavingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'seconds', 3))
results.DidMeasurePage()
results.WillMeasurePage(self.pages[1])
results.AddValue(scalar.ScalarValue(self.pages[1], 'a', 'seconds', 3))
results.DidMeasurePage()
results.WillMeasurePage(self.pages[2])
results.AddValue(scalar.ScalarValue(self.pages[2], 'a', 'seconds', 3))
results.DidMeasurePage()
values = results.all_page_specific_values
self.assertEquals(3, len(values))
self.assertEquals([self.pages[0], self.pages[1], self.pages[2]],
[v.page for v in values])
def test_get_all_values_for_successful_pages_one_page_fails(self):
results = SummarySavingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'seconds', 3))
results.DidMeasurePage()
results.WillMeasurePage(self.pages[1])
results.AddFailureMessage(self.pages[1], "Failure")
results.DidMeasurePage()
results.WillMeasurePage(self.pages[2])
results.AddValue(scalar.ScalarValue(self.pages[2], 'a', 'seconds', 3))
results.DidMeasurePage()
values = results.all_page_specific_values
self.assertEquals(2, len(values))
self.assertEquals([self.pages[0], self.pages[2]],
[v.page for v in values])