blob: 3b5bcf39a7510ec356bf41e1108b93a9f8ed1a34 [file] [log] [blame]
# 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()