Commit 7464a454 authored by Cole Winstanley's avatar Cole Winstanley Committed by Commit Bot

[ChromeDriver] Reland with fix: add replay tests to run_all_tests.py

Bug: chromedriver:2553
Change-Id: I4c8d50c819f128ced652bc397bb294de3984ed2e
Reviewed-on: https://chromium-review.googlesource.com/1185783Reviewed-by: default avatarJohn Chen <johnchen@chromium.org>
Commit-Queue: Cole Winstanley <cwinstanley@google.com>
Cr-Commit-Position: refs/heads/master@{#585267}
parent 064c4f5a
...@@ -33,6 +33,15 @@ import webserver ...@@ -33,6 +33,15 @@ import webserver
sys.path.remove(_TEST_DIR) sys.path.remove(_TEST_DIR)
# pylint: enable=g-import-not-at-top, g-bad-import-order # pylint: enable=g-import-not-at-top, g-bad-import-order
_VERSION_SPECIFIC_NEGATIVE_FILTER = {}
_VERSION_SPECIFIC_NEGATIVE_FILTER["67"] = [
# The wording of an error changed between Chrome 67 and 68 that makes
# testCloseWindow fail because we compare the newer error in the log
# file to the old error given by Chrome 67 and find a difference.
"*testCloseWindow"
]
def SubstituteVariableEntries(s): def SubstituteVariableEntries(s):
"""Identifies and removes items that can legitimately vary between runs.""" """Identifies and removes items that can legitimately vary between runs."""
...@@ -197,6 +206,14 @@ class ChromeDriverClientReplayTest(unittest.TestCase): ...@@ -197,6 +206,14 @@ class ChromeDriverClientReplayTest(unittest.TestCase):
def testChromeBinary(self): def testChromeBinary(self):
self.runTest("test_data/testChromeBinary.log") self.runTest("test_data/testChromeBinary.log")
def GetNegativeFilter(chrome_version):
if chrome_version in _VERSION_SPECIFIC_NEGATIVE_FILTER:
negative_filter = _VERSION_SPECIFIC_NEGATIVE_FILTER[chrome_version]
return "*-" + ":__main__.".join([""] + negative_filter)
return "*"
def main(): def main():
usage = "usage: %prog <chromedriver binary> [options]" usage = "usage: %prog <chromedriver binary> [options]"
parser = optparse.OptionParser(usage=usage) parser = optparse.OptionParser(usage=usage)
...@@ -206,11 +223,17 @@ def main(): ...@@ -206,11 +223,17 @@ def main():
parser.add_option( parser.add_option(
"", "--chrome", help="Path to the desired Chrome binary.") "", "--chrome", help="Path to the desired Chrome binary.")
parser.add_option( parser.add_option(
"", "--filter", type="string", default="*", "", "--chrome-version", default="HEAD",
help="Filter for specifying what tests to run, \"*\" will run all. E.g., " help="Version of Chrome. Default is 'HEAD'.")
"*testRunMethod") parser.add_option(
"", "--filter", type="string", default="",
help="Filter for specifying what tests to run, \"*\" will run all,"
"including tests excluded by default. E.g., *testRunMethod")
# Need global to access these from the test runner.
# pylint: disable=global-variable-undefined
global _OPTIONS, _CHROMEDRIVER global _OPTIONS, _CHROMEDRIVER
# pylint: enable=global-variable-undefined
_OPTIONS, args = parser.parse_args() _OPTIONS, args = parser.parse_args()
_CHROMEDRIVER = util.GetAbsolutePathOfUserPath(args[0]) _CHROMEDRIVER = util.GetAbsolutePathOfUserPath(args[0])
if not os.path.exists(_CHROMEDRIVER): if not os.path.exists(_CHROMEDRIVER):
...@@ -222,9 +245,13 @@ def main(): ...@@ -222,9 +245,13 @@ def main():
all_tests_suite = unittest.defaultTestLoader.loadTestsFromModule( all_tests_suite = unittest.defaultTestLoader.loadTestsFromModule(
sys.modules[__name__]) sys.modules[__name__])
tests = unittest_util.FilterTestSuite(all_tests_suite, _OPTIONS.filter)
test_filter = (GetNegativeFilter(_OPTIONS.chrome_version)
if _OPTIONS.filter == "" else _OPTIONS.filter)
tests = unittest_util.FilterTestSuite(all_tests_suite, test_filter)
result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(tests) result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(tests)
sys.exit(len(result.failures) + len(result.errors)) sys.exit(len(result.failures) + len(result.errors))
if __name__ == "__main__": if __name__ == "__main__":
main() main()
\ No newline at end of file
...@@ -14,6 +14,7 @@ import tempfile ...@@ -14,6 +14,7 @@ import tempfile
import traceback import traceback
_THIS_DIR = os.path.abspath(os.path.dirname(__file__)) _THIS_DIR = os.path.abspath(os.path.dirname(__file__))
_PARENT_DIR = os.path.join(_THIS_DIR, os.pardir)
sys.path.insert(0, os.path.join(_THIS_DIR, os.pardir)) sys.path.insert(0, os.path.join(_THIS_DIR, os.pardir))
import archive import archive
...@@ -57,6 +58,32 @@ def _GenerateTestCommand(script, ...@@ -57,6 +58,32 @@ def _GenerateTestCommand(script,
return cmd return cmd
def RunReplayTests(chromedriver, chrome=None,
chrome_version=None, chrome_version_name=None):
version_info = ''
if chrome_version_name:
version_info = '(%s)' % chrome_version_name
util.MarkBuildStepStart('replay_tests%s' % version_info)
_, log_path = tempfile.mkstemp(prefix='chromedriver_log_')
print 'chromedriver server log: %s' % log_path
cmd = [
sys.executable,
os.path.join(_PARENT_DIR, 'log_replay', 'client_replay_test.py'),
chromedriver,
'--output-log-path=%s' % log_path
]
if chrome:
cmd.append('--chrome=%s' % chrome)
if chrome_version:
cmd.append('--chrome-version=%s' % chrome_version)
code = util.RunCommand(cmd)
if code:
util.MarkBuildStepError()
return code
def RunPythonTests(chromedriver, ref_chromedriver, def RunPythonTests(chromedriver, ref_chromedriver,
chrome=None, chrome_version=None, chrome=None, chrome_version=None,
chrome_version_name=None, android_package=None): chrome_version_name=None, android_package=None):
...@@ -231,7 +258,11 @@ def main(): ...@@ -231,7 +258,11 @@ def main():
chrome_version=version, chrome_version=version,
chrome_version_name='v%s' % version_name, chrome_version_name='v%s' % version_name,
verbose=True) verbose=True)
code = code or code1 or code2 code3 = RunReplayTests(chromedriver,
chrome=chrome_path,
chrome_version=version,
chrome_version_name='v%s' % version_name)
code = code or code1 or code2 or code3
_KillChromes() _KillChromes()
shutil.rmtree(temp_dir) shutil.rmtree(temp_dir)
cpp_tests = os.path.join(build_dir, cpp_tests_name) cpp_tests = os.path.join(build_dir, cpp_tests_name)
......
...@@ -101,11 +101,6 @@ _VERSION_SPECIFIC_FILTER['69'] = [ ...@@ -101,11 +101,6 @@ _VERSION_SPECIFIC_FILTER['69'] = [
'HeadlessInvalidCertificateTest.*', 'HeadlessInvalidCertificateTest.*',
] ]
_VERSION_SPECIFIC_FILTER['68'] = []
_VERSION_SPECIFIC_FILTER['67'] = []
_OS_SPECIFIC_FILTER = {} _OS_SPECIFIC_FILTER = {}
_OS_SPECIFIC_FILTER['win'] = [ _OS_SPECIFIC_FILTER['win'] = [
# https://bugs.chromium.org/p/chromedriver/issues/detail?id=299 # https://bugs.chromium.org/p/chromedriver/issues/detail?id=299
...@@ -2894,9 +2889,9 @@ if __name__ == '__main__': ...@@ -2894,9 +2889,9 @@ if __name__ == '__main__':
'', '--chrome-version', default='HEAD', '', '--chrome-version', default='HEAD',
help='Version of chrome. Default is \'HEAD\'.') help='Version of chrome. Default is \'HEAD\'.')
parser.add_option( parser.add_option(
'', '--filter', type='string', default='*', "", "--filter", type="string", default="",
help=('Filter for specifying what tests to run, "*" will run all. E.g., ' help="Filter for specifying what tests to run, \"*\" will run all,"
'*testStartStop')) "including tests excluded by default. E.g., *testRunMethod")
parser.add_option( parser.add_option(
'', '--android-package', '', '--android-package',
help=('Android package key. Possible values: ' + help=('Android package key. Possible values: ' +
...@@ -2954,7 +2949,7 @@ if __name__ == '__main__': ...@@ -2954,7 +2949,7 @@ if __name__ == '__main__':
if _ANDROID_PACKAGE_KEY: if _ANDROID_PACKAGE_KEY:
devil_chromium.Initialize() devil_chromium.Initialize()
if options.filter == '*': if options.filter == '':
if _ANDROID_PACKAGE_KEY: if _ANDROID_PACKAGE_KEY:
negative_filter = _ANDROID_NEGATIVE_FILTER[_ANDROID_PACKAGE_KEY] negative_filter = _ANDROID_NEGATIVE_FILTER[_ANDROID_PACKAGE_KEY]
else: else:
......
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