Journal and SKIP: record, records, skip

Arbitrary data into the report; selecting your records; ending a non-applicable scenario.

since 0.3.0since 0.4.0

Methods

EntrySignatureAvailable sinceAPI 3
recordrecord(name, data) -> None0.3.0unchanged
recordsrecords(name=None, *, require_complete=True) -> list[dict]0.3.00.6.0: explicit partial reads
skipskip(reason) -> NoReturn0.4.0unchanged

API 3 changes (0.5.0)

Unchanged. Records reach disk with [results] capture = true; MMIO adds journal records.

Recommended

Record before check: keep raw samples, units, warmup and eligibility. In counter-cost GDB request time is separate from model ticks; a sample maximum is not WCET. external-capture checks READY/drain, completeness and clock anchors separately; analysis never rewrites the scenario outcome. rosbag-import checks the bag against its index and relates it to a GDB snapshot only through MCU counter anchors and a measured latency; otherwise UNKNOWN.

t.record("adc.sample", {"vdda_mv": t.read("board_adc_reading.vdda_mv")})
samples = [row["data"]["vdda_mv"] for row in t.records("adc.sample")]
t.check("enough samples", len(samples) >= 2, True)
if not t.profile.get("user.sample_step", True):
    t.skip("sample_step disabled in api.toml")

Avoid

print does not reach the report. Missing data is not zero; in-interval cost is not total perturbation. SKIP must not hide API errors; source exit 0 does not establish capture completeness.

print(t.read("board_adc_reading.vdda_mv"))   # not in the report
try:
    t.reach("board_adc_sample")
except Exception:
    t.skip("no ADC")                          # SKIP hides an error

The fragments show refused or discouraged patterns, not a working recipe.

Fragments for a scenario body; firmware symbols are illustrative.

← PointsAll groupsContext →