Execution
The top action bar of the Load Test panel is where a run actually happens. It holds the environment selector, live status indicator, and the Start / Stop / Re-run button — plus a Compare toggle for multi-run analysis once you have history to work with.
The Action Bar
Left-to-right, the bar is laid out like this:
- •Environment dropdown — pick which environment to resolve variables against. Shows No Environment by default, followed by every environment in the spec's group. A Manage Environments link at the bottom opens the group env panel
- •Live status (only visible while running or after a run) — pulse dot while running, check/cross when finished, plus elapsed time and active/target VUs
- •Compare button — enters selection mode in the run history; see the Compare Runs section
- •Start / Stop / Re-run — the primary action; its label and color change based on state
Starting a Run
The button is enabled when canStart is true — the spec must have at least one step and no other run must be in progress. Pressing Start does the following in order:
- Vault guard — if the spec or its environment references any Vault secret, Tigrister prompts for the vault passphrase via
VaultStartGuardbefore anything else runs - Environment resolution — variables from the selected environment are resolved (Manual / OS Secret / Vault values pulled and merged)
- Before All script — runs once against the resolved context; any
tg.flow.setcalls seed variables every VU will see - VU runner spawns — virtual users ramp up according to the active test type's profile
- Live metrics stream — the Rust runner emits
LiveMetricsupdates via Tauri events; the UI renders time-series charts in real time - Ramp down & aggregation — VUs wind down, final percentile metrics are computed, thresholds evaluated
- After All script — runs once with
tg.export.*available against the finalized result - Result persisted — a full
LoadTestResultis saved to history and becomes the new lastResult
Start errors are inline: if the runner refuses to start (e.g. invalid config, missing credentials, network pre-check failed), the Results panel surfaces a red banner with the reason rather than silently failing.
While the Test Is Running
The Start button morphs into a red Stop button. The status badge shows a pulsing blue dot and the label Running. The elapsed timer runs in m:ss format, and the VU counter updates every tick (e.g. 42/50 VUs mid-ramp).
Under the hood, the Rust crate in src-tauri/crates/load-test emits a LiveMetrics event every second. Each event carries the full percentile snapshot plus an incremental timeSeriesPoint that the UI appends to its in-memory buffer. Charts redraw as new points arrive — no polling, no page refresh.
Stopping is graceful: pressing Stop cancels the sustain phase and skips straight to ramp-down. VUs finish their current request and quit. The final result is marked with status stopped and thresholds are not evaluated — a stopped run is neither passed nor failed.
Test Status
Every completed run is tagged with one of three statuses:
| Status | Indicator | Meaning |
|---|---|---|
| passed | Green checkmark | Ran to completion, every enabled threshold held, no gate-breaking assertion failures |
| failed | Red cross | Ran to completion but at least one threshold was violated, or Fail on assertion errors was on and assertions fired |
| stopped | Muted dash | User pressed Stop; metrics are still captured but thresholds are not evaluated |
Re-running
After a run finishes, the button label changes to Re-run with a circular arrow icon. Pressing it kicks off another run with the same configuration — handy for A/B comparisons where you want to tweak the target API between runs without reconfiguring the spec.
Each Re-run creates a brand-new entry in the run history, so you can always return to any previous run via the sidebar or feed it into the Compare view.