Reporting

Learn how LoadStrike keeps HTML, TXT, CSV, and Markdown reports consistent across the supported SDKs.

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

Sequence diagram showing how a LoadStrike workflow moves from setup to report output.
This page fits into the same setup, run, correlate, and report flow as the rest of the public LoadStrike runtime.

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()
    {
    }
}

Reporting methods and related config

WithReportFolder(path)

Sets the output folder for generated report files.

WithReportFileName(name)

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.

WithReportFormats(formats)

Selects any combination of Html, Csv, Txt, and Md. Generated local report files always use LF line endings.

WithReportingInterval(interval)

Controls realtime snapshot cadence for sinks and other reporting flows during execution.

WithoutReports()

Disables local report file generation for the run.

Run()

Returns the full LoadStrikeRunResult artifact, which is the same payload that powers local report files and final sink callbacks.

ThresholdResults / MetricStats / ScenarioDurationsMs / PluginsData

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.

Automatic result delivery

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.

LoadStrike:ReportFolder / ReportFileName / ReportFormats / ReportingIntervalMs / WithoutReports

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.