Loading test metrics & performance data...

{% macro render_step(step) %} {%- set _has_detail = (step.steps or step.attachments or step.exception_message or step.func_name or step.args or step.return_value) -%} {%- set _auto_open = (step.status == 'failed') -%} {%- set _is_http_req = (step.args and 'method' in step.args and 'url' in step.args) -%} {%- set _is_http_resp = (step.args and 'status' in step.args and 'method' not in step.args) -%} {%- set _has_assertions = namespace(value=False) -%} {%- for _cs in step.steps -%} {%- if 'assert' in _cs.name|lower or 'verify' in _cs.name|lower or 'check' in _cs.name|lower -%}{%- set _has_assertions.value = True -%}{%- endif -%} {%- endfor -%}
  • {% if _has_detail %} {% if _auto_open %}−{% else %}+{% endif %} {% else %} {% endif %} {% if step.status == 'passed' %}✓{% else %}✗{% endif %} {{ step.name }}
    {{ formatter.format_duration(step.duration) }}
    {% if _has_detail %}
    {# ── 1. FAILURE REASON (top-most, only on failed) ── #} {% if step.status == 'failed' and step.exception_message %}
    ❌ Failure Reason
    {{ step.exception_message }}
    {% if step.traceback %}
    ▶ Show Traceback
    {{ step.traceback }}
    {% endif %}
    {% endif %} {# ── 2. METADATA (class + function name) ── #} {% if step.class_name or step.func_name %}
    📋 Metadata
    def {% if step.class_name %} {{ step.class_name }}.{% endif %}{{ step.func_name or step.name }}()
    {% endif %} {# ── 3. PARAMETERS / REQUEST ── #} {% if step.args %}
    {% if _is_http_req %} {# HTTP request: show method+URL badge, then headers, then payload as Request Body #}
    📤 Request
    {%- set _meth = step.args.get('method', 'GET') -%} {%- if _meth == 'GET' -%}{%- set _mc = '#3b82f6' -%}{%- set _mb = 'rgba(59,130,246,0.15)' -%} {%- elif _meth == 'POST' -%}{%- set _mc = '#10b981' -%}{%- set _mb = 'rgba(16,185,129,0.15)' -%} {%- elif _meth in ('PUT','PATCH') -%}{%- set _mc = '#f97316' -%}{%- set _mb = 'rgba(249,115,22,0.15)' -%} {%- elif _meth == 'DELETE' -%}{%- set _mc = '#f43f5e' -%}{%- set _mb = 'rgba(244,63,94,0.15)' -%} {%- else -%}{%- set _mc = '#94a3b8' -%}{%- set _mb = 'rgba(148,163,184,0.15)' -%} {%- endif -%}
    {{ _meth }} {{ step.args.get('url', '') }}
    {% if step.args.get('headers') %}
    ▶ Headers
    {{ step.args.get('headers', '')|escape }}
    {% endif %} {% if step.args.get('payload') %}
    📋 Request Body
    {{ step.args.get('payload', '')|escape }}
    {% endif %} {% else %} {# Generic parameters table (auto-traced functions or response data) #}
    {% if _is_http_resp %}📥 Response Metadata{% else %}📥 Parameters{% endif %}
    {% for _pname, _pval in step.args.items() %} {# For response steps, skip large headers in the table (show them collapsed) #} {% if _pname != 'headers' or not _is_http_resp %} {% endif %} {% endfor %}
    {{ _pname }} {{ _pval|escape }}
    {% if _is_http_resp and step.args.get('headers') %}
    ▶ Response Headers
    {{ step.args.get('headers', '')|escape }}
    {% endif %} {# Highlight HTTP response status with color #} {% if _is_http_resp and step.args.get('status') %} {%- set _rs = step.args.get('status', '') -%} {%- if _rs[:1] == '2' -%}{%- set _rc = '#10b981' -%} {%- elif _rs[:1] in ('4','5') or 'Connection' in _rs -%}{%- set _rc = '#f43f5e' -%} {%- elif _rs[:1] == '3' -%}{%- set _rc = '#f97316' -%} {%- else -%}{%- set _rc = '#94a3b8' -%} {%- endif %}
    HTTP Status {{ _rs }}
    {% endif %} {% endif %}
    {% endif %} {# ── 4. RESPONSE / RETURN VALUE ── #} {% if step.return_value %}
    📥 Response
    {{ step.return_value|escape }}
    {% endif %} {# ── 5. ASSERTIONS (child steps with assert/verify/check in name) ── #} {% if _has_assertions.value %}
    ✅ Assertions
      {% for _cs in step.steps %} {% if 'assert' in _cs.name|lower or 'verify' in _cs.name|lower or 'check' in _cs.name|lower %}
    • {% if _cs.status == 'passed' %}✓{% else %}✗{% endif %} {{ _cs.name }} {% if _cs.status == 'failed' and _cs.exception_message %} — {{ _cs.exception_message }} {% endif %}
    • {% endif %} {% endfor %}
    {% endif %} {# ── 6. SCREENSHOTS ── #} {%- set _has_imgs = namespace(value=False) -%} {%- for _att in step.attachments -%}{%- if 'image' in _att.mime_type -%}{%- set _has_imgs.value = True -%}{%- endif -%}{%- endfor -%} {% if _has_imgs.value %}
    📸 Screenshots
    {% for _att in step.attachments %} {% if 'image' in _att.mime_type %}
    {{ _att.name }}
    {{ _att.name }}
    {% endif %} {% endfor %}
    {% endif %} {# ── 7. TEXT / LOG ATTACHMENTS ── #} {% for _att in step.attachments %} {% if 'image' not in _att.mime_type %}
    📄 {{ _att.name }}
    ▶ Show Content
    {% endif %} {% endfor %} {# ── 8. CHILD STEPS (non-assertion sub-steps) ── #} {%- set _has_child_steps = namespace(value=False) -%} {%- for _cs in step.steps -%} {%- if not ('assert' in _cs.name|lower or 'verify' in _cs.name|lower or 'check' in _cs.name|lower) -%}{%- set _has_child_steps.value = True -%}{%- endif -%} {%- endfor -%} {% if _has_child_steps.value %}
    🔢 Sub-Steps
      {% for _cs in step.steps %} {% if not ('assert' in _cs.name|lower or 'verify' in _cs.name|lower or 'check' in _cs.name|lower) %} {{ render_step(_cs) }} {% endif %} {% endfor %}
    {% endif %}
    {% endif %}
  • {% endmacro %} {% macro render_debug_step(step) %}
    {% if step.status == 'passed' %}🟢{% else %}🔴{% endif %} {{ step.name }} {{ formatter.format_duration(step.duration) }}
    {% if step.args or step.return_value %}
    {% if step.args %}
    📥 Parameters passed:
    {% for name, val in step.args.items() %} {{ name }} = {{ val|escape }} {% endfor %}
    {% endif %} {% if step.return_value %}
    📤 Return / Output value:
    {{ step.return_value|escape }}
    {% endif %}
    {% endif %} {% if step.status == 'failed' and step.exception_message %}
    ❌ Exception occurred:
    {{ step.exception_message }}
    {% if step.traceback %}
    Show Traceback Stack
    {{ step.traceback }}
    {% endif %}
    {% endif %} {% if step.attachments %} {% set has_images = namespace(value=False) %} {% for att in step.attachments %} {% if 'image' in att.mime_type %} {% set has_images.value = True %} {% endif %} {% endfor %} {% if has_images.value %}
    {% for att in step.attachments %} {% if 'image' in att.mime_type %}
    {{ att.name }}
    {{ att.name }}
    {% endif %} {% endfor %}
    {% endif %} {% for att in step.attachments %} {% if 'image' not in att.mime_type %}
    📄 {{ att.name }}
    {% if step.status == 'failed' %}−{% else %}+{% endif %}
    {{ att.content|escape }}
    {% endif %} {% endfor %} {% endif %} {% if step.steps %}
    {% for subst in step.steps %} {{ render_debug_step(subst) }} {% endfor %}
    {% endif %}
    {% endmacro %}

    {{ run.title }}

    HIGH PERFORMANCE AUTOMATION INTERFACE
    Generated: {{ generated_at }}

    Passed Rate

    0%
    {{ run.passed }} / {{ run.total }} successful
    0%

    Test Suites

    {{ run.suites|length }} Suites
    {{ run.test_cases|length }} test cases executed

    Total Duration

    {{ formatter.format_duration(run.duration) }}
    Avg: {{ formatter.format_duration(run.duration / run.total if run.total > 0 else 0) }} per test

    📈 Performance & Execution Analytics

    🧪 Test Status Breakdown by Suite

    ⚡ Performance

    ⏱️ Top 10 Slowest Tests

    📊 Test Duration Distribution

    ⚠️ Test Severity Distribution

    {% if run.skipped > 0 %} {% endif %} {% if run.error > 0 %} {% endif %}
    {% for suite in run.suites %}
    {{ suite.name }}
    {{ suite.passed }}/{{ suite.total }} {% if suite.status == 'passed' or suite.status == 'skipped' %}+{% else %}−{% endif %}
    {% for tc in suite.test_cases %}
    {{ tc.name }} ⏱️ {{ tc.status }}
    Line {{ tc.line_number }} ⏱️ {{ formatter.format_duration(tc.duration) }}
    {% endfor %}
    {% endfor %}

    No Test Selected

    Click on a test case from the list on the left to see full details, steps, screenshots, and logs.

    {% for tc in run.test_cases %} {% endfor %}

    ⚙️ System Environment Metrics

    {% for k, v in run.environment.items() %}
    {{ k }} {{ v }}
    {% endfor %}
    🤖 POWERED BY APMT REPORTERS • ALL RIGHTS RESERVED © 2026.