Reporting
Learn how LoadStrike keeps HTML, TXT, CSV, and Markdown reports consistent across the supported SDKs.
Matching docs
Search across docs titles, summaries, groups, and section headings.
Use Up and Down Arrow to move through results, then press Enter to open the active page.
No indexed docs matched that search. Try a broader term or open the docs hub.
What this page helps you do
What this page helps you do
Learn how LoadStrike keeps HTML, TXT, CSV, and Markdown reports consistent across the supported SDKs.
Who this is for
Teams controlling runtime behavior, tracking, reporting, licensing, or policy from code, JSON, or CLI settings.
Prerequisites
- A scenario or run configuration that already works locally
By the end
The documented runtime setting or policy surface for this part of the product.
Use this page when
Use this page when runtime behavior changes because of configuration, policy, or execution settings rather than the scenario body itself.
Visual guide
Guide
Consistent Report Surface
C#, Go, Java, Python, TypeScript, and JavaScript share the same report structure across HTML, TXT, CSV, and Markdown. That means the same section order, field names, timestamps, metrics, navigation, plugin tabs, and formatting rules. TXT keeps plugin-table summaries, CSV and Markdown stay more scenario-focused, and plugin hints remain available through JSON plus HTML plugin tabs.
Result Contract Aliases
The final LoadStrikeRunResult keeps the same underlying data while exposing both camelCase and PascalCase members where the SDK surface benefits from compatibility aliases. Typical pairs are thresholdResults and ThresholdResults, metricStats and MetricStats, scenarioDurationsMs and ScenarioDurationsMs, and pluginsData and PluginsData. Use the naming style that fits your host language, but treat them as the same final artifact.
HTML Report Tabs
The HTML report uses fixed left-side tabs for Summary, Scenarios, Steps, Status Codes, Failed Responses, plugin tabs, and other sections that actually have data for the current run. Empty tabs are omitted instead of being shown as blank placeholders. Failed Responses includes a Failed Status Codes table and a Failed and Timed Out Rows table only when those rows exist.
Report Branding
HTML reports render the theme-specific LoadStrike logo in one fixed-size header slot, using the light logo for the light theme and the dark logo for the dark theme so size and alignment stay stable.
Theme Toggle
Website pages and HTML reports support the icon-only Light and Dark theme toggle at the top-right corner. Light is the default theme, and the browser keeps the selected preference in local storage.
Correlation Tabs
The report includes Ungrouped Corelation Summary and Grouped Correlation Summary only when matched correlation data exists. Both views show the table first. The ungrouped view adds one combined percentile line graph only when percentile points exist, while the grouped view renders one chart per GatherBy value only for groups that contain percentile data. Correlation chart cards use bounded widths to avoid stretched visuals.
Percentiles
Tables include P80, P85, P90, P95, and P99 when those values exist. Grouped summary charts include P50 through P99 trend lines for populated groups. Summary only renders latency tables and graphs when data is available, and the overlap-safe percentile styling keeps P50, P75, P95, and P99 visible when values are close. Line charts also reserve extra top padding so legend labels do not overlap top y-axis values.
Status Percentages
When status rows exist, the Status Codes tab also exposes Percent for the overall scope.
Configuration samples
Use these samples to see how Reporting is configured in code, JSON, or CLI surfaces where this page documents them.
If you run these examples locally, add a valid runner key before execution starts. Set it with WithRunnerKey("...") or the config key LoadStrike:RunnerKey.
Reporting Options
using LoadStrike;
using Microsoft.Extensions.Configuration;
var sink = new AuditReportingSink();
var result = LoadStrikeRunner.RegisterScenarios(scenario)
.WithReportFolder("./reports")
.WithReportFormats(LoadStrikeReportFormat.Html, LoadStrikeReportFormat.Csv)
.WithReportingSinks(sink)
.WithRunnerKey("rkl_your_local_runner_key")
.Run();
Console.WriteLine($"Report files: {string.Join(", ", result.ReportFiles)}");
Console.WriteLine($"Sink saw {sink.LastRunResult?.AllRequestCount ?? 0} requests.");
public sealed class AuditReportingSink : LoadStrikeReportingSink
{
public string SinkName => "audit-sink";
public LoadStrikeRunResult? LastRunResult { get; private set; }
public Task Init(LoadStrikeBaseContext context, IConfiguration infraConfig) => Task.CompletedTask;
public Task Start(LoadStrikeSessionStartInfo sessionInfo) => Task.CompletedTask;
public Task SaveRealtimeStats(LoadStrikeScenarioStats[] stats) => Task.CompletedTask;
public Task SaveRealtimeMetrics(LoadStrikeMetricStats metrics) => Task.CompletedTask;
public Task SaveRunResult(LoadStrikeRunResult result)
{
LastRunResult = result;
return Task.CompletedTask;
}
public Task Stop() => Task.CompletedTask;
public void Dispose()
{
}
}
package main
import (
"time"
loadstrike "loadstrike.com/sdk/go"
)
func main() {
loadstrike.RegisterScenarios(loadstrike.Empty("reports-demo")).
WithReportFolder("./reports").
WithReportFileName("loadstrike-report").
WithReportFormats(
loadstrike.ReportFormatHTML,
loadstrike.ReportFormatCSV,
loadstrike.ReportFormatTXT,
loadstrike.ReportFormatMD,
).
WithReportingInterval(loadstrike.TimeSpan(5 * time.Second)).
Run()
}
import com.loadstrike.runtime.LoadStrikeRuntime.LoadStrikeResponse;
import com.loadstrike.runtime.LoadStrikeRuntime.LoadStrikeRunner;
import com.loadstrike.runtime.LoadStrikeRuntime.LoadStrikeScenario;
import com.loadstrike.runtime.LoadStrikeRuntime.LoadStrikeSimulation;
var scenario = LoadStrikeScenario
.create("submit-orders", ignoredContext -> LoadStrikeResponse.ok("200"))
.withLoadSimulations(LoadStrikeSimulation.inject(10, 1d, 20d));
LoadStrikeRunner
.registerScenarios(scenario)
.withReportFolder("./reports")
.withReportFormats("html", "csv", "txt", "md")
.withReportingInterval(5d)
.withRunnerKey("rkl_your_local_runner_key")
.run();
from loadstrike_sdk import LoadStrikeResponse, LoadStrikeRunner, LoadStrikeScenario, LoadStrikeSimulation
scenario = (
LoadStrikeScenario.create("submit-orders", lambda _: LoadStrikeResponse.ok("200"))
.with_load_simulations(LoadStrikeSimulation.inject(10, 1, 20))
)
LoadStrikeRunner.register_scenarios(scenario) \
.with_report_folder("./reports") \
.with_report_formats("html", "csv", "txt", "md") \
.with_reporting_interval(5) \
.with_runner_key("rkl_your_local_runner_key") \
.run()
import {
LoadStrikeResponse,
LoadStrikeRunner,
LoadStrikeScenario,
LoadStrikeSimulation
} from "@loadstrike/loadstrike-sdk";
const scenario = LoadStrikeScenario
.create("submit-orders", async () => LoadStrikeResponse.ok("200"))
.withLoadSimulations(LoadStrikeSimulation.inject(10, 1, 20));
await LoadStrikeRunner
.registerScenarios(scenario)
.withReportFolder("./reports")
.withReportFormats("html", "csv", "txt", "md")
.withReportingInterval(5)
.withRunnerKey("rkl_your_local_runner_key")
.run();
const {
LoadStrikeResponse,
LoadStrikeRunner,
LoadStrikeScenario,
LoadStrikeSimulation
} = require("@loadstrike/loadstrike-sdk");
(async () => {
const scenario = LoadStrikeScenario
.create("submit-orders", async () => LoadStrikeResponse.ok("200"))
.withLoadSimulations(LoadStrikeSimulation.inject(10, 1, 20));
await LoadStrikeRunner
.registerScenarios(scenario)
.withReportFolder("./reports")
.withReportFormats("html", "csv", "txt", "md")
.withReportingInterval(5)
.withRunnerKey("rkl_your_local_runner_key")
.run();
})();
Reporting methods and related config
Sets the output folder for generated report files.
Overrides the default base file name. When omitted or blank, LoadStrike uses {TestSuite}_{TestName}_{yyyyMMdd_HHmmss} with the timestamp taken from the run's created UTC time.
Selects any combination of Html, Csv, Txt, and Md. Generated local report files always use LF line endings.
Controls realtime snapshot cadence for sinks and other reporting flows during execution.
Disables local report file generation for the run.
Returns the full LoadStrikeRunResult artifact, which is the same payload that powers local report files and final sink callbacks.
The final result exposes these richer report-facing members directly, and SDKs that support compatibility aliases also expose their PascalCase equivalents over the same underlying data.
LoadStrike always builds the full run result internally and sends it to report generation plus SaveRunResult in custom sinks. There is no separate public finalizer hook to enable this behavior.
Config equivalents for the same report-output controls.
If you do not set a file name, LoadStrike uses {TestSuite}_{TestName}_{yyyyMMdd_HHmmss}, where the UTC timestamp comes from the run's created time. Explicit names keep spaces and trailing dots. Only invalid filename characters are sanitized, and generated report files use LF line endings.