mirror of
https://github.com/tbamud/tbamud.git
synced 2026-04-30 04:41:51 +02:00
fix: add time attributes to JUnit XML to eliminate NaNms in test reporter
Agent-Logs-Url: https://github.com/tbamud/tbamud/sessions/8d948e86-1d59-496f-a317-7fd9294fcad8 Co-authored-by: welcor <357770+welcor@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
73bda79fe6
commit
13c6f6291c
@@ -75,10 +75,13 @@ test: $(TESTS)
|
|||||||
@mkdir -p test-results
|
@mkdir -p test-results
|
||||||
@status=0; \
|
@status=0; \
|
||||||
for t in $(TESTS); do \
|
for t in $(TESTS); do \
|
||||||
|
t_start=$$(date +%s%3N); \
|
||||||
./$$t > test-results/$$t.out 2>&1; \
|
./$$t > test-results/$$t.out 2>&1; \
|
||||||
rc=$$?; \
|
rc=$$?; \
|
||||||
|
t_end=$$(date +%s%3N); \
|
||||||
|
elapsed=$$(awk "BEGIN{printf \"%.3f\", ($$t_end - $$t_start)/1000}"); \
|
||||||
cat test-results/$$t.out; \
|
cat test-results/$$t.out; \
|
||||||
python3 unity_to_junit.py $$t test-results/$$t.xml < test-results/$$t.out; \
|
python3 unity_to_junit.py $$t test-results/$$t.xml "$$elapsed" < test-results/$$t.out; \
|
||||||
if [ $$rc -eq 0 ]; then \
|
if [ $$rc -eq 0 ]; then \
|
||||||
echo "[PASS] $$t"; \
|
echo "[PASS] $$t"; \
|
||||||
else \
|
else \
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"""Convert Unity test-runner output to JUnit XML.
|
"""Convert Unity test-runner output to JUnit XML.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
./test_binary | python3 unity_to_junit.py <suite_name> <output.xml>
|
./test_binary | python3 unity_to_junit.py <suite_name> <output.xml> [elapsed_seconds]
|
||||||
|
|
||||||
Unity emits one result line per test:
|
Unity emits one result line per test:
|
||||||
path/to/file.c:LINE:TEST_NAME:PASS
|
path/to/file.c:LINE:TEST_NAME:PASS
|
||||||
@@ -39,7 +39,9 @@ def parse_unity(lines):
|
|||||||
return tests, total, failures, ignored
|
return tests, total, failures, ignored
|
||||||
|
|
||||||
|
|
||||||
def build_xml(suite_name, tests, total, failures, ignored):
|
def build_xml(suite_name, tests, total, failures, ignored, elapsed):
|
||||||
|
# Distribute total time evenly across tests for per-testcase timing.
|
||||||
|
per_test = round(elapsed / total, 6) if total else 0.0
|
||||||
suite = ET.Element(
|
suite = ET.Element(
|
||||||
"testsuite",
|
"testsuite",
|
||||||
name=suite_name,
|
name=suite_name,
|
||||||
@@ -47,9 +49,13 @@ def build_xml(suite_name, tests, total, failures, ignored):
|
|||||||
failures=str(failures),
|
failures=str(failures),
|
||||||
errors="0",
|
errors="0",
|
||||||
skipped=str(ignored),
|
skipped=str(ignored),
|
||||||
|
time=f"{elapsed:.6f}",
|
||||||
)
|
)
|
||||||
for name, result, message in tests:
|
for name, result, message in tests:
|
||||||
case = ET.SubElement(suite, "testcase", name=name, classname=suite_name)
|
case = ET.SubElement(
|
||||||
|
suite, "testcase",
|
||||||
|
name=name, classname=suite_name, time=f"{per_test:.6f}",
|
||||||
|
)
|
||||||
if result == "FAIL":
|
if result == "FAIL":
|
||||||
f = ET.SubElement(case, "failure", message=message)
|
f = ET.SubElement(case, "failure", message=message)
|
||||||
f.text = message
|
f.text = message
|
||||||
@@ -59,12 +65,13 @@ def build_xml(suite_name, tests, total, failures, ignored):
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) != 3:
|
if len(sys.argv) < 3 or len(sys.argv) > 4:
|
||||||
print(f"usage: {sys.argv[0]} <suite_name> <output.xml>", file=sys.stderr)
|
print(f"usage: {sys.argv[0]} <suite_name> <output.xml> [elapsed_seconds]", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
suite_name, output_file = sys.argv[1], sys.argv[2]
|
suite_name, output_file = sys.argv[1], sys.argv[2]
|
||||||
|
elapsed = float(sys.argv[3]) if len(sys.argv) == 4 else 0.0
|
||||||
tests, total, failures, ignored = parse_unity(sys.stdin.readlines())
|
tests, total, failures, ignored = parse_unity(sys.stdin.readlines())
|
||||||
tree = build_xml(suite_name, tests, total, failures, ignored)
|
tree = build_xml(suite_name, tests, total, failures, ignored, elapsed)
|
||||||
ET.indent(tree, space=" ")
|
ET.indent(tree, space=" ")
|
||||||
tree.write(output_file, encoding="unicode", xml_declaration=True)
|
tree.write(output_file, encoding="unicode", xml_declaration=True)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user