Download Reportworq
⬇ Guide PDF

Profile and stress-test a campaign#

Campaign profiling answers two capacity questions before a campaign goes live: how much server memory does a form cost, and what will contributors actually experience when many of them fill forms at the same time. It is a diagnostics screen on the Campaign Dashboard, not part of the contributor experience.

The screen has three tabs, each a self-contained tool:

Tab Answers How it works
Memory profiling How much memory does this form cost the server? Opens the form in an isolated worker on the server and measures its footprint. Read-only.
Stress testing Will the deployment hold up under real load? Builds plan files for the rw-stress-runner, a separate tool that drives real browsers as virtual contributors.
Analysis What did contributors experience? Reads the result files the runner produced and reports the timings in plain language.

The worked example throughout is a Q3 budget round with two forms, North America Budget and EMEA Budget.

Before you start#

Open Campaign profiling#

  1. Open the campaign's Campaign Dashboard.
  2. On the dashboard toolbar, select Campaign profiling.

The screen opens on the Memory profiling tab. It profiles the forms you had selected in the dashboard, or every form in the campaign when nothing is selected. The breadcrumb reads Workspace ▸ Campaign ▸ Profiling; select Close to return to the dashboard.

To jump straight to memory profiling for a single form, open that form's Actions menu and select Profile Memory. The screen opens on the Memory profiling tab with only that form selected; you can add more.

The Campaign profiling toolbar button on the Campaign Dashboard
The Campaign profiling toolbar button on the Campaign DashboardTap or click the image to view it full screen

Memory profiling#

Memory profiling opens a form in an isolated, out-of-process worker on the server and measures its memory footprint, so you can change a form and see the effect on cost. It is not a user simulation; that is the Stress testing tab. It is read-only: nothing is saved, and no workflow or form status changes.

Run a profile#

  1. Under Forms to profile, select one or more forms from the dropdown. The number you pick sets the mode:
    • One form gives a detailed per-form footprint measured over several cycles.
    • Several forms profiles them all open at once, to measure the marginal cost of each additional form.
  2. Set the run options:
    • For a single form, set Cycles (1 to 10, default 3). Each cycle opens, measures, and closes the form; the first cycle is a warm-up and is excluded from the averages.
    • For several forms, set Max concurrent (0 opens every selected form).
    • Flip through sheets and Enter sample data exercise the form the way a contributor would. Both are on by default; leaving them on gives a more realistic footprint.
  3. Select Run memory profile. The worker profiles on the server while the button shows progress.
  4. To keep the numbers, select Download CSV or Download JSON.
The Memory profiling tab with the forms picker and run options
The Memory profiling tab with the forms picker and run optionsTap or click the image to view it full screen

Read a single-form profile#

The Per-form memory footprint card leads with the numbers that matter:

Below the stats, an estimate reads ~N of this form open at once on the profiling machine, derived from the free memory on the profiling machine (using 80% of it, divided by the average peak per form). Treat it as indicative: real capacity depends on the server and the worker pool. The Form & run facts and Per-cycle detail cards give the underlying sizing and the raw per-cycle measurements.

Read a multi-form profile#

When several forms are profiled together, the Forms open together card reports Forms held open, the Marginal cost per form (the true cost of each additional concurrent form, after the first), the First form cost (which includes one-time warm-up), and the Machine memory peak. The Ramp table shows memory climbing as each form opens.

If a form cannot be opened, most often because its generated workbook has not been created yet or its saved copy is empty, it is listed under Skipped, with the reason, and the rest are profiled normally.

Stress testing#

Stress testing measures the live contributor experience under load. The screen here builds the plan files; the load itself is generated by the rw-stress-runner, a separate executable that drives real browsers as virtual contributors. Each virtual contributor signs in, opens a form, reads it, and fills it in one cell at a time at human pace, the same path a real contributor takes, which is what actually stresses the server.

Stress tests change campaign data. The runner edits values and submits forms as real contributors, so it changes campaign state. Always run a stress test against a disposable campaign, reset the campaign before every run, and never point a stress test at a production campaign.

