Commit 5378371d authored by chrishenry@google.com's avatar chrishenry@google.com

Add ValidateAndMeasurePage to PageTest; this is a replacement for both...

Add ValidateAndMeasurePage to PageTest; this is a replacement for both ValidatePage and MeasurePage.

Usage will be cleaned up in subsequent patch(es), along with
killing PageMeasurement.

BUG=383635

Review URL: https://codereview.chromium.org/452523002

Cr-Commit-Position: refs/heads/master@{#288291}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288291 0039d316-1c4b-4281-b951-d872f2087c98
parent 64f60703
......@@ -27,14 +27,11 @@ class MeasurementFailure(Failure):
class PageTest(command_line.Command):
"""A class styled on unittest.TestCase for creating page-specific tests.
This class also support running a measurement by default (but can be
overridden by overriding ValidatePage method).
To use this for measurement, subclass from the measurement and
override MeasurePage. For example:
Test should override ValidateAndMeasurePage to perform test
validation and page measurement as necessary.
class BodyChildElementMeasurement(PageTest):
def MeasurePage(self, page, tab, results):
def ValidateAndMeasurePage(self, page, tab, results):
body_child_count = tab.EvaluateJavaScript(
'document.body.children.length')
results.AddValue(scalar.ScalarValue(
......@@ -47,7 +44,7 @@ class PageTest(command_line.Command):
def AddCommandLineArgs(parser):
parser.add_option('--element', action='store', default='body')
def MeasurePage(self, page, tab, results):
def ValidateAndMeasurePage(self, page, tab, results):
body_child_count = tab.EvaluateJavaScript(
'document.querySelector('%s').children.length')
results.AddValue(scalar.ScalarValue(
......@@ -263,26 +260,19 @@ class PageTest(command_line.Command):
"""Override to examine the page set before the test run. Useful for
example to validate that the pageset can be used with the test."""
def ValidatePage(self, page, tab, results):
"""Override to check the actual test assertions.
This is where most your test logic should go. By default it runs
self.MeasurePage.
"""
self.MeasurePage(page, tab, results)
def MeasurePage(self, page, tab, results):
"""Override to actually measure the page's performance.
def ValidateAndMeasurePage(self, page, tab, results):
"""Override to check test assertions and perform measurement.
Should call results.AddValue(...) for each result. Can raise an
exception of add a failure.FailureValue on failure.
When adding measurement results, call results.AddValue(...) for
each result. Raise an exception or add a failure.FailureValue on
failure. page_test.py also provides several base exception classes
to use.
Prefer metric value names that are in accordance with python
variable style. e.g., metric_name. The name 'url' must not be used.
Put together:
def MeasurePage(self, page, tab, results):
def ValidateAndMeasurePage(self, page, tab, results):
res = tab.EvaluateJavaScript('2+2')
if res != 4:
raise Exception('Oh, wow.')
......@@ -294,6 +284,16 @@ class PageTest(command_line.Command):
tab: A telemetry.core.Tab instance.
results: A telemetry.results.PageTestResults instance.
"""
# TODO(chrishenry): Switch to raise NotImplementedError() when
# subclasses no longer override ValidatePage/MeasurePage.
self.ValidatePage(page, tab, results)
def ValidatePage(self, page, tab, results):
"""DEPRECATED: Use ValidateAndMeasurePage instead."""
self.MeasurePage(page, tab, results)
def MeasurePage(self, page, tab, results):
"""DEPRECATED: Use ValidateAndMeasurePage instead."""
def RunPage(self, page, tab, results):
# Run actions.
......@@ -306,8 +306,7 @@ class PageTest(command_line.Command):
self._RunMethod(page, self._action_name_to_run, action_runner)
self.DidRunActions(page, tab)
# Run validator.
self.ValidatePage(page, tab, results)
self.ValidateAndMeasurePage(page, tab, results)
def _RunMethod(self, page, method_name, action_runner):
if hasattr(page, method_name):
......
......@@ -10,7 +10,7 @@ from telemetry.page import page_test
class DoNothingPageTest(page_test.PageTest):
def ValidatePage(self, *_):
def ValidateAndMeasurePage(self, *_):
pass
......@@ -22,8 +22,8 @@ class TestPage(page_module.Page):
def RunActionToRun(self, _):
self.run_action_to_run_called = True
class PageTestUnitTest(unittest.TestCase):
class PageTestUnitTest(unittest.TestCase):
def testRunActions(self):
test = DoNothingPageTest('RunActionToRun')
page = TestPage('file://blank.html', None, util.GetUnittestDataDir())
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment