blob: cd3541f20c17a239e6dd652ccf4b4cf814ed20e8 [file] [log] [blame]
# Copyright (c) 2012 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
import re
import sys
from autotest_lib.client.bin import utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import chrome_test, cros_ui, ownership
class desktopui_PyAutoEnduranceTests(chrome_test.ChromeTestBase):
"""Wrapper for running Chrome's PyAuto-based endurance tests."""
_DEFAULT_TEST_LENGTH_SEC = 60 * 60 * 2 # Tests run for 2 hours.
_DEFAULT_PERF_STATS_INTERVAL = 60 * 3 # Measure perf stats every 3 minutes.
version = 1
def initialize(self):
chrome_test.ChromeTestBase.initialize(self)
self.setup_for_pyauto()
def parse_args(self, args):
"""Parses input arguments to this autotest."""
parser = optparse.OptionParser()
parser.add_option('--length', dest='test_length', type='int',
default=self._DEFAULT_TEST_LENGTH_SEC,
help='Number of seconds to run the endurance test. '
'Defaults to %default seconds.')
parser.add_option('--interval', dest='perf_stats_interval', type='int',
default=self._DEFAULT_PERF_STATS_INTERVAL,
help='Number of seconds to wait in-between each perf '
'stats measurement. Defaults to %default '
'seconds.')
# Preprocess the args to remove quotes before/after each one if they
# exist. This is necessary because arguments passed via
# run_remote_tests.sh may be individually quoted, and those quotes must
# be stripped before they are parsed.
return parser.parse_args(map(lambda arg: arg.strip('\'\"'), args))
def run_once(self, test_name, args=[]):
"""Runs the PyAuto endurance tests."""
if isinstance(args, str):
args = args.split()
options, _ = self.parse_args(args)
# Enable Chrome testing interface and login to a default account.
deps_dir = os.path.join(self.autodir, 'deps')
pyautolib_dir = os.path.join(self.cr_source_dir,
'chrome', 'test', 'pyautolib')
login_cmd = cros_ui.xcommand_as(
'python %s chromeos_utils.ChromeosUtils.LoginToDefaultAccount '
'-v --no-http-server' %
os.path.join(pyautolib_dir, 'chromeos', 'chromeos_utils.py'))
utils.system(login_cmd)
# Run the PyAuto endurance tests.
print 'About to run the pyauto endurance tests.'
print 'Note: you will see two timestamps for each logging message.'
print ' The outer timestamp occurs when the autotest dumps the '
print ' pyauto output, which only occurs after all tests are '
print ' complete. The inner timestamp is the time at which the '
print ' message was logged by pyauto while the test was actually '
print ' running.'
functional_cmd = cros_ui.xcommand_as(
'%s/chrome_test/test_src/chrome/test/functional/'
'pyauto_functional.py %s' % (deps_dir, test_name))
os.putenv('TEST_LENGTH', str(options.test_length))
os.putenv('PERF_STATS_INTERVAL', str(options.perf_stats_interval))
cmd_result = utils.run(functional_cmd, ignore_status=True,
stdout_tee=sys.stdout, stderr_tee=sys.stdout)
if cmd_result.exit_status != 0:
raise error.TestFail(
'Pyauto returned error code %d. This is likely because at '
'least one pyauto test failed. Refer to the full autotest '
'output in desktopui_PyAutoPerfTests.DEBUG for details.'
% cmd_result.exit_status)
def cleanup(self):
ownership.clear_ownership()
chrome_test.ChromeTestBase.cleanup(self)