The Stress testing tab: the disposable-campaign warning and the Windows runner download
The Stress testing tab: the disposable-campaign warning and the Windows runner downloadTap or click the image to view it full screen

Prepare these three things before you build a plan:

Get the runner#

  1. On the Stress testing tab, under Get the runner, download the rw-stress-runner for Windows and copy it to each load-generator machine.

  2. On each machine, confirm the .NET 10 runtime is installed.

  3. Install the browser once per machine:

    rw-stress-runner.exe install-browser
    

If the download links are absent, the runner was not bundled in this build; an administrator can publish it from the Reportworq.Contribution.StressRunner project and place the kits where the app serves them.

Build the plan files#

  1. Fill in Plan setup:
    • Target URL is the deployment under test. It defaults to this server's address.
    • Test-user name and Test-user password are the dedicated stress-test user's login. The runner types these into the login form on each node.
    • Nodes (machines) is required. One plan file is produced per node. The forms are partitioned across the nodes; each form runs on exactly one node, because a form allows only one editor at a time.
    • Concurrent forms / node sets how many forms a single machine opens at once (default 10).
  2. Set the Editor pace slider. It scales every human pause and the ramp-up together, so the same plan can finish in minutes (toward Fast) or run for an hour or more (toward Slow & deliberate). The Estimated run time updates live as you slide.
  3. Optionally open Advanced settings. The defaults are tuned for a realistic run:
    • Cells to fill (%) is the share of each form's input cells a user fills, as a range (default 50 to 75).
    • Submitters (%) is the share of users who submit rather than close (default 25, applies when Submit form is on).
    • The switches turn individual behaviors on or off: Fill in cells, Spread (bulk), Add comments, Recalculate, Change sheets, and Submit form.
  4. Select Compute sizing & build plans. Reportworq measures each form and partitions the work into node plans.
  5. Review the Nodes and Form sizing tables, then select Download N plan file(s). The download is a .zip of one node-N.json per machine, plus a README.txt with the run steps.
Plan setup with the test-user fields, node counts, the editor-pace slider with its live estimate, and the advanced settings
Plan setup with the test-user fields, node counts, the editor-pace slider with its live estimate, and the advanced settingsTap or click the image to view it full screen

Run the stress test#

On each load-generator machine:

  1. Copy the runner and that machine's single plan file to it.

  2. Run the node plan:

    rw-stress-runner.exe run --plan node-1.json
    
  3. Launch every node at about the same time.

Each node writes node-N.result.json, .csv, and .md. Keep the node-*.result.json files; you upload them to the Analysis tab.

When you launch a run from a terminal, the runner asks two questions it does not read from the plan: whether to open the browsers so you can watch them (default is headless, which is best for a real run), and, for single sign-on, it opens a browser for you to sign in once. For a stress test that uses SSO/OIDC instead of a password, turn on the plan's SSO option and leave the passwords blank; each node prompts you to sign in when the run starts.

Analysis#

The Analysis tab turns the node result files into one consolidated benchmark and describes, in plain language and in seconds, what contributors experienced.

Load the results#

  1. On the Analysis tab, select Choose result files (.json).
  2. Select every node-*.result.json file the run produced, from all machines, at once. They are merged into a single benchmark. Files that are not readable node results are skipped and counted.
The Analysis tab after uploading node result files
The Analysis tab after uploading node result filesTap or click the image to view it full screen

Read the report#

The experience table, the At a glance chart, and the per-form breakdown
The experience table, the At a glance chart, and the per-form breakdownTap or click the image to view it full screen

For the full percentile breakdown and every raw measurement, select Download details (Excel). The workbook has separate sheets for the summary, the full timings (min, mean, p50, p90, p95, p99, max), the per-form numbers, the findings, and every raw sample. Download JSON exports the consolidated benchmark.

Notes and limits#

Feedback on this page

Comments, questions, requests, or something missing or unclear? Email us - the page you are on is filled in for you.

Email feedback on this page

Or write to support@reportworq.com directly.