@cloudbeat/atlas-cli 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +52 -19
  2. package/dist/api.js +70 -18
  3. package/dist/cli.js +34 -6
  4. package/dist/commands/analyze.js +118 -0
  5. package/dist/commands/capacity.js +99 -0
  6. package/dist/commands/docs.js +57 -0
  7. package/dist/commands/files.js +18 -4
  8. package/dist/commands/plan.js +100 -0
  9. package/dist/commands/record.js +11 -1
  10. package/dist/commands/results.js +13 -7
  11. package/dist/commands/schema.js +86 -0
  12. package/dist/commands/skills.js +111 -0
  13. package/dist/commands/tests.js +73 -0
  14. package/dist/docs/agent-setup.md +109 -0
  15. package/dist/docs/agent-tasks.md +169 -0
  16. package/dist/docs/ai-agents.md +90 -0
  17. package/dist/docs/auth.md +74 -0
  18. package/dist/docs/automation.md +150 -0
  19. package/dist/docs/ci.md +105 -0
  20. package/dist/docs/clusters.md +48 -0
  21. package/dist/docs/commands.md +155 -0
  22. package/dist/docs/files.md +86 -0
  23. package/dist/docs/generators.md +52 -0
  24. package/dist/docs/getting-started.md +85 -0
  25. package/dist/docs/index.json +110 -0
  26. package/dist/docs/projects.md +50 -0
  27. package/dist/docs/recorder.md +143 -0
  28. package/dist/docs/results.md +79 -0
  29. package/dist/docs/running.md +80 -0
  30. package/dist/docs/skills.md +88 -0
  31. package/dist/docs/test-plans.md +92 -0
  32. package/dist/docs/troubleshooting.md +79 -0
  33. package/dist/plan.js +250 -0
  34. package/dist/skills/AGENTS.md +70 -0
  35. package/dist/skills/atlas-analyze/SKILL.md +104 -0
  36. package/dist/skills/atlas-correlate/SKILL.md +89 -0
  37. package/dist/skills/atlas-load-test/SKILL.md +154 -0
  38. package/dist/skills/atlas-record/SKILL.md +167 -0
  39. package/dist/skills/atlas-run/SKILL.md +109 -0
  40. package/dist/skills/atlas-test-plan/SKILL.md +281 -0
  41. package/package.json +5 -3
