Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: tools/testing/run_selenium.py

Issue 9958051: Add support for Dromaeo tests in perf scripts. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/testing/perf_testing/run_perf_tests.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/run_selenium.py
diff --git a/tools/testing/run_selenium.py b/tools/testing/run_selenium.py
index 4acd8f79a8880c5dcf5e6055fb3688d7adc50cb7..dc05b104e04a37b877d31e71eb55dd9ceae46dc2 100755
--- a/tools/testing/run_selenium.py
+++ b/tools/testing/run_selenium.py
@@ -33,18 +33,18 @@ import platform
import selenium
from selenium.webdriver.support.ui import WebDriverWait
import shutil
+import signal
import socket
import sys
import time
-import signal
TIMEOUT_ERROR_MSG = 'FAIL (timeout)'
-def perf_test_done(driver):
- """Checks if the performance test has completed."""
- return perf_test_done_helper(driver.page_source)
+def correctness_test_done(source):
+ """Checks if test has completed."""
+ return ('PASS' in source) or ('FAIL' in source)
-def perf_test_done_helper(source):
+def perf_test_done(source):
"""Tests to see if our performance test is done by printing a score."""
#This code is written this way to work around a current instability in the
# python webdriver bindings if you call driver.get_element_by_id.
@@ -55,38 +55,47 @@ def perf_test_done_helper(source):
source = source[index + len(string):end_index]
return 'Score:' in source
-def run_test_in_browser(browser, html_out, timeout, is_perf):
+def dromaeo_test_done(source):
+ """Tests to see if our performance test is done by printing a score."""
+ #TODO(efortuna): Access these elements in a nicer way using DOM parser.
+ string = '<span class="left">'
+ index = source.find(string)
+ end_index = source.find('</span>', index+1)
+ source = source[index + len(string):end_index]
+ return '0:00' in source
+
+# TODO(vsm): Ideally, this wouldn't live in this file.
+CONFIGURATIONS = {
+ 'correctness': correctness_test_done,
+ 'perf': perf_test_done,
+ 'dromaeo': dromaeo_test_done
+}
+
+def run_test_in_browser(browser, html_out, timeout, config):
"""Run the desired test in the browser using Selenium 2.0 WebDriver syntax,
and wait for the test to complete. This is the newer syntax, that currently
supports Firefox, Chrome, IE, Opera (and some mobile browsers)."""
if isinstance(browser, selenium.selenium):
- return run_test_in_browser_selenium_rc(browser, html_out, timeout, is_perf)
+ return run_test_in_browser_selenium_rc(browser, html_out, timeout, config)
browser.get("file://" + html_out)
source = ''
try:
- if is_perf:
- # We're running a performance test.
- element = WebDriverWait(browser, float(timeout)).until(perf_test_done)
- else:
- element = WebDriverWait(browser, float(timeout)).until(
- lambda driver : ('PASS' in driver.page_source) or
- ('FAIL' in driver.page_source))
+ test_done = CONFIGURATIONS[config]
+ element = WebDriverWait(browser, float(timeout)).until(
+ lambda driver: test_done(driver.page_source))
source = browser.page_source
except selenium.common.exceptions.TimeoutException:
source = TIMEOUT_ERROR_MSG
return source
-def run_test_in_browser_selenium_rc(sel, html_out, timeout, is_perf):
+def run_test_in_browser_selenium_rc(sel, html_out, timeout, config):
""" Run the desired test in the browser using Selenium 1.0 syntax, and wait
for the test to complete. This is used for Safari, since it is not currently
supported on Selenium 2.0."""
sel.open('file://' + html_out)
source = sel.get_html_source()
- def end_condition(source):
- return 'PASS' in source or 'FAIL' in source
- if is_perf:
- end_condition = perf_test_done_helper
+ end_condition = CONFIGURATIONS[config]
elapsed = 0
while (not end_condition(source)) and elapsed <= timeout:
@@ -113,8 +122,18 @@ def parse_args(args=None):
parser.add_option('--perf', dest = 'is_perf',
help = 'Add this flag if we are running a browser performance test',
action = 'store_true', default=False)
+ # TODO(vsm): Abstract this out better.
+ parser.add_option('--dromaeo', dest = 'is_dromaeo',
+ help = 'Add this flag if we are running a browser performance test',
+ action = 'store_true', default=False)
args, ignored = parser.parse_args(args=args)
- return args.out, args.browser, args.timeout, args.is_perf
+ if args.is_perf:
+ config = 'perf'
+ elif args.is_dromaeo:
+ config = 'dromaeo'
+ else:
+ config = 'correctness'
+ return args.out, args.browser, args.timeout, config
def start_browser(browser, html_out):
if browser == 'chrome':
@@ -165,10 +184,12 @@ def close_browser(browser):
# TODO(efortuna): Figure out why this crashes.... and avoid?
pass
-def report_results(is_perf, source):
- if is_perf:
+def report_results(config, source):
+ # TODO(vsm): Add a failure check for Dromaeo.
+ if config != 'correctness':
# We're running a performance test.
- print source
+ print source.encode('utf8')
+ sys.stdout.flush()
if 'NaN' in source:
return 1
else:
@@ -224,10 +245,10 @@ def run_batch_tests():
if line == '--terminate\n':
break
- html_out, browser_name, timeout, is_perf = parse_args(line.split())
+ html_out, browser_name, timeout, config = parse_args(line.split())
# Sanity checks that test.dart is passing flags we can handle.
- if is_perf:
+ if config != 'correctness':
print 'Batch test runner not compatible with perf testing'
return 1
if browser and current_browser_name != browser_name:
@@ -240,7 +261,7 @@ def run_batch_tests():
current_browser_name = browser_name
browser = start_browser(browser_name, html_out)
- source = run_test_in_browser(browser, html_out, timeout, is_perf)
+ source = run_test_in_browser(browser, html_out, timeout, config)
# Test is done. Write end token to stderr and flush.
sys.stderr.write('>>> EOF STDERR\n')
@@ -248,7 +269,7 @@ def run_batch_tests():
# print one of:
# >>> TEST {PASS, FAIL, OK, CRASH, FAIL, TIMEOUT}
- status = report_results(is_perf, source)
+ status = report_results(config, source)
if status == 0:
print '>>> TEST PASS'
elif source == TIMEOUT_ERROR_MSG:
@@ -267,12 +288,12 @@ def main(args):
return run_batch_tests()
# Run a single test
- html_out, browser_name, timeout, is_perf = parse_args()
+ html_out, browser_name, timeout, config = parse_args()
browser = start_browser(browser_name, html_out)
try:
- output = run_test_in_browser(browser, html_out, timeout, is_perf)
- return report_results(is_perf, output)
+ output = run_test_in_browser(browser, html_out, timeout, config)
+ return report_results(config, output)
finally:
close_browser(browser)
« no previous file with comments | « tools/testing/perf_testing/run_perf_tests.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698