ecu-tests/pytest.ini
Hosam-Eldin Mostafa 29a7a44c8b tests/hardware: settle-then-validate PSU helpers + voltage-tolerance tests
Voltage-changing tests can't sleep a fixed amount and assume the
rail is there — Owon settling is bench-dependent and typically
asymmetric (up-step ≠ down-step). New shared helpers and tests use
the rail's measured value to drive timing.

- tests/hardware/psu_helpers.py:
    wait_until_settled(psu, target_v, ...)
        polls measure_voltage_v() until within tol, returns
        (elapsed_s, trace) or (None, trace) on timeout
    apply_voltage_and_settle(psu, target_v, validation_time, ...)
        composite: set setpoint → wait until measured matches →
        sleep validation_time so the firmware-side observer can
        detect and republish status. Raises on settle timeout.
    downsample_trace, plus DEFAULT_VOLTAGE_TOL_V (0.10),
    DEFAULT_POLL_INTERVAL_S (0.05), DEFAULT_SETTLE_TIMEOUT_S (10.0),
    DEFAULT_VALIDATION_TIME_S (1.0).

- test_overvolt.py: voltage-tolerance suite. Each test (over,
  under, parametrized sweep) uses apply_voltage_and_settle for the
  procedure, the autouse _park_at_nominal fixture (also via the
  helper), and a single deterministic ALM_Status read after the
  validation hold instead of polling-the-bus.

- test_psu_voltage_settling.py: characterization test, opt-in via
  the new psu_settling marker. Walks four (start_v, target_v)
  transitions and records settling_time_s + voltage_trace per case.
  Values feed directly into test_overvolt's ECU_VALIDATION_TIME_S
  budgeting.

- pytest.ini:
    junit_family = legacy  → record_property() entries now actually
        appear in reports/junit.xml (the default xunit2 silently
        dropped them with a collect-time warning, breaking the
        conftest plugin's metadata round-trip)
    psu_settling marker registered

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 19:01:49 +02:00

39 lines
2.5 KiB
INI

[pytest]
# addopts: Default CLI options applied to every pytest run.
# -ra → Show extra test summary info for skipped, xfailed, etc.
# --junitxml=... → Emit JUnit XML for CI systems (machines can parse it).
# --html=... → Generate a human-friendly HTML report after each run.
# --self-contained-html → Inline CSS/JS in the HTML report for easy sharing.
# --tb=short → Short tracebacks to keep logs readable.
# Plugin note: We no longer force-load via `-p conftest_plugin` to avoid ImportError
# on environments where the file might be missing. Instead, `conftest.py` will
# register the plugin if present. The plugin:
# - extracts Title/Description/Requirements/Steps from test docstrings
# - adds custom columns to the HTML report
# - writes requirements_coverage.json and summary.md in reports/
addopts = -ra --junitxml=reports/junit.xml --html=reports/report.html --self-contained-html --tb=short --cov=ecu_framework --cov-report=term-missing
# markers: Document all custom markers so pytest doesn't warn and so usage is clear.
# Use with: pytest -m "markername"
markers =
hardware: requires real hardware (LIN master + ECU); excluded by default in mock runs
babylin: DEPRECATED. Tests targeting the legacy BabyLIN interface; use the `mum` marker for new tests.
mum: tests that use the Melexis Universal Master (MUM) interface (requires hardware)
unit: fast, isolated tests (no hardware, no external I/O)
req_001: REQ-001 - Mock interface shall echo transmitted frames for local testing
req_002: REQ-002 - Mock interface shall synthesize deterministic responses for request operations
req_003: REQ-003 - Mock interface shall support frame filtering by ID
req_004: REQ-004 - Mock interface shall handle timeout scenarios gracefully
smoke: Basic functionality validation tests
boundary: Boundary condition and edge case tests
slow: Slow tests (>5s typical); selectable via -m "slow" or excludable via -m "not slow"
psu_settling: Owon PSU voltage settling-time characterization (opt-in via -m psu_settling)
# testpaths: Where pytest looks for tests by default.
testpaths = tests
# junit_family: 'legacy' is required for record_property() entries to appear in
# the JUnit XML. The default 'xunit2' silently drops them and warns at collect
# time, which breaks the conftest plugin's metadata round-trip.
junit_family = legacy