/ 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