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

Unified Diff: components/test/data/password_manager/run_tests.py

Issue 403323002: Automatic password manager tests now rely on being killed by the bot on timeout (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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 | « no previous file | components/test/data/password_manager/tests.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/test/data/password_manager/run_tests.py
diff --git a/components/test/data/password_manager/run_tests.py b/components/test/data/password_manager/run_tests.py
index a1308212238fbb7e7dec54e0855c9c21dee08f63..4bc8969b54e7a1703365a6e5241d56ea02fa255b 100644
--- a/components/test/data/password_manager/run_tests.py
+++ b/components/test/data/password_manager/run_tests.py
@@ -6,12 +6,28 @@
"""This file allows the bots to be easily configure and run the tests."""
import argparse
-import os
-import tempfile
+import urllib2
+import urllib
from environment import Environment
import tests
+def printResults(results):
+ """Print the test results.
+
+ Args:
+ results: A list of the TestResults that are going to be printed.
+ """
+ for result in results:
+ if result.successful:
+ print (
+ "The %s test for %s was successful."
+ % (result.test_type, result.name))
+ else:
+ print (
+ "The %s test for %s has failed:\n%s"
+ % (result.test_type, result.name, result.message))
+
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Password Manager automated tests runner help.")
@@ -38,63 +54,87 @@ if __name__ == "__main__":
environment = Environment('', '', '', None, False)
tests.Tests(environment)
- xml = open(args.save_path[0],"w")
- xml.write("<xml>")
- try:
- results = tempfile.NamedTemporaryFile(
- dir=os.path.join(tempfile.gettempdir()), delete=False)
- results_path = results.name
- results.close()
-
- full_path = os.path.realpath(__file__)
- tests_dir = os.path.dirname(full_path)
- tests_path = os.path.join(tests_dir, "tests.py")
-
- for websitetest in environment.websitetests:
- # The tests can be flaky. This is why we try to rerun up to 3 times.
- for x in range(0, 3):
- # TODO(rchtara): Using "pkill" is just temporary until a better,
- # platform-independent solution is found.
- os.system("pkill chrome")
- try:
- os.remove(results_path)
- except Exception:
- pass
- # TODO(rchtara): Using "timeout is just temporary until a better,
- # platform-independent solution is found.
-
- # The website test runs in two passes, each pass has an internal
- # timeout of 200s for waiting (see |remaining_time_to_wait| and
- # Wait() in websitetest.py). Accounting for some more time spent on
- # the non-waiting execution, 300 seconds should be the upper bound on
- # the runtime of one pass, thus 600 seconds for the whole test.
- os.system("timeout 600 python %s %s --chrome-path %s "
- "--chromedriver-path %s --passwords-path %s --profile-path %s "
- "--save-path %s" %
- (tests_path, websitetest.name, args.chrome_path[0],
- args.chromedriver_path[0], args.passwords_path[0],
- args.profile_path[0], results_path))
- if os.path.isfile(results_path):
- results = open(results_path, "r")
- count = 0 # Count the number of successful tests.
- for line in results:
- xml.write(line)
- count += line.count("successful='True'")
- results.close()
- # There is only two tests running for every website: the prompt and
- # the normal test. If both of the tests were successful, the tests
- # would be stopped for the current website.
- if count == 2:
- break
- else:
- xml.write("<result><test name='%s' type='prompt' successful='false'>"
- "</test><test name='%s' type='normal' successful='false'></test>"
- "</result>" % (websitetest.name, websitetest.name))
- finally:
- try:
- os.remove(results_path)
- except Exception:
- pass
-
- xml.write("</xml>")
- xml.close()
+ xml = "<xml>"
+
+ all_successful = True
+ for websitetest in environment.websitetests:
+ successful = False
+ # The tests can be flaky. This is why we try to rerun up to 3 times.
+ for x in range(0, 3):
+ # This message needs to be printed out to let the trybot know that the
+ # tests are still working, so they should not be killed.
+ print "Running tests for %s " % websitetest.name
+ tests_results = []
+ # Exceptions thrown by this test need to be ignored so that the other
+ # tests can run without any problem.
+ try:
+ # Run the test without enable-automatic-password-saving to check whether
+ # or not the prompt is shown in the way we expected.
+ tests_results += tests.RunTests(
+ args.chrome_path[0],
+ args.chromedriver_path[0],
+ args.profile_path[0],
+ args.passwords_path[0],
+ False,
+ 10, # Debug log level.
+ True,
+ None,
+ tests.TypeOfTestedWebsites.LIST_OF_TESTS,
+ [websitetest.name])
+ except Exception as e:
+ print str(e)
+
+ # Exceptions thrown by this test need to be ignored so that the other
+ # tests can run without any problem.
+ try:
+ # Run the test with enable-automatic-password-saving to check whether
+ # or not the password is stored in the the way we expected.
+ tests_results += tests.RunTests(
+ args.chrome_path[0],
+ args.chromedriver_path[0],
+ args.profile_path[0],
+ args.passwords_path[0],
+ True,
+ 10, # Debug log level.
+ True,
+ None,
+ tests.TypeOfTestedWebsites.LIST_OF_TESTS,
+ [websitetest.name])
+ except Exception as e:
+ print str(e)
+
+ if (len(tests_results) > 1 and tests_results[0].successful and
+ tests_results[1].successful):
+ successful = True
+
+ elif len(tests_results) == 1:
+ failed_test = "prompt"
+ if tests_results[0].type == "prompt":
+ failed_test = "normal"
+ tests_results.append(
+ environment.TestResult(websitetest.name, failed_test, False,
+ "An unexpected error has occurred."))
+
+ elif len(tests_results) == 0:
+ tests_results.append(
+ environment.TestResult(websitetest.name, "prompt", False,
+ "An unexpected error has occurred."))
+ tests_results.append(
+ environment.TestResult(websitetest.name, "normal", False,
+ "An unexpected error has occurred."))
+
+ xml += tests.resultsToXml(tests_results)
+ printResults(tests_results)
+ if successful:
+ break
+
+ all_successful = all_successful and successful
+
+ xml += "</xml>"
+
+ text = urllib.quote(xml.encode('utf-8'))
+ urllib2.urlopen("http://savvy-hull-649.appspot.com/?" + text).read()
vabr (Chromium) 2014/07/22 16:32:04 Are you throwing out the response? If it can give
+
+ json = open(args.save_path[0], "w")
+ json.write("{'successful': '%s'}" % all_successful)
+ json.close()
« no previous file with comments | « no previous file | components/test/data/password_manager/tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698