/ unittest-statistics.py
unittest-statistics.py
1 #!/usr/bin/env python3 2 import subprocess 3 import sys 4 import re 5 import os 6 7 def main(): 8 if len(sys.argv) < 2: 9 tool = os.path.basename(sys.argv[0]) 10 print('Usage: {} </path/to/test_bitcoin> [<subtest>]'.format(tool)) 11 print('For example: {} src/test/test_bitcoin wallet_tests'.format(tool)) 12 exit(1) 13 test_bitcoin = sys.argv[1] 14 args = [test_bitcoin, '--log_level=test_suite'] 15 if len(sys.argv) > 2: 16 args += ['--run_test=' + sys.argv[2]] 17 p = subprocess.Popen(args, stdout=subprocess.PIPE) 18 results = [] 19 for line in p.stdout: 20 if not line: 21 break 22 line = line.decode() 23 m = re.match('.*Leaving test case "(.*)".*: ([0-9]+)(us|mks|ms)', line) 24 if m: 25 if m.group(3) == 'ms': 26 elapsed = int(m.group(2)) * 1000 27 else: 28 elapsed = int(m.group(2)) 29 results.append((m.group(1), elapsed)) 30 sys.stderr.write('.') 31 sys.stderr.flush() 32 sys.stderr.write('\n') 33 sys.stderr.flush() 34 rv = p.wait() 35 36 if rv == 0: 37 print('| {:<55} | {:^9} |'.format('Test', 'Time (μs)')) 38 print('| {} | {}:|'.format('-'*55, '-'*9)) 39 results.sort(key=lambda a:-a[1]) 40 for a in results: 41 print('| {:<55} | {:>9} |'.format('`'+a[0]+'`', a[1])) 42 43 if __name__ == '__main__': 44 main() 45