OLD | NEW |
---|---|
(Empty) | |
1 # -*- coding: utf-8 -*- | |
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 | |
4 # found in the LICENSE file. | |
5 | |
6 """This file allows the bots to be easily configure and run the tests.""" | |
7 | |
8 import argparse | |
9 import os | |
10 import tempfile | |
11 | |
12 from environment import Environment | |
13 import tests | |
14 | |
15 if __name__ == "__main__": | |
16 parser = argparse.ArgumentParser( | |
17 description="Password Manager automated tests runner help.") | |
18 parser.add_argument( | |
19 "--chrome-path", action="store", dest="chrome_path", | |
20 help="Set the chrome path (required).", nargs=1, required=True) | |
21 parser.add_argument( | |
22 "--chromedriver-path", action="store", dest="chromedriver_path", | |
23 help="Set the chromedriver path (required).", nargs=1, required=True) | |
24 parser.add_argument( | |
25 "--profile-path", action="store", dest="profile_path", | |
26 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 " | |
28 "is going to be removed.", | |
29 nargs=1, required=True) | |
30 parser.add_argument( | |
31 "--passwords-path", action="store", dest="passwords_path", | |
32 help="Set the usernames/passwords path (required).", nargs=1, | |
33 required=True) | |
34 parser.add_argument("--save-path", action="store", nargs=1, dest="save_path", | |
35 help="Write the results in a file.", required=True) | |
36 args = parser.parse_args() | |
37 | |
38 environment = Environment('', '', '', None, False) | |
39 tests.Tests(environment) | |
40 | |
41 xml = open(args.save_path[0],"w") | |
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 | |
49 full_path = os.path.realpath(__file__) | |
50 tests_dir = os.path.dirname(full_path) | |
51 tests_path = os.path.join(tests_dir, "tests.py") | |
52 | |
53 for websitetest in environment.websitetests: | |
54 # The tests are not robust and could some time fail for reasons that are | |
55 # not related to the password manager (e.g., unexpected chrome crash). | |
vabr (Chromium)
2014/07/17 09:15:44
I still oppose to mentioning "unexpected chrome cr
rchtara
2014/07/17 14:05:17
Done.
| |
56 # This is why we need to run them many times to reduce the effect of such | |
57 # problems. | |
58 for x in range(0, 3): | |
59 os.system("pkill -f chrome") | |
60 try: | |
61 os.remove(results_path) | |
62 except OSError: | |
63 pass | |
64 # Two tests are going to be run here: the normal test and the prompt | |
65 # test. Each of these tests have a |remaining_time_to_wait| timeout | |
vabr (Chromium)
2014/07/17 09:15:44
nit: I'd suggest a slight rephrasing to indicate t
rchtara
2014/07/17 14:05:18
Done.
| |
66 # limit set in websitetest.py to 200 seconds that does not include | |
67 # everything, only time spent in Wait() calls. So we need 300 seconds | |
68 # for every test and 600 seconds for both of the tests. | |
69 os.system("timeout 600 python %s %s --chrome-path %s " | |
vabr (Chromium)
2014/07/17 09:15:44
Please add a "TODO(rchtara): " comment explaining
rchtara
2014/07/17 14:05:17
Done.
| |
70 "--chromedriver-path %s --passwords-path %s --profile-path %s " | |
71 "--save-path %s" % | |
72 (tests_path, websitetest.name, args.chrome_path[0], | |
73 args.chromedriver_path[0], args.passwords_path[0], | |
74 args.profile_path[0], results_path)) | |
75 if os.path.isfile(results_path): | |
76 results = open(results_path, "r") | |
77 count = 0 # Count the number of successful tests. | |
78 for line in results: | |
79 xml.write(line) | |
80 count += line.count("successful='True'") | |
81 results.close() | |
82 # There is only two tests running for every website: the prompt and | |
83 # the normal test. If both of the tests were successful, the tests | |
84 # would be stopped for the current website. | |
85 if count == 2: | |
86 break | |
87 else: | |
88 xml.write("<result><test name='%s' type='prompt' successful='false'>" | |
89 "</test><test name='%s' type='normal' successful='false'></test>" | |
90 "</result>" % (websitetest.name, websitetest.name)) | |
91 finally: | |
92 try: | |
93 os.remove(results_path) | |
94 except Exception: | |
95 pass | |
96 | |
97 xml.write("</xml>") | |
98 xml.close() | |
OLD | NEW |