v3.37.0: load testing for test scripts and suites

POST /api/test/run takes an optional iterations count (the PWA's
Iterations field): the run repeats, successful iterations are discarded
(steps/log cleared, only load.done and the timing grow), the first error
stops the loop and keeps that iteration's report, a stop ends it after
the current iteration, and a card session change between iterations is
an error.  The SCP80 counter state is shared across iterations, so
packets continue from what the previous run consumed.

The status gains a load block (iteration/done/failed_iteration/
elapsed_ms/avg_ms; disabled for a normal run).  The suite runner was
split into a per-iteration body (_test_suite_execute_once) + the
single-run finaliser, and two load workers own the loops.

Review fixes: a raised runner error finalises as error (no stuck
running state), a suite-internal session change is an error, a stopped
member ends the suite loop, the final status keeps a warning from any
iteration, avg_ms covers the attempted iterations, and each suite
iteration's counters_before is read fresh.

1041 Python + 1069 frontend; simple-v475.
This commit is contained in:
catarrh committed 2026-10-23 23:44:42 +03:00
1 parent 851ff65af6
commit 2181ef6bbf
13 files changed
+937 -64

No files matched your search

+12 -1
View File
@@ -1006,11 +1006,22 @@ on every stop** as long as the card is in the reader; a card reset (session
change) stops the suite, skips the remaining members and is flagged in the
report.
`iterations` (optional, 1-1,000,000, default 1) repeats the script or the
whole suite: successful iterations are discarded (only the counter and the
timing are kept; the per-step log is not retained), the first iteration that
ends in an **error** stops the loop and keeps that iteration's report, a
manual stop ends it after the current iteration, and a card session change
between iterations is an error. The status gains `load`:
`{enabled, iterations, iteration, done, failed_iteration, started, finished,
elapsed_ms, avg_ms}`.
The suite run's snapshot adds `suite`: the member records (`status`, `steps`,
`note`, `log` - the semantic run-log excerpt), the `summary` (ok/warning/
error/skipped counts, `wall_ms`, `stopped`, `session_changed`, the SCP80
`counters_before`/`counters_after` per keyset), the `start_reset` flag and
the `reset` result (ICCID + ms) and the run's `adm` state.
the `reset` result (ICCID + ms) and the run's `adm` state. A successful load
test leaves `suite` `null` (no iteration is tracked); a failing one keeps the
failing iteration's suite state.
The report is exported from the PWA as JSON or Markdown; the run state lives
in the server until `POST /api/test/clear` (no history).