Skip to content

Commit 43360e3

Browse files
committed
Fix collation script to handle module-level skips
This is meant to detect always-skipped tests by checking for skips which never appear as non-skips. However, a module-level skip produces a skip for the module which doesn't *also* get emitted as a success on the "positive" runs. Since module-level skips have an empty `classname`, use that to detect them and treat them slightly differently (by counting them and comparing against the number of files).
1 parent ebeb97e commit 43360e3

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

scripts/aggregate-pytest-reports.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,45 @@ def main():
1010
args = parser.parse_args()
1111

1212
tests_by_name = defaultdict(dict)
13+
skipped_module_counts = defaultdict(int)
1314
for filename in args.FILES:
1415
tree = ElementTree.parse(filename)
1516
root = tree.getroot()
1617

1718
for testcase in root.findall("./testsuite/testcase"):
1819
classname = testcase.get("classname")
1920
name = testcase.get("name")
20-
nodename = f"{classname.replace('.', '/')}.py::{name}"
2121

2222
skip_node = testcase.find("skipped")
23-
if skip_node is not None:
24-
if "skipped" not in tests_by_name[nodename]:
25-
tests_by_name[nodename]["skipped"] = True
23+
24+
if classname:
25+
nodename = f"{classname.replace('.', '/')}.py::{name}"
26+
if skip_node is not None:
27+
if "skipped" not in tests_by_name[nodename]:
28+
tests_by_name[nodename]["skipped"] = True
29+
else:
30+
tests_by_name[nodename]["skipped"] = False
2631
else:
27-
tests_by_name[nodename]["skipped"] = False
32+
if skip_node is not None:
33+
skipped_module_counts[name] += 1
34+
35+
skipped_modules = {
36+
modname
37+
for modname, count in skipped_module_counts.items()
38+
if count == len(args.FILES)
39+
}
2840

2941
fail = False
3042
for nodename, attributes in tests_by_name.items():
3143
if attributes.get("skipped") is True:
3244
print(f"ALWAYS SKIPPED: {nodename}")
3345
fail = True
3446

47+
if skipped_modules:
48+
for modname in skipped_modules:
49+
print(f"ALWAYS SKIPPED MODULE: {modname}")
50+
fail = True
51+
3552
if fail:
3653
print("fail")
3754
sys.exit(1)

0 commit comments

Comments
 (0)