58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
"""
|
|
This script analayzes the times from `pytest --durations=0`
|
|
"""
|
|
import re
|
|
import math
|
|
|
|
file = '1067.dat'
|
|
MAX_W = 200
|
|
cut = 0.9
|
|
|
|
re_tm = re.compile(r'([\d\.]+)s call\s+(.*)')
|
|
histo = None
|
|
total_tm = 0
|
|
total_n = 0
|
|
tests = {}
|
|
with open(file, 'rt') as f:
|
|
for ln in f:
|
|
res = re_tm.search(ln)
|
|
if res:
|
|
tm = float(res.group(1))
|
|
tst = res.group(2)
|
|
tm_slot = math.floor(tm)
|
|
if histo is None:
|
|
histo = (tm_slot+1)*[0]
|
|
histo[tm_slot] += 1
|
|
total_tm += tm
|
|
total_n += 1
|
|
# print(f'{tm} {tst}')
|
|
tests[tst] = tm
|
|
|
|
avg = total_tm/total_n
|
|
cut_n = math.ceil(cut*total_n)
|
|
acu = 0
|
|
cut_done = False
|
|
for slot, cantidad in enumerate(histo):
|
|
if not cantidad:
|
|
continue
|
|
acu += cantidad
|
|
if cantidad > MAX_W:
|
|
bar = MAX_W*'*'+f'...* ({cantidad})'
|
|
else:
|
|
bar = cantidad*'*'
|
|
print("%02d|%03d %s" % (slot+1, cantidad, bar))
|
|
if not cut_done and acu >= cut_n:
|
|
slot_cut = slot+1
|
|
print('----')
|
|
cut_done = True
|
|
|
|
print(f'Runs: {total_n}')
|
|
print(f'Total time: {round(total_tm)} s ({round(total_tm/60,1)} m)')
|
|
print(f'Average: {round(avg,1)} s')
|
|
print(f'Cut: {cut*100} % ({cut_n}): {slot_cut} s ({total_n-cut_n})')
|
|
|
|
with open('slowest.txt', 'wt') as f:
|
|
for tst, tm in tests.items():
|
|
if tm >= slot_cut:
|
|
f.write(f'{tst} {tm}\n')
|