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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « no previous file | components/test/data/password_manager/tests.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """This file allows the bots to be easily configure and run the tests.""" 6 """This file allows the bots to be easily configure and run the tests."""
7 7
8 import argparse 8 import argparse
9 import os 9 import urllib2
10 import tempfile 10 import urllib
11 11
12 from environment import Environment 12 from environment import Environment
13 import tests 13 import tests
14 14
15 def printResults(results):
16 """Print the test results.
17
18 Args:
19 results: A list of the TestResults that are going to be printed.
20 """
21 for result in results:
22 if result.successful:
23 print (
24 "The %s test for %s was successful."
25 % (result.test_type, result.name))
26 else:
27 print (
28 "The %s test for %s has failed:\n%s"
29 % (result.test_type, result.name, result.message))
30
15 if __name__ == "__main__": 31 if __name__ == "__main__":
16 parser = argparse.ArgumentParser( 32 parser = argparse.ArgumentParser(
17 description="Password Manager automated tests runner help.") 33 description="Password Manager automated tests runner help.")
18 parser.add_argument( 34 parser.add_argument(
19 "--chrome-path", action="store", dest="chrome_path", 35 "--chrome-path", action="store", dest="chrome_path",
20 help="Set the chrome path (required).", nargs=1, required=True) 36 help="Set the chrome path (required).", nargs=1, required=True)
21 parser.add_argument( 37 parser.add_argument(
22 "--chromedriver-path", action="store", dest="chromedriver_path", 38 "--chromedriver-path", action="store", dest="chromedriver_path",
23 help="Set the chromedriver path (required).", nargs=1, required=True) 39 help="Set the chromedriver path (required).", nargs=1, required=True)
24 parser.add_argument( 40 parser.add_argument(
25 "--profile-path", action="store", dest="profile_path", 41 "--profile-path", action="store", dest="profile_path",
26 help="Set the profile path (required). You just need to choose a " 42 help="Set the profile path (required). You just need to choose a "
27 "temporary empty folder. If the folder is not empty all its content " 43 "temporary empty folder. If the folder is not empty all its content "
28 "is going to be removed.", 44 "is going to be removed.",
29 nargs=1, required=True) 45 nargs=1, required=True)
30 parser.add_argument( 46 parser.add_argument(
31 "--passwords-path", action="store", dest="passwords_path", 47 "--passwords-path", action="store", dest="passwords_path",
32 help="Set the usernames/passwords path (required).", nargs=1, 48 help="Set the usernames/passwords path (required).", nargs=1,
33 required=True) 49 required=True)
34 parser.add_argument("--save-path", action="store", nargs=1, dest="save_path", 50 parser.add_argument("--save-path", action="store", nargs=1, dest="save_path",
35 help="Write the results in a file.", required=True) 51 help="Write the results in a file.", required=True)
36 args = parser.parse_args() 52 args = parser.parse_args()
37 53
38 environment = Environment('', '', '', None, False) 54 environment = Environment('', '', '', None, False)
39 tests.Tests(environment) 55 tests.Tests(environment)
40 56
41 xml = open(args.save_path[0],"w") 57 xml = "<xml>"
42 xml.write("<xml>")
43 try:
44 results = tempfile.NamedTemporaryFile(
45 dir=os.path.join(tempfile.gettempdir()), delete=False)
46 results_path = results.name
47 results.close()
48 58
49 full_path = os.path.realpath(__file__) 59 all_successful = True
50 tests_dir = os.path.dirname(full_path) 60 for websitetest in environment.websitetests:
51 tests_path = os.path.join(tests_dir, "tests.py") 61 successful = False
62 # The tests can be flaky. This is why we try to rerun up to 3 times.
63 for x in range(0, 3):
64 # This message needs to be printed out to let the trybot know that the
65 # tests are still working, so they should not be killed.
66 print "Running tests for %s " % websitetest.name
67 tests_results = []
68 # Exceptions thrown by this test need to be ignored so that the other
69 # tests can run without any problem.
70 try:
71 # Run the test without enable-automatic-password-saving to check whether
72 # or not the prompt is shown in the way we expected.
73 tests_results += tests.RunTests(
74 args.chrome_path[0],
75 args.chromedriver_path[0],
76 args.profile_path[0],
77 args.passwords_path[0],
78 False,
79 10, # Debug log level.
80 True,
81 None,
82 tests.TypeOfTestedWebsites.LIST_OF_TESTS,
83 [websitetest.name])
84 except Exception as e:
85 print str(e)
52 86
53 for websitetest in environment.websitetests: 87 # Exceptions thrown by this test need to be ignored so that the other
54 # The tests can be flaky. This is why we try to rerun up to 3 times. 88 # tests can run without any problem.
55 for x in range(0, 3): 89 try:
56 # TODO(rchtara): Using "pkill" is just temporary until a better, 90 # Run the test with enable-automatic-password-saving to check whether
57 # platform-independent solution is found. 91 # or not the password is stored in the the way we expected.
58 os.system("pkill chrome") 92 tests_results += tests.RunTests(
59 try: 93 args.chrome_path[0],
60 os.remove(results_path) 94 args.chromedriver_path[0],
61 except Exception: 95 args.profile_path[0],
62 pass 96 args.passwords_path[0],
63 # TODO(rchtara): Using "timeout is just temporary until a better, 97 True,
64 # platform-independent solution is found. 98 10, # Debug log level.
99 True,
100 None,
101 tests.TypeOfTestedWebsites.LIST_OF_TESTS,
102 [websitetest.name])
103 except Exception as e:
104 print str(e)
65 105
66 # The website test runs in two passes, each pass has an internal 106 if (len(tests_results) > 1 and tests_results[0].successful and
67 # timeout of 200s for waiting (see |remaining_time_to_wait| and 107 tests_results[1].successful):
68 # Wait() in websitetest.py). Accounting for some more time spent on 108 successful = True
69 # the non-waiting execution, 300 seconds should be the upper bound on
70 # the runtime of one pass, thus 600 seconds for the whole test.
71 os.system("timeout 600 python %s %s --chrome-path %s "
72 "--chromedriver-path %s --passwords-path %s --profile-path %s "
73 "--save-path %s" %
74 (tests_path, websitetest.name, args.chrome_path[0],
75 args.chromedriver_path[0], args.passwords_path[0],
76 args.profile_path[0], results_path))
77 if os.path.isfile(results_path):
78 results = open(results_path, "r")
79 count = 0 # Count the number of successful tests.
80 for line in results:
81 xml.write(line)
82 count += line.count("successful='True'")
83 results.close()
84 # There is only two tests running for every website: the prompt and
85 # the normal test. If both of the tests were successful, the tests
86 # would be stopped for the current website.
87 if count == 2:
88 break
89 else:
90 xml.write("<result><test name='%s' type='prompt' successful='false'>"
91 "</test><test name='%s' type='normal' successful='false'></test>"
92 "</result>" % (websitetest.name, websitetest.name))
93 finally:
94 try:
95 os.remove(results_path)
96 except Exception:
97 pass
98 109
99 xml.write("</xml>") 110 elif len(tests_results) == 1:
100 xml.close() 111 failed_test = "prompt"
112 if tests_results[0].type == "prompt":
113 failed_test = "normal"
114 tests_results.append(
115 environment.TestResult(websitetest.name, failed_test, False,
116 "An unexpected error has occurred."))
117
118 elif len(tests_results) == 0:
119 tests_results.append(
120 environment.TestResult(websitetest.name, "prompt", False,
121 "An unexpected error has occurred."))
122 tests_results.append(
123 environment.TestResult(websitetest.name, "normal", False,
124 "An unexpected error has occurred."))
125
126 xml += tests.resultsToXml(tests_results)
127 printResults(tests_results)
128 if successful:
129 break
130
131 all_successful = all_successful and successful
132
133 xml += "</xml>"
134
135 text = urllib.quote(xml.encode('utf-8'))
136 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
137
138 json = open(args.save_path[0], "w")
139 json.write("{'successful': '%s'}" % all_successful)
140 json.close()
OLDNEW
« 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