forked from josch/mmdebstrap
coverage.py: print accumulated time per test type
This commit is contained in:
parent
f737cce3f1
commit
06f84b84ae
1 changed files with 34 additions and 20 deletions
54
coverage.py
54
coverage.py
|
@ -132,6 +132,30 @@ def format_test(num, total, name, dist, mode, variant, fmt, config_dict):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def print_time_per_test(time_per_test, name="test"):
|
||||||
|
print(
|
||||||
|
f"average time per {name}:",
|
||||||
|
sum(time_per_test.values(), start=timedelta()) / len(time_per_test),
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
f"median time per {name}:",
|
||||||
|
sorted(time_per_test.values())[len(time_per_test) // 2],
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
head_tail_num = 10
|
||||||
|
print(f"{head_tail_num} fastests {name}s:", file=sys.stderr)
|
||||||
|
for k, v in sorted(time_per_test.items(), key=lambda i: i[1])[
|
||||||
|
: min(head_tail_num, len(time_per_test))
|
||||||
|
]:
|
||||||
|
print(f" {k}: {v}", file=sys.stderr)
|
||||||
|
print(f"{head_tail_num} slowest {name}s:", file=sys.stderr)
|
||||||
|
for k, v in sorted(time_per_test.items(), key=lambda i: i[1], reverse=True)[
|
||||||
|
: min(head_tail_num, len(time_per_test))
|
||||||
|
]:
|
||||||
|
print(f" {k}: {v}", file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("test", nargs="*", help="only run these tests")
|
parser.add_argument("test", nargs="*", help="only run these tests")
|
||||||
|
@ -288,6 +312,7 @@ def main():
|
||||||
num_success = 0
|
num_success = 0
|
||||||
num_finished = 0
|
num_finished = 0
|
||||||
time_per_test = {}
|
time_per_test = {}
|
||||||
|
acc_time_per_test = defaultdict(list)
|
||||||
for i, (test, name, dist, mode, variant, fmt) in enumerate(tests):
|
for i, (test, name, dist, mode, variant, fmt) in enumerate(tests):
|
||||||
if torun and i not in torun:
|
if torun and i not in torun:
|
||||||
continue
|
continue
|
||||||
|
@ -380,6 +405,7 @@ def main():
|
||||||
i + 1, len(tests), name, dist, mode, variant, fmt, config_dict
|
i + 1, len(tests), name, dist, mode, variant, fmt, config_dict
|
||||||
)
|
)
|
||||||
time_per_test[formated_test_name] = walltime
|
time_per_test[formated_test_name] = walltime
|
||||||
|
acc_time_per_test[name].append(walltime)
|
||||||
print(separator, file=sys.stderr)
|
print(separator, file=sys.stderr)
|
||||||
print(f"duration: {walltime}", file=sys.stderr)
|
print(f"duration: {walltime}", file=sys.stderr)
|
||||||
if proc.returncode != 0 or shellcheck != "":
|
if proc.returncode != 0 or shellcheck != "":
|
||||||
|
@ -409,27 +435,15 @@ def main():
|
||||||
print(f, file=sys.stderr)
|
print(f, file=sys.stderr)
|
||||||
exit(1)
|
exit(1)
|
||||||
if len(time_per_test) > 1:
|
if len(time_per_test) > 1:
|
||||||
print(
|
print_time_per_test(time_per_test)
|
||||||
"average time per test:",
|
if len(acc_time_per_test) > 1:
|
||||||
sum(time_per_test.values(), start=timedelta()) / len(time_per_test),
|
print_time_per_test(
|
||||||
file=sys.stderr,
|
{
|
||||||
|
f"{len(v)}x {k}": sum(v, start=timedelta())
|
||||||
|
for k, v in acc_time_per_test.items()
|
||||||
|
},
|
||||||
|
"accumulated test",
|
||||||
)
|
)
|
||||||
print(
|
|
||||||
"median time per test:",
|
|
||||||
sorted(time_per_test.values())[len(time_per_test) // 2],
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
head_tail_num = 10
|
|
||||||
print(f"{head_tail_num} fastests tests:", file=sys.stderr)
|
|
||||||
for k, v in sorted(time_per_test.items(), key=lambda i: i[1])[
|
|
||||||
: min(head_tail_num, len(time_per_test))
|
|
||||||
]:
|
|
||||||
print(f" {k}: {v}", file=sys.stderr)
|
|
||||||
print(f"{head_tail_num} slowest tests:", file=sys.stderr)
|
|
||||||
for k, v in sorted(time_per_test.items(), key=lambda i: i[1], reverse=True)[
|
|
||||||
: min(head_tail_num, len(time_per_test))
|
|
||||||
]:
|
|
||||||
print(f" {k}: {v}", file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in a new issue