{% if run.skipped > 0 %}
{% endif %}
{% if run.error > 0 %}
{% endif %}
{% for suite in run.suites %}
{% endfor %}
{{ suite.name }}
{{ suite.passed }}/{{ suite.total }}
{% if suite.status == 'passed' or suite.status == 'skipped' %}+{% else %}−{% endif %}
{% for tc in suite.test_cases %}
{% endfor %}
{{ tc.name }}
⏱️
{{ tc.status }}
Line {{ tc.line_number }}
⏱️ {{ formatter.format_duration(tc.duration) }}
No Test Selected
Click on a test case from the list on the left to see full details, steps, screenshots, and logs.
{{ tc.status
}}
{{ tc.name }}
{{ formatter.format_duration(tc.duration) }}
{{ tc.file_path }}:{{ tc.line_number }}
Test Case Identifier (Node ID)
{% if tc.docstring %}
{{ tc.nodeid }}
{{ tc.docstring }}
{% endif %}
Test
History:
{% for run_hist in history %}
{% if run_hist.test_cases and tc.nodeid in run_hist.test_cases %}
{% set hist_status = run_hist.test_cases[tc.nodeid] %}
{% if hist_status == 'passed' %}✓
{% elif hist_status == 'failed' %}✗
{% elif hist_status == 'error' %}!
{% else %}−
{% endif %}
{% endif %}
{% endfor %}
❌ Execution Failed: {{ tc.status|upper }}
{% if tc.traceback %}
{{ tc.exception_message }}
ERROR STACK TRACEBACK
CRITICAL
ERROR
{{ tc.traceback }}
{% if _is_failed %}🔬 FAILURE INTELLIGENCE — DEBUG & FIX GUIDE{% else %}📊 CAPTURED TEST EVIDENCE{% endif %}
{% if _is_failed %}−{% else %}+{% endif %}
{# ── SECTION B: API REQUEST / RESPONSE DATA ── #}
{% if has_api_data.value %}
{% for _k,_v in _sub.args.items() %}
{% endif %}
{% endif %}
{% if 'Response Data' in _sub.name %}
{% for _k,_v in _sub.args.items() %}
{% endif %}
{% if _sub.return_value %}
{% endif %}
{% endfor %}
{% endif %}
{# Nested API steps (inside @apmt.step decorated functions) #}
{% for _sub in _step.steps %}
{% if 'API Request' in _sub.name %}
{% for _k,_v in _ss.args.items() %}
{% endif %}
{% endif %}
{% if 'Response Data' in _ss.name %}
{% for _k,_v in _ss.args.items() %}
{% endif %}
{% if _ss.return_value %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
{% endif %}
{# ── SECTION C: UI EVIDENCE (Screenshots + Console + Network) ── #}
{% if has_ui_data.value %}
{% endif %}
{% endfor %}
{% for _step in tc.steps %}
{% if _step.status == 'failed' %}
{% for _att in _step.attachments %}
{% if 'Console' in _att.name and 'image' not in _att.mime_type %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{# Network Traffic — stage-level then step-level (failed steps only) #}
{% for _att in tc.attachments %}
{% if 'Network' in _att.name and 'image' not in _att.mime_type %}
{% endif %}
{% endfor %}
{% for _step in tc.steps %}
{% if _step.status == 'failed' %}
{% for _att in _step.attachments %}
{% if 'Network' in _att.name and 'image' not in _att.mime_type %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
{# /diag-body #}
🔌 API Request / Response Data
{% for _step in tc.steps %}
{# Top-level API steps (rare but possible) #}
{% if 'API Request' in _step.name %}
{{ _step.status }}
{{ _step.name }}
{% for _sub in _step.steps %}
{% if 'Request Data' in _sub.name %}
📤 Request Parameters
{% if _sub.args %}| {{ _k }} | {{ _v|escape }} |
📥 Response {% if _sub.status == 'failed' %}(FAILED){% else %}(OK){% endif %}
{% if _sub.args %}| {{ _k }} | {{ _v|escape }} |
Response Body
{{ _sub.return_value|escape }}{% endif %}
{{ _sub.status }}
{{ _sub.name }}
↳ {{ _step.name }}
{% for _ss in _sub.steps %}
{% if 'Request Data' in _ss.name %}
📤 Request Parameters
{% if _ss.args %}| {{ _k }} | {{ _v|escape }} |
📥 Response {% if _ss.status == 'failed' %}(FAILED){% else %}(OK){% endif %}
{% if _ss.args %}| {{ _k }} | {{ _v|escape }} |
Response Body
{{ _ss.return_value|escape }}{% endif %}
🖥️ UI State Evidence
{# Screenshots — from tc.attachments (stage-level) #}
{% set _any_ss = namespace(value=False) %}
{% for _att in tc.attachments %}{% if 'image' in _att.mime_type %}{% set _any_ss.value = True %}{% endif %}{% endfor %}
{% for _step in tc.steps %}{% for _att in _step.attachments %}{% if 'image' in _att.mime_type and _step.status == 'failed' %}{% set _any_ss.value = True %}{% endif %}{% endfor %}{% endfor %}
{% if _any_ss.value %}
📸 Page Screenshots — Click to Enlarge
{% for _att in tc.attachments %}
{% if 'image' in _att.mime_type %}
{% endif %}
{% endfor %}
{% for _step in tc.steps %}
{% if _step.status == 'failed' %}
{% for _att in _step.attachments %}
{% if 'image' in _att.mime_type %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
{# Console Logs — stage-level then step-level (failed steps only) #}
{% for _att in tc.attachments %}
{% if 'Console' in _att.name and 'image' not in _att.mime_type %}
{{ _att.name }}
{{ _att.name }} ({{ _step.name }})
🖥️ Browser Console Logs
{{ _att.content|escape }}
🖥️ Console Logs (at failure — {{ _step.name }})
{{ _att.content|escape }}
🌐 Browser Network Traffic
{{ _att.content|escape }}
🌐 Network Traffic (at failure — {{ _step.name }})
{{ _att.content|escape }}
{{ s_name }}
Phase
{{ stage.status }}
{{ formatter.format_duration(stage.duration)
}}
{% if stage.steps %}
{% endif %}
{% endfor %}
{% endif %}
{% if stage.stdout or stage.stderr %}
{% endif %}
{% if stage.log %}
{% endif %}
📋 Execution Steps
-
{% for st in stage.steps %}
{{ render_step(st) }}
{% endfor %}
🖼️ Stage Images
{% for att in stage.attachments %}
{% if 'image' in att.mime_type %}
{% endif %}
{% endfor %}
{% endif %}
{% for att in stage.attachments %}
{% if 'image' not in att.mime_type %}
{{ att.name }}
📄 {{ att.name }}
+
{{ att.content|escape }}
🖥️ Captured Terminal Console
{% if stage.stdout %}{{ stage.stdout }}{% endif %}{% if stage.stderr %}\n[STDERR]\n{{ stage.stderr }}{% endif %}
📝 Execution Log
{{ stage.log }}