@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.
- package/README.md +52 -19
- package/dist/api.js +70 -18
- package/dist/cli.js +34 -6
- package/dist/commands/analyze.js +118 -0
- package/dist/commands/capacity.js +99 -0
- package/dist/commands/docs.js +57 -0
- package/dist/commands/files.js +18 -4
- package/dist/commands/plan.js +100 -0
- package/dist/commands/record.js +11 -1
- package/dist/commands/results.js +13 -7
- package/dist/commands/schema.js +86 -0
- package/dist/commands/skills.js +111 -0
- package/dist/commands/tests.js +73 -0
- package/dist/docs/agent-setup.md +109 -0
- package/dist/docs/agent-tasks.md +169 -0
- package/dist/docs/ai-agents.md +90 -0
- package/dist/docs/auth.md +74 -0
- package/dist/docs/automation.md +150 -0
- package/dist/docs/ci.md +105 -0
- package/dist/docs/clusters.md +48 -0
- package/dist/docs/commands.md +155 -0
- package/dist/docs/files.md +86 -0
- package/dist/docs/generators.md +52 -0
- package/dist/docs/getting-started.md +85 -0
- package/dist/docs/index.json +110 -0
- package/dist/docs/projects.md +50 -0
- package/dist/docs/recorder.md +143 -0
- package/dist/docs/results.md +79 -0
- package/dist/docs/running.md +80 -0
- package/dist/docs/skills.md +88 -0
- package/dist/docs/test-plans.md +92 -0
- package/dist/docs/troubleshooting.md +79 -0
- package/dist/plan.js +250 -0
- package/dist/skills/AGENTS.md +70 -0
- package/dist/skills/atlas-analyze/SKILL.md +104 -0
- package/dist/skills/atlas-correlate/SKILL.md +89 -0
- package/dist/skills/atlas-load-test/SKILL.md +154 -0
- package/dist/skills/atlas-record/SKILL.md +167 -0
- package/dist/skills/atlas-run/SKILL.md +109 -0
- package/dist/skills/atlas-test-plan/SKILL.md +281 -0
- 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.
|