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:
+12
-1
@@ -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).
|
||||
|
||||
|
||||
@@ -229,6 +229,19 @@ TEST-RUN step 4: MENU-SELECT ENVELOPE=80c2000009d30702020181900101 item=1 ('One'
|
||||
(`APDU-TRACE(…): <cmd> → SW: … RESP: …`) for every APDU, including the
|
||||
file-manager reads and pySim's auto-handler traffic.
|
||||
|
||||
## Load testing
|
||||
|
||||
A run may be repeated: `POST /api/test/run {..., "iterations": N}` (the
|
||||
PWA's **Iterations** field next to Start / Run suite) executes the script or
|
||||
the whole suite N times. Successful iterations are discarded - only the
|
||||
iteration counter and the timing are kept, so memory use stays flat. The
|
||||
first iteration that ends in an error stops the loop and keeps its full
|
||||
report (steps, failed checks, log excerpt; for a suite, the member report);
|
||||
a manual 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 iteration consumed.
|
||||
The iteration count is a run parameter - the stored script/suite is unchanged.
|
||||
|
||||
## Document shape
|
||||
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user