@@ -0,0 +1,155 @@
1
+ # Commands
2
+
3
+ Every command takes `--json`, and `-p, --project <name>` where a project
4
+ applies. Run `atlas <command> --help` for the full list of options. A failure
5
+ under `--json` prints the error as JSON on standard error.
6
+
7
+ ## Overview
8
+
9
+ | Command | What it does |
10
+ |---|---|
11
+ | `atlas login` | sign in with a password or an API token |
12
+ | `atlas logout` | forget the stored credential |
13
+ | `atlas whoami` | show who you're signed in as |
14
+ | `atlas projects` | list the projects you can access |
15
+ | `atlas files list` | list a project's files |
16
+ | `atlas files upload <files...>` | upload test plans and data files |
17
+ | `atlas files download <filename>` | download one file |
18
+ | `atlas files rm <filename>` | delete a file |
19
+ | `atlas run` | start a test |
20
+ | `atlas status <testId>` | check whether a test is still running |
21
+ | `atlas results <testId>` | show the aggregation report |
22
+ | `atlas stop <testId>` | stop a running test |
23
+ | `atlas tests` | list a project's recent runs |
24
+ | `atlas timeseries <testId>` | active users, response time and error rate over time |
25
+ | `atlas errors <testId>` | the distinct errors a test produced |
26
+ | `atlas capacity` | what you can run on: machines, clusters and usage limits |
27
+ | `atlas plan check [file]` | check a test plan will run and report before you use it |
28
+ | `atlas record [url]` | record a browser session |
29
+ | `atlas schema` | describe every command and option (for scripts and AI agents) |
30
+ | `atlas skills list` / `install` | install the AI-assistant guidance into your project |
31
+ | `atlas docs [topic]` | read the documentation without leaving the terminal |
32
+ | `atlas config get` / `set` | default instance URL and project |
33
+
34
+ ## Files
35
+
36
+ ```sh
37
+ atlas files upload -p SHOP ./checkout.jmx ./data/users.csv
38
+ atlas files list -p SHOP
39
+ atlas files download -p SHOP checkout.jmx
40
+ atlas files rm -p SHOP old-data.csv --yes
41
+ ```
42
+
43
+ Uploading a file whose name already exists replaces it. `rm` asks for
44
+ confirmation, and refuses without `--yes` when there is no terminal — so a
45
+ pipeline can't delete a file by accident.
46
+
47
+ See [Test Files](/guide/test-files) for how files are laid out and divided
48
+ between machines.
49
+
50
+ ## Running
51
+
52
+ ```sh
53
+ atlas run -p SHOP --jmx checkout.jmx --servers 5 --wait
54
+ ```
55
+
56
+ | Option | Meaning |
57
+ |---|---|
58
+ | `--servers <n>` | use any n available load generators |
59
+ | `--server <name>` | pick one by name; repeat for several |
60
+ | `--cluster <name> --units <n>` | run on n units in a cluster |
61
+ | `--jmx <filename>` | which plan to run (needed only if the project holds more than one) |
62
+ | `--args "<jmeter args>"` | extra JMeter arguments |
63
+ | `--no-split` | send whole data files to every machine |
64
+ | `--wait` | follow the run and print the report at the end |
65
+ | `--timeout <duration>` | how long `--wait` waits, e.g. `30m` (default `2h`) |
66
+ | `--gate <thresholds>` | fail on a threshold breach — see [Running in CI](/cli/ci) |
67
+ | `--junit <file>` | write a JUnit report |
68
+
69
+ Without `--wait` the command returns as soon as the test is submitted and prints
70
+ the test ID.
71
+
72
+ ## Checking on a run
73
+
74
+ ```sh
75
+ atlas status SHOP-20260818-194201
76
+ atlas results SHOP-20260818-194201
77
+ atlas results SHOP-20260818-194201 --json
78
+ atlas stop SHOP-20260818-194201
79
+ ```
80
+
81
+ `results` prints the aggregation report — one row per request, plus totals.
82
+
83
+ `stop` reports what actually happened rather than always claiming success. If a
84
+ machine couldn't be reached, it says so and the run stays open, so a test can't
85
+ keep running unnoticed.
86
+
87
+ ## Checking a test plan
88
+
89
+ ```sh
90
+ atlas plan check ./checkout.jmx -p SHOP # a local file, against the project
91
+ atlas plan check -p SHOP --jmx checkout.jmx # the plan already in the project
92
+ ```
93
+
94
+ Catches the problems that otherwise show up as an empty dashboard after the run:
95
+ a data file the plan reads but the project doesn't have, a plan Atlas can't
96
+ attach its reporting to, a structure broken by hand-editing, or no enabled thread
97
+ group. It exits non-zero when the plan wouldn't produce results, so CI can stop
98
+ before spending machine time.
99
+
100
+ It also tells you whether the plan's user count can be set at run time, and
101
+ reports the things Atlas fixes for you — data-file paths from another machine,
102
+ and GUI listeners left switched on.
103
+
104
+ ## Analysing a run
105
+
106
+ ```sh
107
+ atlas tests -p SHOP --limit 10 # recent runs, newest first
108
+ atlas timeseries SHOP-20260818-194201 # users, response time and errors over time
109
+ atlas errors SHOP-20260818-194201 # every distinct error, with its share
110
+ atlas errors SHOP-20260818-194201 --full --label "01.01 /home"
111
+ ```
112
+
113
+ `timeseries` shows the shape of a run — where users peaked and where response
114
+ times started to climb. `errors` shows one row per distinct failure with the
115
+ request and response behind it, which is usually enough to tell a broken test
116
+ plan from a struggling application.
117
+
118
+ ## What you can run on
119
+
120
+ ```sh
121
+ atlas capacity
122
+ ```
123
+
124
+ Machines and clusters available to you, how many are free, and how much of your
125
+ usage allowance is left. Worth checking before sizing a large test.
126
+
127
+ ## AI assistants
128
+
129
+ ```sh
130
+ atlas skills list # what this version carries
131
+ atlas skills install # into this project (.claude/skills/ + AGENTS.md)
132
+ atlas skills install --user # for every project on this machine
133
+ atlas skills install --force # replace files you have already edited
134
+ ```
135
+
136
+ Installs the guidance an AI coding assistant needs to drive Atlas properly.
137
+ See [Atlas for AI Agents](/agents/) for what that enables, and
138
+ [Setting It Up](/agents/setup) for the details.
139
+
140
+ ## Recording
141
+
142
+ ```sh
143
+ atlas record https://example.com -o flow.jmx
144
+ atlas record https://example.com -o flow.jmx --upload -p SHOP
145
+ ```
146
+
147
+ | Option | Meaning |
148
+ |---|---|
149
+ | `-o, --out <file>` | output file (an existing plan is added to, not replaced) |
150
+ | `-n, --name <name>` | name for the recorded scenario |
151
+ | `--cookies <file>` | preload cookies to skip a login step |
152
+ | `--profile <dir>` | reuse a browser profile for a persistent session |
153
+ | `--upload -p <project>` | upload the finished plan into a project |
154
+
155
+ See [Recorder](/recorder/).
@@ -0,0 +1,86 @@
1
+ # Test Files
2
+
3
+ A project holds your test plan and every data file it reads. Upload them
4
+ whenever they change — this is independent of running a test, and files stay in
5
+ the project until you replace or delete them.
6
+
7
+ ## Uploading
8
+
9
+ From the **Files** tab, upload the `.jmx` and its data files. From the CLI:
10
+
11
+ ```bash
12
+ atlas files upload -p SHOP ./checkout.jmx ./data/users.csv ./data/products.csv
13
+ ```
14
+
15
+ Uploading a file whose name already exists **replaces** it.
16
+
17
+ ## How files are laid out
18
+
19
+ **All of a project's files live together in one flat folder.** There are no
20
+ subdirectories: whatever you upload lands side by side, and when a test runs,
21
+ the test plan and its data files sit in the same directory on every load
22
+ generator.
23
+
24
+ So reference data files from your plan by a plain relative path:
25
+
26
+ ```
27
+ ./users.csv ✅ recommended
28
+ users.csv ✅ also works
29
+ ```
30
+
31
+ Not by an absolute path, and not through a folder:
32
+
33
+ ```
34
+ C:\Users\me\Data\users.csv ❌ a Windows path cannot be found on a Linux generator
35
+ /home/me/data/users.csv ❌ absolute paths won't exist there either
36
+ ./data/users.csv ❌ the folder structure is not preserved
37
+ ```
38
+
39
+ If a data file path can't be resolved, every thread in that thread group throws
40
+ before issuing a single request. There are no failed samples, so the summary
41
+ shows `0.00%` errors and the dashboard simply **omits that thread group** while
42
+ the others look healthy.
43
+
44
+ If a thread group is missing from your results, this is the first thing to check.
45
+
46
+ ## How data files are divided
47
+
48
+ When a test runs on several machines, Atlas **divides** your data files between
49
+ them rather than giving every machine the whole file. With 1,000 rows across 5
50
+ generators, each gets roughly 200 rows, and no two machines use the same row.
51
+
52
+ This is what you usually want: a load test where 5 machines all replay the same
53
+ 200 users isn't testing what you think it is.
54
+
55
+ **Header rows are handled for you.** If your plan's CSV Data Set Config says the
56
+ file has a header, that header is copied to every machine's slice and only the
57
+ data rows are divided.
58
+
59
+ Files are divided byte for byte — column order, quoting, embedded commas and
60
+ newlines all survive exactly as uploaded.
61
+
62
+ To switch dividing off and send whole files to every machine, use `--no-split`
63
+ (CLI) or clear the split option on the Run Test tab.
64
+
65
+ `.csv` and `.txt` files are divided. `.jmx` and everything else is copied whole
66
+ to every machine.
67
+
68
+ ## Downloading and deleting
69
+
70
+ ```bash
71
+ atlas files list -p SHOP
72
+ atlas files download -p SHOP checkout.jmx
73
+ atlas files rm -p SHOP old-data.csv
74
+ ```
75
+
76
+ In the web interface, the Files tab has a download and a delete action per file.
77
+
78
+ ## Before your first run
79
+
80
+ - Every file the plan references must actually be uploaded. Upload the plan and
81
+ its data files together.
82
+ - Disable GUI listeners left switched on in the plan — **View Results Tree**,
83
+ **Aggregate Report**, **Simple Data Writer**. They eat memory during a headless
84
+ run, and Atlas collects results separately.
85
+
86
+ Full details in [Test Plan Requirements](/reference/test-plans).
@@ -0,0 +1,52 @@
1
+ # Load Generators
2
+
3
+ A **load generator** is a machine that runs JMeter and produces load. Atlas
4
+ copies your test plan to each one and starts them together.
5
+
6
+ Most teams share a pool that is already set up — in that case you can skip this
7
+ section entirely and just pick machines when you [run a test](/guide/running-tests).
8
+
9
+ Read on if you need to add machines of your own.
10
+
11
+ ## Two kinds
12
+
13
+ | | |
14
+ |---|---|
15
+ | **Servers** | Fixed machines that exist whether or not a test is running. Cloud VMs Atlas can power on and off, or your own hardware. |
16
+ | **Clusters** | Elastic capacity. Units are created when a test starts and destroyed when it ends. |
17
+
18
+ Both appear under **Fleet** in the sidebar, on separate tabs.
19
+
20
+ ## Why run your own?
21
+
22
+ The usual reason is that your application isn't reachable from the internet.
23
+ A load generator inside your own network can reach it, and only needs an
24
+ **outbound** connection to Atlas — no inbound access, no firewall changes, no
25
+ VPN.
26
+
27
+ The other reason is geography: generating load from where your users actually
28
+ are gives you a more honest number.
29
+
30
+ ## Power state
31
+
32
+ Machines Atlas can control are **powered on when a test needs them and switched
33
+ off when it ends**, so you don't pay for idle capacity. This is why a switched-off
34
+ machine can still be selected on the Run Test tab.
35
+
36
+ Machines Atlas can't power — your own hardware — are assumed to be always on and
37
+ are never powered off.
38
+
39
+ ## Status
40
+
41
+ The Fleet page shows two independent things per machine:
42
+
43
+ - whether the **machine** is on or off
44
+ - whether its **connection** to Atlas is live
45
+
46
+ A machine can be on but not connected, which usually means the agent isn't
47
+ running. See [Troubleshooting](/reference/troubleshooting).
48
+
49
+ ## Next
50
+
51
+ - [Adding a Machine](/generators/adding)
52
+ - [Clusters](/generators/clusters)
@@ -0,0 +1,85 @@
1
+ # Getting Started
2
+
3
+ This walks through one complete test: uploading a plan, running it, and reading
4
+ the result. It should take a few minutes.
5
+
6
+ ## Sign in
7
+
8
+ Open your Atlas instance and go to **/app** — for a typical installation that
9
+ is [atlas.cloudbeat.io/app](https://atlas.cloudbeat.io/app). Sign in with
10
+ your email address and password.
11
+
12
+ If you have access to more than one account, you'll be asked which to work in.
13
+ You can switch later from the account selector in the sidebar.
14
+
15
+ ## Open a project
16
+
17
+ A **project** holds your test plan, its data files, and the history of every run.
18
+ Pick one from **Projects** in the sidebar, or ask your administrator to create
19
+ one if the list is empty.
20
+
21
+ The project page has three tabs:
22
+
23
+ | Tab | What it holds |
24
+ |---|---|
25
+ | **Results** | Every run of this project, newest first |
26
+ | **Files** | The test plan and data files |
27
+ | **Run Test** | Start a new run |
28
+
29
+ ## Upload your test plan
30
+
31
+ Go to **Files** and upload your `.jmx` along with every data file it reads.
32
+
33
+ Test plans written in JMeter on Windows usually reference data files by a full
34
+ `C:\...\data.csv` path, which does not exist on a load generator. Open each
35
+ **CSV Data Set Config** and reduce the filename to `./data.csv`.
36
+
37
+ If a path can't be found at run time, every thread in that thread group stops
38
+ before sending a single request — the test appears to run, but that group
39
+ reports nothing at all. See [Test Plan Requirements](/reference/test-plans).
40
+
41
+ ## Run it
42
+
43
+ Go to **Run Test**, choose where to run:
44
+
45
+ - **Servers** — pick individual load generators. Machines that are switched off
46
+ can still be selected; they are powered on for you.
47
+ - **Cluster** — run on a cluster and say how many units you want.
48
+
49
+ If the project holds more than one `.jmx`, pick which one to run. Then press
50
+ **Run**.
51
+
52
+ You do not need to deploy or prepare anything first. Atlas reserves the
53
+ machines, copies your files, and starts JMeter.
54
+
55
+ ## Watch it run
56
+
57
+ The page switches to a live view showing each stage — powering on, deploying,
58
+ then running — with a **Stop** button.
59
+
60
+ Once results start arriving, open the dashboard for the run from the **Results**
61
+ tab. You'll see:
62
+
63
+ - **Active users**, **response time** and **error rate** on one chart
64
+ - Headline numbers: duration, peak users, requests per second, average response
65
+ time, error rate
66
+ - A per-request table you can sort and drill into
67
+
68
+ The dashboard updates itself while the test runs. See
69
+ [Reading Results](/guide/results) for what each number means.
70
+
71
+ ## Stop it, or let it finish
72
+
73
+ A test ends on its own when the plan says so — a thread group's duration or loop
74
+ count running out. Press **Stop** to end it early.
75
+
76
+ When a run finishes, the load generators are released and any that Atlas powered
77
+ on are switched off again.
78
+
79
+ ## Next steps
80
+
81
+ - [Running a Test](/guide/running-tests) — all the options, and how data files
82
+ are divided between machines
83
+ - [Reading Results](/guide/results) — the dashboard in detail
84
+ - [CLI](/cli/install) — do all of this from a terminal or a CI pipeline
85
+ - [Recorder](/recorder/) — generate a test plan by clicking through your app
@@ -0,0 +1,110 @@
1
+ [
2
+ {
3
+ "topic": "getting-started",
4
+ "title": "Getting Started",
5
+ "summary": "This walks through one complete test: uploading a plan, running it, and reading the result. It should take a few minutes.",
6
+ "source": "guide/getting-started.md"
7
+ },
8
+ {
9
+ "topic": "projects",
10
+ "title": "Projects",
11
+ "summary": "A project is the unit everything else hangs off. It holds:",
12
+ "source": "guide/projects.md"
13
+ },
14
+ {
15
+ "topic": "files",
16
+ "title": "Test Files",
17
+ "summary": "A project holds your test plan and every data file it reads. Upload them whenever they change — this is independent of running a test, and files stay in the project until you replace or delete them.",
18
+ "source": "guide/test-files.md"
19
+ },
20
+ {
21
+ "topic": "running",
22
+ "title": "Running a Test",
23
+ "summary": "Open a project, go to **Run Test**, choose where to run, and press **Run**.",
24
+ "source": "guide/running-tests.md"
25
+ },
26
+ {
27
+ "topic": "results",
28
+ "title": "Reading Results",
29
+ "summary": "Every run has a dashboard. Open it from a project's **Results** tab, or from the test list at `/<project>`.",
30
+ "source": "guide/results.md"
31
+ },
32
+ {
33
+ "topic": "ai-agents",
34
+ "title": "Atlas for AI Agents",
35
+ "summary": "**Describe the test. Let the agent build it.**",
36
+ "source": "agents/index.md"
37
+ },
38
+ {
39
+ "topic": "agent-setup",
40
+ "title": "Setting It Up",
41
+ "summary": "Two commands to install, one to sign in. The guidance is bundled with the CLI, so there is nothing to download separately and nothing to keep in sync by hand.",
42
+ "source": "agents/setup.md"
43
+ },
44
+ {
45
+ "topic": "agent-tasks",
46
+ "title": "What an Agent Can Do",
47
+ "summary": "The whole lifecycle, from an empty project to a report you can send someone. Each section below is a real thing to ask for, what the agent does about it, and what it should ask you along the way.",
48
+ "source": "agents/capabilities.md"
49
+ },
50
+ {
51
+ "topic": "skills",
52
+ "title": "The Skills",
53
+ "summary": "`atlas skills install` writes six skills plus a vendor-neutral `AGENTS.md`. Each skill is a short document covering one part of load testing: what to do, in what order, and which mistakes to avoid.",
54
+ "source": "agents/skills.md"
55
+ },
56
+ {
57
+ "topic": "automation",
58
+ "title": "Building Your Own Integration",
59
+ "summary": "The same surfaces the bundled skills use are there for your own scripts, bots and agents. No SDK, no separate API client: the CLI is the integration point, and everything it does is scriptable.",
60
+ "source": "agents/automation.md"
61
+ },
62
+ {
63
+ "topic": "generators",
64
+ "title": "Load Generators",
65
+ "summary": "A **load generator** is a machine that runs JMeter and produces load. Atlas copies your test plan to each one and starts them together.",
66
+ "source": "generators/index.md"
67
+ },
68
+ {
69
+ "topic": "clusters",
70
+ "title": "Clusters",
71
+ "summary": "A **cluster** is elastic capacity: instead of fixed machines that sit there between tests, units are created when a test starts and destroyed when it ends.",
72
+ "source": "generators/clusters.md"
73
+ },
74
+ {
75
+ "topic": "recorder",
76
+ "title": "Recording a Scenario",
77
+ "summary": "If you don't have a JMeter test plan yet, the recorder makes one by watching you use your application. You click through a flow in a real browser — log in, search, check out — and it writes a `.jmx` you can run as a load test.",
78
+ "source": "recorder/index.md"
79
+ },
80
+ {
81
+ "topic": "commands",
82
+ "title": "Commands",
83
+ "summary": "Every command takes `--json`, and `-p, --project <name>` where a project applies. Run `atlas <command> --help` for the full list of options. A failure under `--json` prints the error as JSON on standard error.",
84
+ "source": "cli/commands.md"
85
+ },
86
+ {
87
+ "topic": "auth",
88
+ "title": "Signing In",
89
+ "summary": "You'll be prompted for your password. The session lasts **8 hours**.",
90
+ "source": "cli/authentication.md"
91
+ },
92
+ {
93
+ "topic": "ci",
94
+ "title": "Running in CI",
95
+ "summary": "The point of running Atlas from CI is to catch a performance regression the same way you catch a failing unit test — automatically, on the build that caused it.",
96
+ "source": "cli/ci.md"
97
+ },
98
+ {
99
+ "topic": "test-plans",
100
+ "title": "Test Plan Requirements",
101
+ "summary": "Atlas runs standard JMeter test plans, but a plan written on a desktop needs a few changes before it runs correctly on a fleet of Linux load generators. These are the things that actually catch people out.",
102
+ "source": "reference/test-plans.md"
103
+ },
104
+ {
105
+ "topic": "troubleshooting",
106
+ "title": "Troubleshooting",
107
+ "summary": "The usual cause is a **data file path that can't be resolved**. Every thread in that group fails before sending a request, so there are no errors to report — the group simply isn't there.",
108
+ "source": "reference/troubleshooting.md"
109
+ }
110
+ ]
@@ -0,0 +1,50 @@
1
+ # Projects
2
+
3
+ A project is the unit everything else hangs off. It holds:
4
+
5
+ - one or more **test plans** (`.jmx`)
6
+ - the **data files** those plans read
7
+ - the **history** of every run, with its results
8
+
9
+ Projects are also how access is granted: you see the projects you have been
10
+ given access to, and nothing else.
11
+
12
+ ## The project page
13
+
14
+ ### Results
15
+
16
+ Every run of this project, newest first. Each row shows when it started, how
17
+ long it ran, and the peak number of concurrent users it reached. Click a run to
18
+ open its dashboard.
19
+
20
+ You can give a run a **name** — click the name cell and type. This is worth
21
+ doing when you run variations against each other, since `SHOP-20260818-194201`
22
+ tells you when a run happened but not what it was for. "Baseline, 500 users" is
23
+ easier to find three weeks later.
24
+
25
+ ### Files
26
+
27
+ Upload, download and delete the project's files. See
28
+ [Test Files](/guide/test-files).
29
+
30
+ ### Run Test
31
+
32
+ Start a run. See [Running a Test](/guide/running-tests).
33
+
34
+ ## Choosing which plan runs
35
+
36
+ A project can hold several test plans. One of them is the project's **default** —
37
+ the one used when you don't say otherwise.
38
+
39
+ When a project holds more than one `.jmx`, the Run Test tab shows a dropdown to
40
+ pick between them, and remembers your last choice for that project. From the
41
+ CLI, pass `--jmx`:
42
+
43
+ ```bash
44
+ atlas run -p SHOP --jmx checkout-peak.jmx --servers 5
45
+ ```
46
+
47
+ ## Creating a project
48
+
49
+ Projects are created by administrators. If you need one, ask — you'll need to
50
+ say which account it belongs to, since that determines who can see it.
@@ -0,0 +1,143 @@
1
+ # Recording a Scenario
2
+
3
+ If you don't have a JMeter test plan yet, the recorder makes one by watching you
4
+ use your application. You click through a flow in a real browser — log in,
5
+ search, check out — and it writes a `.jmx` you can run as a load test.
6
+
7
+ ## Install
8
+
9
+ ```sh
10
+ npm install -g @cloudbeat/atlas-recorder
11
+ ```
12
+
13
+ This downloads a private browser build (a few hundred MB) used for capture. It
14
+ won't touch the browsers you already have. Requires Node.js 18 or newer.
15
+
16
+ It's a separate package from the CLI because CI machines run tests but never
17
+ record them.
18
+
19
+ ## Record
20
+
21
+ ```sh
22
+ atlas-rec record https://example.com -o checkout.jmx -n "Checkout"
23
+ ```
24
+
25
+ Or through the CLI, which can upload the result straight into a project:
26
+
27
+ ```sh
28
+ atlas record https://example.com -o checkout.jmx --upload -p SHOP
29
+ ```
30
+
31
+ A browser window opens with a small control panel in the corner. Click through
32
+ your flow, then press **Stop**.
33
+
34
+ Your recording is saved when you press Stop, when you close the window, and on
35
+ Ctrl+C — closing the window by mistake won't lose it.
36
+
37
+ ## What you get
38
+
39
+ Each thing you do — a click, a form submit, a page change — becomes a labelled
40
+ **transaction**, with the requests it triggered grouped underneath. A report then
41
+ tells you "Checkout took 3.2s" rather than just listing URLs.
42
+
43
+ While recording you can:
44
+
45
+ - **rename** a transaction so the report reads in your language, not the app's URLs
46
+ - **➕ New** to start a new transaction before you click, when one page holds two
47
+ steps worth measuring separately
48
+ - expand a transaction and **exclude** or **delete** individual requests
49
+ - **⏸ Pause** while you set something up you don't want recorded
50
+
51
+ ## What's kept, and what isn't
52
+
53
+ **Kept:** the requests your application makes — pages, API calls, form posts.
54
+
55
+ **Skipped:** images, stylesheets, fonts and known analytics traffic. These
56
+ inflate a load test without telling you anything about your application. Include
57
+ one from the control panel if you need it.
58
+
59
+ ## Dynamic values are handled
60
+
61
+ If a request sends something it was given earlier — a CSRF token, a session ID,
62
+ an item ID from a search result — the recorder finds where that value came from
63
+ and pulls it out of the live response at run time instead of replaying the
64
+ recorded one. Without this, a recorded plan usually fails on the second run,
65
+ when the token has changed.
66
+
67
+ Each of these gets a check attached, so if the value ever stops coming back the
68
+ sample fails loudly rather than quietly posting a stale token.
69
+
70
+ ## Adding to an existing plan
71
+
72
+ Point `-o` at a plan that already exists and the new recording is **added** to it
73
+ as another thread group, leaving what's there untouched. A `.bak` copy is written
74
+ first.
75
+
76
+ ```sh
77
+ atlas-rec record https://example.com -o suite.jmx -n "Checkout"
78
+ atlas-rec record https://example.com -o suite.jmx -n "Search"
79
+ ```
80
+
81
+ ## Recording behind a login
82
+
83
+ **Reuse a signed-in session** — saved when you stop, reloaded next time:
84
+
85
+ ```sh
86
+ atlas-rec record https://app.example.com -o app.jmx --profile ./session.json
87
+ ```
88
+
89
+ **Bring cookies from your own browser** — export them and pass `--cookies`:
90
+
91
+ ```sh
92
+ atlas-rec record https://app.example.com/home -o app.jmx --cookies ./cookies.json
93
+ ```
94
+
95
+ ## Options
96
+
97
+ | Option | Meaning |
98
+ |---|---|
99
+ | `-o, --out <file>` | Where to write. An existing plan is added to; otherwise created |
100
+ | `-n, --name <name>` | Name for the scenario |
101
+ | `-t, --threads <n>` | Number of users — only when creating a new plan |
102
+ | `-l, --loops <n>` | Iterations per user — only when creating a new plan |
103
+ | `--profile <file>` | Save and reuse a signed-in session |
104
+ | `--cookies <file>` | Start already signed in, using exported cookies |
105
+ | `--correlations <file>` | Pin named parameters to a value of your choosing |
106
+ | `--no-correlate` | Replay recorded values as-is |
107
+ | `--no-timestamps` | Keep recorded timestamps instead of using the current time |
108
+
109
+ ## Check the plan before running it at scale
110
+
111
+ The recorder captures a single pass through your app. Anything that only appears
112
+ sometimes — a cookie banner, an A/B variant, a retry — is recorded only if it
113
+ happened while you clicked.
114
+
115
+ When a step redirects, the redirect is followed *and* the destination is recorded
116
+ on its own, so that step can hit the destination twice per iteration. Delete the
117
+ duplicate from the control panel, or from the plan afterwards, if it would skew
118
+ your numbers.
119
+
120
+ **Think-time pauses** are recorded but switched off, so the plan runs flat out
121
+ until you decide otherwise. Enable the `Settings - Sleeps` block in the plan and
122
+ set the durations you want.
123
+
124
+ ## Driven by an agent, or a script
125
+
126
+ A recording does not have to be clicked by a person. The same session can be
127
+ controlled command by command — `snapshot` to see the page, `click`, `fill`,
128
+ `tx new` to name the step that follows — which is how an AI assistant records a
129
+ flow for you, and how a script can automate one.
130
+
131
+ The browser stays visible throughout and your own clicks are recorded too, so
132
+ you can take over for a login and hand it back.
133
+
134
+ ```sh
135
+ atlas-rec start https://shop.example.com -o flow.jmx -n "Checkout"
136
+ atlas-rec snapshot
137
+ atlas-rec tx new "Search"
138
+ atlas-rec click --role button --name "Search"
139
+ atlas-rec stop
140
+ ```
141
+
142
+ See [Your Own Integration](/agents/automation) for the full set, and
143
+ [Atlas for AI Agents](/agents/) to let an assistant do it.