adc-locust
adc-locust is a Textual terminal UI for
load-testing the load balancing and content switching behavior of Citrix ADC
(NetScaler) appliances. It reads existing configuration read-only through the
Citrix Nitro API SDK and drives traffic with Locust to confirm
whether load is actually distributed the way the configuration implies.
Full documentation: https://mmackenna.github.io/adc-locust/
Installation
adc-locust is published on PyPI: https://pypi.org/project/adc-locust/
pip install adc-locust
adc-locust
Note:
adc-locustdepends on the Citrix Nitro API SDK (nitro-python), which Citrix does not publish to PyPI. See Vendored dependency below — installing from PyPI requires either the vendored wheel from this repository or your own copy ofnitro-pythoninstalled separately.
Setup (from source)
poetry install
poetry run adc-locust
adc-locust needs Nitro API credentials and the NetScaler address to test,
read from a .env file in the current directory:
NITRO_URL=netscaler.example.com
NITRO_USER=nitro-api-user
NITRO_PASS=change-me
NITRO_VERIFY_TLS=false
Copy .env.example to get started, or just run adc-locust — if no usable
.env is found it walks you through creating one interactively before
loading the vserver list. Use --env-file /path/to/.env or
ADC_LOCUST_ENV_FILE to use a different path. Never commit a real .env
file; it's already excluded in .gitignore.
What it does
- Lists LB vservers on the NetScaler that balance traffic across more than one bound service (read-only Nitro queries).
- Lets you pick one and configure a Locust load test against it — either fairness mode (clears cookies every request, reveals the raw LB algorithm) or persistence mode (keeps cookies, confirms stickiness). Vservers reachable only through Content Switching are automatically routed through their CS vserver.
- Runs Locust headless and reports aggregate stats plus a per-service
traffic delta (via Nitro
service_stats), flagging services that received far less traffic than expected.
See the docs for details, including how content-switched vservers and persistence-vs-fairness modes are handled.
Development
poetry install
poetry run pytest
poetry run ruff check .
poetry run mypy src/adc_locust
poetry run mkdocs build --strict
Vendored dependency
The Nitro Python SDK (nitro-python) is not published on PyPI. Its wheel
is vendored in vendor/ and referenced as a local path dependency in
pyproject.toml, matching how the source Nitro scripts this project is
built from vendor it for uv.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file adc_locust-0.2.0.tar.gz.
File metadata
- Download URL: adc_locust-0.2.0.tar.gz
- Upload date:
- Size: 15.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/2.4.1 CPython/3.14.7 Linux/5.14.0-687.25.1.el9_8.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94fc2d909bc558a3029afc13af19deab057137189ec37a7799babc7af287338f
|
|
| MD5 |
8481155ea77638aa67ff6d70f2a8f2b7
|
|
| BLAKE2b-256 |
01b0b7a3f27c2b6d963533fe360723b76cefb09350579c8df6f621e9c5bd9ff5
|
File details
Details for the file adc_locust-0.2.0-py3-none-any.whl.
File metadata
- Download URL: adc_locust-0.2.0-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/2.4.1 CPython/3.14.7 Linux/5.14.0-687.25.1.el9_8.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
226991b79b2d38cd33a2141d048f1b078d8891ce926e7678107faf53c7071b5d
|
|
| MD5 |
49b9d5b4ce77c273bc1adc1c1c53f02c
|
|
| BLAKE2b-256 |
7f0abc8d3e166fc282b2ba6c79607eb3d4b331f7551ee2b1fd5e4beeaad14682
|