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

Side by Side Diff: tools/purge_flakies.py

Issue 7688004: Added tools for finding and purging flaky tests (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 9 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « tools/find_flakies.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2
3
M-A Ruel 2011/08/19 15:07:01 Just add the copyright header there
clee 2011/08/19 16:53:57 Done.
4 """Usage: python %prog testname [infile] [num_tests]
5 """
6
7
8 import os
9 import re
10 import subprocess
11 import sys
12 import time
13
14
15 def main():
16 test = sys.argv[1]
17 path = "/usr/local/google/home/charleslee/chromium/src/out/Debug/" + test
18 test_name_regex = r"(?P<testname>(\w+/)?\w+\.\w+(/\d+)?)"
19 test_start = re.compile("\[\s+RUN\s+\] " + test_name_regex)
20 test_list = []
21 if len(sys.argv) > 2:
22 infile = sys.argv[2]
23 data_list = open(infile, "r")
24 for line in data_list:
25 test_list.append(line.rstrip())
26 data_list.close()
27 else:
28 proc = subprocess.Popen([path], stdout=subprocess.PIPE)
29 while True:
30 line = proc.stdout.readline()
31 if not line:
32 if proc.poll() is not None:
33 break
34 continue
35 sys.stdout.write(line)
36 results = test_start.search(line)
37 if results:
38 test_list.append(results.group("testname"))
39 failures = []
40 index = 0
41 total = len(test_list)
42 print total
43 if len(sys.argv) > 3:
44 num_tests = int(sys.argv[3])
45 test_list = test_list[:num_tests]
46 for test_name in test_list:
47 num_fails = 0
48 num_terminated = 0
49 procs = []
50 args = [path, "--gtest_filter=" + test_name, "--gtest_repeat=10"]
51 while len(procs) < 18:
52 procs.append(subprocess.Popen(args))
53 seconds = 0
54 while procs:
55 for proc in procs:
56 if proc.poll() is not None:
57 if proc.returncode != 0:
58 ++num_fails
59 procs.remove(proc)
60 if seconds > 1000:
61 num_fails += len(procs)
62 num_terminated = len(procs)
63 while procs:
64 procs.pop().terminate()
65 time.sleep(1)
66 seconds += 1
67 if num_fails:
68 line = "%s: %i" % (test_name, num_fails)
69 if num_terminated:
70 line += ", %i terminated" % num_terminated
71 failures.append(line)
72 print "%s (%i / %i): %i" % (test_name, index, total, num_fails)
73 index += 1
74 time.sleep(1)
75 print failures
76 data_file = open(test + "_purges", "w")
77 for line in failures:
78 data_file.write(line + "\n")
79 data_file.close()
80
81
82 if __name__ == "__main__":
83 main()
84
M-A Ruel 2011/08/19 15:07:01 remove the extra line there
clee 2011/08/19 16:53:57 Done.
OLDNEW
« no previous file with comments | « tools/find_flakies.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698