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>
39 lines
2.5 KiB
INI
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
|