METHOD & HELP
Make the selection explainable.
Start with a completed run
- Import a baseline and candidate, or open the original synthetic demo. Import means a local browser read, not an upload.
- Declare whether each timeStamp is a start, an end, or unknown. Confirm epoch milliseconds and elapsed milliseconds from the actual run configuration.
- Set each measurement window with epoch millisecond bounds. Include only labels you can identify as individual requests. Explicitly exclude controller or summary labels and confirm the selection.
- Declare the environment, scenario, application version, load model and concurrency. Blank means unknown. Record warm-up / cooldown choices and any manual exclusions.
- Calculate, inspect counts and boundary records, and add label-specific observation thresholds and notes. Prepare a review only when the declarations are complete.
- Inspect the outward preview, then download HTML, metrics, a selection manifest and a recipe. Keep the original files for replay, or explicitly download the full backup.
Frozen rule: jtl-nearest-rank-start-window-v1
- Start mode: start = timeStamp, end = timeStamp + elapsed. End mode: start = timeStamp − elapsed, end = timeStamp. Unknown mode permits unphased diagnostics only.
- Inclusion uses normalized start in the half-open [windowStart, windowEnd). A request at the start belongs; one at the end does not. Selected requests may finish after the window.
- For n > 0 sorted elapsed values x, quantile p is x[ceil(p × n) − 1]. Empty latency populations have unknown statistics. No averaging of label percentiles and no global percentile are offered.
- Latency can use all selected samples or only successful selected samples. Error rate is always failures / all selected samples, including when success-only latency is selected.
- Relative delta is (candidate − baseline) / baseline. It is undefined for a zero baseline or missing input. Absolute delta remains defined for two known values. Error-rate delta is in percentage points.
- Request start rate is selected request count / the user-declared complete window duration. Without explicit completeness confirmation it is not assessed. It is not system throughput capacity or completion rate.
- Fewer than 100 latency samples produces a small-sample warning. This warning does not establish that 100 or more samples are sufficient for reliable tail or capacity conclusions.
- No outliers are deleted, failed elapsed values are not altered, and repeated raw rows are retained. Manual record exclusions and excluded-label rules are visible in counts and recipes.
Timestamp example: an apparent p95 improvement
The demo candidate uses end timestamps. Its final request has raw timestamp 1710000006000 and elapsed 2000. End mode places its start at 1710000004000, inside [1710000000000,1710000005000), so p95 is 2000 ms. Declaring start changes selection and excludes it, yielding 400 ms. Neither the number nor the file extension proves the correct mode.
Check the run’s sampleresult.timestamp.start setting. The currently consulted Apache JMeter properties reference lists false as its default; a particular test can override it. This desk intentionally does not apply that default for you.
Supported input and practical limits
UTF-8 CSV or CSV-formatted JTL only, with unique headers and these exact required columns:
timeStamp,elapsed,label,success 1710000000000,100,checkout,true
Each of two files can contain up to 100,000 sample records and 20 MiB. Maximum 200 distinct labels per file, 512 characters per label, 128 columns and 65,536 characters per field. Quoted commas and multiline fields are supported. Non-printing control characters other than tabs and line breaks are rejected. Full backup JSON is limited to 85 MiB and 18 levels of nesting. Values are not silently trimmed, repaired, coerced to zero, or discarded. success must be exactly true or false. Numeric fields must be safe non-negative integers; timestamps and normalized bounds must be in the JavaScript Date epoch range, 0–8640000000000000.
XML JTL, JMX, HAR, k6, Gatling, serialized objects, aggregate SampleCount/ErrorCount inputs and inseparable mixtures of request and summary rows are unsupported. Files are data and are never executed. No URL or load plan is run.
The 100,000-record/20 MiB ceiling is a support boundary, not a promise for every device. See the delivered QA file for tested hardware and timings. Current Chromium desktop is the tested browser family. Mobile viewport and keyboard layout are tested in desktop Chromium emulation; actual mobile Safari, Firefox, screen readers, native file dialogs and physical printers have not been validated.
Reopening and recovery
A recipe stores rule version, source hashes, declarations, windows, label selection, thresholds and notes. Import the exact original files in baseline/candidate order, then reopen the recipe. A same-name file with a different hash is refused. The manifest lists retained source record indices; its summaries cannot reproduce all calculations without the originals.
A full backup explicitly includes the original UTF-8 files and filenames. Restore validates both sources and the whole recipe before replacing the session, recalculates metrics and assigns a new project identity. Stored derived metrics or pass fields are not trusted. Unsupported versions and excessive JSON size or nesting are refused. Backup and browser saving are available after a formal review is prepared; unfinished sessions are not saved automatically.
Browser saves use project-specific keys and are opt-in snapshots, not autosave. A new project never loads a saved project automatically. Edits invalidate the preview and all report downloads. Cancel stops the active worker, including pending file reads, and late responses cannot replace current state.
Sharing and printing
HTML and metrics exports use optional aliases. Review text can still identify private systems; there is no claim of automatic anonymization. Recipes retain original labels for faithful replay. Complete backups include source files and should be shared only deliberately. CSV fields beginning with formula-trigger characters are prefixed with an apostrophe; this changes the exported display label to keep spreadsheet interpretation safer.
Review HTML is a standalone, script-free report. “Print review / save PDF” opens the browser’s print workflow. It is not a generated PDF download; PDF output depends on the browser. Physical print output is not validated.
Established alternatives and an unvalidated experiment
JMeterHub already advertises free local aggregation, charts, baseline comparison and export. Martkos JTL viewer offers a free local viewer with meaningful statistics. Apache JMeter’s native dashboard is free, and BlazeMeter supports report comparisons. We do not claim to be the first free local JTL comparator or a replacement for these products.
This narrow experiment emphasizes disclosed samples, phases, timestamp semantics and a reopenable recipe. It does not establish that users will switch tools, pay for templates, or support a subscription business. No traffic, customers, revenue or market demand have been verified. We have not trialed competitors’ paid offerings and do not make paywall or current price comparisons.
The JMeter dashboard documentation describes differing filters and percentile estimators. This desk follows its own stated nearest-rank contract and does not promise estimator equality with every JMeter report.