75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
# Copyright (c) 2013 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 optparse
|
|
import os
|
|
|
|
from telemetry.core import repeat_options
|
|
from telemetry.core import util
|
|
from telemetry.page import page_runner
|
|
from telemetry.page import page_set
|
|
from telemetry.page import page_test
|
|
from telemetry.page import test_expectations
|
|
|
|
|
|
class Test(object):
|
|
"""Base class for a Telemetry test or benchmark.
|
|
|
|
A test packages a PageTest/PageMeasurement and a PageSet together.
|
|
"""
|
|
options = {}
|
|
enabled = True
|
|
|
|
def Run(self, options):
|
|
"""Run this test with the given options."""
|
|
assert hasattr(self, 'test'), 'This test has no "test" attribute.'
|
|
assert issubclass(self.test, page_test.PageTest), (
|
|
'"%s" is not a PageTest.' % self.test.__name__)
|
|
|
|
for key, value in self.options.iteritems():
|
|
setattr(options, key, value)
|
|
|
|
options.repeat_options = self._CreateRepeatOptions(options)
|
|
|
|
test = self.test()
|
|
ps = self.CreatePageSet(options)
|
|
expectations = self.CreateExpectations(ps)
|
|
|
|
# Ensure the test's default options are set if needed.
|
|
parser = optparse.OptionParser()
|
|
test.AddCommandLineOptions(parser)
|
|
options.MergeDefaultValues(parser.get_default_values())
|
|
|
|
results = page_runner.Run(test, ps, expectations, options)
|
|
results.PrintSummary()
|
|
return len(results.failures) + len(results.errors)
|
|
|
|
def _CreateRepeatOptions(self, options):
|
|
return repeat_options.RepeatOptions(
|
|
getattr(options, 'page_repeat_secs', None),
|
|
getattr(options, 'pageset_repeat_secs', None),
|
|
getattr(options, 'page_repeat_iters', 1),
|
|
getattr(options, 'pageset_repeat_iters', 1),
|
|
)
|
|
|
|
def CreatePageSet(self, options): # pylint: disable=W0613
|
|
"""Get the page set this test will run on.
|
|
|
|
By default, it will create a page set from the file at this test's
|
|
page_set attribute. Override to generate a custom page set.
|
|
"""
|
|
assert hasattr(self, 'page_set'), 'This test has no "page_set" attribute.'
|
|
return page_set.PageSet.FromFile(
|
|
os.path.join(util.GetBaseDir(), self.page_set))
|
|
|
|
def CreateExpectations(self, ps): # pylint: disable=W0613
|
|
"""Get the expectations this test will run with.
|
|
|
|
By default, it will create an empty expectations set. Override to generate
|
|
custom expectations.
|
|
"""
|
|
if hasattr(self, 'expectations'):
|
|
return self.expectations
|
|
else:
|
|
return test_expectations.TestExpectations()
|