locust 2.18.5.dev16__tar.gz → 2.18.5.dev32__tar.gz
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.
Potentially problematic release.
This version of locust might be problematic. Click here for more details.
- {locust-2.18.5.dev16/locust.egg-info → locust-2.18.5.dev32}/PKG-INFO +1 -1
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/changelog.rst +6 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/configuration.rst +2 -2
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/retrieving-stats.rst +2 -2
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/running-distributed.rst +28 -23
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/running-in-debugger.rst +1 -1
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/testing-other-systems.rst +1 -1
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/what-is-locust.rst +1 -1
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/writing-a-locustfile.rst +3 -5
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/_version.py +2 -2
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/argument_parser.py +55 -26
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/main.py +12 -3
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_main.py +2 -2
- {locust-2.18.5.dev16 → locust-2.18.5.dev32/locust.egg-info}/PKG-INFO +1 -1
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.coveragerc +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.dockerignore +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.git-blame-ignore-revs +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.gitattributes +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.github/CONTRIBUTING.md +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.github/workflows/stale.yml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.github/workflows/tests.yml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.gitignore +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.readthedocs.yaml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.vscode/launch.json +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.vscode/launch_locust.json +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/.vscode/settings.json +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/CHANGELOG.md +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/Dockerfile +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/LICENSE +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/MANIFEST.in +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/Makefile +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/README +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/README.md +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/SECURITY.md +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/Vagrantfile +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/benchmarks/dispatch.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/_static/theme-overrides.css +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/api.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/conf.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/custom-load-shape.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/developing-locust.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/extending-locust.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/further-reading.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/history.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/images/modern-webui-splash-screenshot.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/images/number_of_users.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/images/response_times.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/images/total_requests_per_second.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/images/userclass_picker_example.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/images/webui-running-statistics.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/images/webui-splash-screenshot.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/increase-performance.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/index.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/installation.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/logging.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/quickstart.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/requirements.txt +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/running-cloud-integration.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/running-in-docker.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/running-without-web-ui.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/tasksets.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/docs/use-as-lib.rst +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/add_command_line_argument.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/basic.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/browse_docs_sequence_test.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/browse_docs_test.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_messages.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_shape/double_wave.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_shape/stages.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_shape/staging_user_classes.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_shape/step_load.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_shape/wait_user_count.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_wait_function.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_xmlrpc_client/server.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/debugging.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/debugging_advanced.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/docker-compose/docker-compose.yml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/dynamic_user_credentials.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/events.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/extend_modern_web_ui.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/extend_web_ui/extend.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/extend_web_ui/static/extend.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/extend_web_ui/templates/extend.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/fast_http_locust.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/grpc/grpc_user.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/grpc/hello.proto +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/grpc/hello_pb2.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/grpc/hello_pb2_grpc.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/grpc/hello_server.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/grpc/locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/manual_stats_reporting.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/multiple_hosts.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/nested_inline_tasksets.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/rest.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/semaphore_wait.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/stop_on_threshold.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/terraform/aws/README.md +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/terraform/aws/data_subnet.tf +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/terraform/aws/main.tf +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/terraform/aws/output.tf +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/terraform/aws/plan/basic.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/terraform/aws/provisioner.tf +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/terraform/aws/variables.tf +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/test_data_management.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/use_as_lib.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/vagrant/README.md +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/vagrant/supervisord.conf +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/examples/worker_index.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/generate_changelog.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/__init__.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/__main__.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/clients.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/contrib/__init__.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/contrib/fasthttp.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/debug.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/dispatch.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/env.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/event.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/exception.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/html.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/input_events.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/log.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/py.typed +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/rpc/__init__.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/rpc/protocol.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/runners.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/shape.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/chart.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/css/application.css +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/css/application.css.map +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/css/tables.css +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/css/tables.css.map +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/echarts.common.min.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/img/favicon.ico +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/img/logo.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/img/ui-screenshot-charts.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/img/ui-screenshot-start-test.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/img/ui-screenshot-stats.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/img/ui-screenshot-workers.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/jquery-1.11.3.min.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/jquery.jqote2.min.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/jquery.tools.min.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/locust.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/sass/_base.sass +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/sass/_mixins.sass +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/sass/application.sass +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/sass/tables.sass +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/tasks.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/static/vintage.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/stats.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/templates/index.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/templates/report.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/templates/stats_data.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/__init__.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/fake_module1_for_env_test.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/fake_module2_for_env_test.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/mock_locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/mock_logging.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_debugging.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_dispatch.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_env.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_fasthttp.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_http.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_load_locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_locust_class.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_log.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_old_wait_api.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_parser.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_runners.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_sequential_taskset.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_stats.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_tags.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_taskratio.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_users.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_util.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_wait_time.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_web.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/test_zmqrpc.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/testcases.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/test/util.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/user/__init__.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/user/inspectuser.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/user/sequential_taskset.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/user/task.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/user/users.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/user/wait_time.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/util/__init__.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/util/cache.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/util/deprecation.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/util/exception_handler.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/util/load_locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/util/rounding.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/util/timespan.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/web.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/.eslintrc +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/.gitignore +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/.prettierrc +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/dev.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/dist/assets/favicon.ico +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/dist/assets/index-8ad54eaa.js +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/dist/assets/logo.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/dist/index.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/dist/report.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/index.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/package.json +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/public/assets/favicon.ico +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/public/assets/logo.png +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/public/report.html +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/App.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/Report.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Form/Form.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Form/Select.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Layout/Layout.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Modal/Modal.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Reports/Reports.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/SwarmForm/SwarmCustomParmeters.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/SwarnRatios/SwarmRatios.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Table/Table.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/constants/swarm.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/constants/theme.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/global.d.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/hooks/useAsync.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/hooks/useInterval.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/hooks/useSortByField.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/index.tsx +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/api/swarm.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/hooks.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/slice/root.slice.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/slice/url.slice.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/store.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/redux/utils.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/styles/theme.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/types/swarm.types.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/types/tab.types.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/types/table.types.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/types/ui.types.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/utils/number.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/utils/object.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/utils/string.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/src/utils/url.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/tsconfig.json +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/vite.config.ts +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust/webui/yarn.lock +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust.egg-info/SOURCES.txt +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust.egg-info/dependency_links.txt +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust.egg-info/entry_points.txt +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust.egg-info/not-zip-safe +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust.egg-info/requires.txt +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/locust.egg-info/top_level.txt +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/package.json +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/pyproject.toml +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/scripts/locustfile.py +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/scripts/run-disributed-headless.sh +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/scripts/run-disributed-web.sh +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/scripts/run-local-headless.sh +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/scripts/run-local-web.sh +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/setup.cfg +0 -0
- {locust-2.18.5.dev16 → locust-2.18.5.dev32}/tox.ini +0 -0
@@ -4,6 +4,12 @@ Changelog Highlights
|
|
4
4
|
|
5
5
|
For full details of the Locust changelog, please see https://github.com/locustio/locust/blob/master/CHANGELOG.md
|
6
6
|
|
7
|
+
2.19.0
|
8
|
+
======
|
9
|
+
* Add --processes parameter to automatically fork subprocesses for workers https://github.com/locustio/locust/pull/2472
|
10
|
+
* Automatically shut down workers if master goes missing for too long https://github.com/locustio/locust/pull/2474
|
11
|
+
* Update minimum version of various dependencies https://github.com/locustio/locust/pull/2476
|
12
|
+
|
7
13
|
2.18.4
|
8
14
|
======
|
9
15
|
* Various fixes to Modern UI
|
@@ -59,7 +59,7 @@ Example:
|
|
59
59
|
headless = true
|
60
60
|
master = true
|
61
61
|
expect-workers = 5
|
62
|
-
host =
|
62
|
+
host = https://target-system
|
63
63
|
users = 100
|
64
64
|
spawn-rate = 10
|
65
65
|
run-time = 10m
|
@@ -67,7 +67,7 @@ Example:
|
|
67
67
|
|
68
68
|
.. code-block:: console
|
69
69
|
|
70
|
-
$ locust --config
|
70
|
+
$ locust --config master.conf
|
71
71
|
|
72
72
|
.. note::
|
73
73
|
|
@@ -11,10 +11,10 @@ if you plan on running Locust in an automated way with the ``--headless`` flag:
|
|
11
11
|
|
12
12
|
.. code-block:: console
|
13
13
|
|
14
|
-
$ locust -f examples/basic.py --csv
|
14
|
+
$ locust -f examples/basic.py --csv example --headless -t10m
|
15
15
|
|
16
16
|
The files will be named ``example_stats.csv``, ``example_failures.csv``, ``example_exceptions.csv`` and ``example_stats_history.csv``
|
17
|
-
(when using ``--csv
|
17
|
+
(when using ``--csv example``). The first two files will contain the stats and failures for the whole
|
18
18
|
test run, with a row for every stats entry (URL endpoint) and an aggregated row. The ``example_stats_history.csv``
|
19
19
|
will get new rows with the *current* (10 seconds sliding window) stats appended during the whole test run.
|
20
20
|
By default only the Aggregate row is appended regularly to the history stats, but if Locust is started with
|
@@ -10,70 +10,75 @@ But if your test plan is complex or you want to run even more load, you'll need
|
|
10
10
|
|
11
11
|
To do this, you start one instance of Locust in master mode using the ``--master`` flag and multiple worker instances using the ``--worker`` flag. If the workers are not on the same machine as the master you use ``--master-host`` to point them to the IP/hostname of the machine running the master.
|
12
12
|
|
13
|
-
|
13
|
+
To make this easier, you can use the ``--processes`` flag to launch multiple instances. It will launch a master process and the specified number of worker processes. Used in combination with ``--worker`` it will only launch the workers.
|
14
|
+
|
15
|
+
The master instance runs Locust's web interface, and tells the workers when to spawn/stop Users. The workers run your Users and send statistics back to the master. The master instance doesn't run any Users itself.
|
14
16
|
|
15
17
|
Both the master and worker machines must have a copy of the locustfile when running Locust distributed.
|
16
18
|
|
17
19
|
.. note::
|
18
|
-
Because Python cannot fully utilize more than one core per process (see `GIL <https://realpython.com/python-gil/>`_), you
|
20
|
+
Because Python cannot fully utilize more than one core per process (see `GIL <https://realpython.com/python-gil/>`_), you will need to run **one worker instance per processor core** in order to have access to all your computing power.
|
19
21
|
|
20
22
|
.. note::
|
21
23
|
There is almost no limit to how many *Users* you can run per worker. Locust/gevent can run thousands or even tens of thousands of Users per process just fine, as long as their total request rate/RPS is not too high.
|
22
24
|
|
23
25
|
.. note::
|
24
|
-
If Locust is getting close to running out of CPU resources, it will log a warning.
|
26
|
+
If Locust is getting close to running out of CPU resources, it will log a warning. If there is no warning, you can be pretty sure your test is not limited by load generator CPU.
|
25
27
|
|
26
|
-
|
27
|
-
|
28
|
+
.. note::
|
29
|
+
``--processes`` was introduced in Locust 2.19. Child processes are launched using fork which is not available in Windows.
|
28
30
|
|
29
|
-
|
31
|
+
Example 1: Everything on one machine
|
32
|
+
====================================
|
30
33
|
|
31
|
-
|
34
|
+
It is really simple to launch a master and 4 worker processes::
|
32
35
|
|
33
|
-
|
36
|
+
locust --processes 4
|
34
37
|
|
35
|
-
|
38
|
+
You can even auto-detect the number of cores in your machine and launch one worker for each of them::
|
36
39
|
|
40
|
+
locust --processes -1
|
37
41
|
|
38
|
-
|
39
|
-
|
42
|
+
Example 2: Multiple machines
|
43
|
+
============================
|
40
44
|
|
41
|
-
|
42
|
-
------------
|
45
|
+
Start locust in master mode on one machine::
|
43
46
|
|
44
|
-
|
47
|
+
locust -f my_locustfile.py --master
|
45
48
|
|
49
|
+
And then on each worker machine::
|
46
50
|
|
47
|
-
|
48
|
-
------------
|
51
|
+
locust -f my_locustfile.py --worker --master-host <your master's address> --processes 4
|
49
52
|
|
50
|
-
|
53
|
+
Note that both master and worker nodes need access to the locustfile, it is not sent from master to worker automatically. But you can use `locust-swarm <https://github.com/SvenskaSpel/locust-swarm>`_ to automate that.
|
51
54
|
|
55
|
+
Options
|
56
|
+
=======
|
52
57
|
|
53
|
-
``--master-host
|
58
|
+
``--master-host <hostname or ip>``
|
54
59
|
-------------------------
|
55
60
|
|
56
61
|
Optionally used together with ``--worker`` to set the hostname/IP of the master node (defaults
|
57
|
-
to
|
62
|
+
to localhost)
|
58
63
|
|
59
|
-
``--master-port
|
64
|
+
``--master-port <port number>``
|
60
65
|
----------------------
|
61
66
|
|
62
67
|
Optionally used together with ``--worker`` to set the port number of the master node (defaults to 5557).
|
63
68
|
|
64
|
-
``--master-bind-host
|
69
|
+
``--master-bind-host <ip>``
|
65
70
|
------------------------------
|
66
71
|
|
67
72
|
Optionally used together with ``--master``. Determines which network interface the master node
|
68
73
|
will bind to. Defaults to * (all available interfaces).
|
69
74
|
|
70
|
-
``--master-bind-port
|
75
|
+
``--master-bind-port <port number>``
|
71
76
|
------------------------------
|
72
77
|
|
73
78
|
Optionally used together with ``--master``. Determines what network ports that the master node will
|
74
79
|
listen to. Defaults to 5557.
|
75
80
|
|
76
|
-
``--expect-workers
|
81
|
+
``--expect-workers <number of workers>``
|
77
82
|
----------------------
|
78
83
|
|
79
84
|
Used when starting the master node with ``--headless``. The master node will then wait until X worker
|
@@ -47,7 +47,7 @@ Print HTTP communication
|
|
47
47
|
|
48
48
|
Sometimes it can be hard to understand why an HTTP request fails in Locust when it works from a regular browser/other application. Here's how to examine the communication in detail:
|
49
49
|
|
50
|
-
For ``HttpUser`` (`python-requests <
|
50
|
+
For ``HttpUser`` (`python-requests <https://python-requests.org>`_):
|
51
51
|
|
52
52
|
.. code-block:: python
|
53
53
|
|
@@ -8,7 +8,7 @@ Locust only comes with built-in support for HTTP/HTTPS but it can be extended to
|
|
8
8
|
|
9
9
|
.. note::
|
10
10
|
|
11
|
-
It is important that the protocol libraries you use can be `monkey-patched <
|
11
|
+
It is important that the protocol libraries you use can be `monkey-patched <https://www.gevent.org/intro.html#monkey-patching>`_ by gevent.
|
12
12
|
|
13
13
|
Almost any libraries that are pure Python (using the Python ``socket`` module or some other standard library function like ``subprocess``) should work fine out of the box - but if they do their I/O calls in C, gevent will be unable to patch it. This will block the whole Locust/Python process (in practice limiting you to running a single User per worker process).
|
14
14
|
|
@@ -52,7 +52,7 @@ load against a dynamic website where most pages had different content for differ
|
|
52
52
|
verbose configuration files to declare the tests. In Locust we took a different approach. Instead of configuration formats or UIs
|
53
53
|
you'd get a python framework that would let you define the behaviour of your users using Python code.
|
54
54
|
|
55
|
-
`Locust <
|
55
|
+
`Locust <https://en.wikipedia.org/wiki/Locust>`_ takes its name from the grasshopper species, known for their swarming behaviour.
|
56
56
|
|
57
57
|
Previous versions of Locust used terminology borrowed from nature (swarming, hatching, attacking etc), but now employs more industry standard naming.
|
58
58
|
|
@@ -238,12 +238,10 @@ of request count independently of total user count.
|
|
238
238
|
host attribute
|
239
239
|
--------------
|
240
240
|
|
241
|
-
The host attribute is a URL prefix (
|
242
|
-
Usually, this is specified in Locust's web UI or on the command line, using the
|
243
|
-
:code:`--host` option, when locust is started.
|
241
|
+
The host attribute is a URL prefix (e.g. ``https://google.com``) to the host you want ot test. It is automatically added to requests, so you can do ``self.client.get("/")`` for example.
|
244
242
|
|
245
|
-
|
246
|
-
|
243
|
+
You can overwrite this value in Locust's web UI or on the command line, using the
|
244
|
+
:code:`--host` option.
|
247
245
|
|
248
246
|
tasks attribute
|
249
247
|
---------------
|
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '2.18.5.
|
16
|
-
__version_tuple__ = version_tuple = (2, 18, 5, '
|
15
|
+
__version__ = version = '2.18.5.dev32'
|
16
|
+
__version_tuple__ = version_tuple = (2, 18, 5, 'dev32')
|
@@ -146,22 +146,32 @@ def get_empty_argument_parser(add_help=True, default_config_files=DEFAULT_CONFIG
|
|
146
146
|
usage=configargparse.SUPPRESS,
|
147
147
|
description=textwrap.dedent(
|
148
148
|
"""
|
149
|
-
|
150
|
-
|
149
|
+
Usage: locust [options] [UserClass ...]
|
151
150
|
"""
|
152
151
|
),
|
153
|
-
|
152
|
+
epilog="""Examples:
|
153
|
+
|
154
|
+
locust -f my_test.py -H https://www.example.com
|
155
|
+
|
156
|
+
locust -u 100 -t 20m --headless --process 4 MyHttpUser AnotherUser
|
157
|
+
|
158
|
+
See documentation for more details, including how to set options using a file or environment variables: https://docs.locust.io/en/stable/configuration.html""",
|
154
159
|
)
|
155
160
|
parser.add_argument(
|
156
161
|
"-f",
|
157
162
|
"--locustfile",
|
163
|
+
metavar="<filename>",
|
158
164
|
default="locustfile",
|
159
|
-
help="Python module
|
160
|
-
"directory. Defaults to 'locustfile'.",
|
165
|
+
help="The Python file or module that contains your test, e.g. 'my_test.py'. Also accepts multiple comma-separated .py files or a package name/directory. Defaults to 'locustfile'.",
|
161
166
|
env_var="LOCUST_LOCUSTFILE",
|
162
167
|
)
|
163
168
|
|
164
|
-
parser.add_argument(
|
169
|
+
parser.add_argument(
|
170
|
+
"--config",
|
171
|
+
is_config_file_arg=True,
|
172
|
+
help="File to read additional configuration from. See https://docs.locust.io/en/stable/configuration.html#configuration-file",
|
173
|
+
metavar="<filename>",
|
174
|
+
)
|
165
175
|
|
166
176
|
return parser
|
167
177
|
|
@@ -251,13 +261,15 @@ def setup_parser_arguments(parser):
|
|
251
261
|
parser.add_argument(
|
252
262
|
"-H",
|
253
263
|
"--host",
|
254
|
-
|
264
|
+
metavar="<base url>",
|
265
|
+
help="Host to load test, in the following format: https://www.example.com",
|
255
266
|
env_var="LOCUST_HOST",
|
256
267
|
)
|
257
268
|
parser.add_argument(
|
258
269
|
"-u",
|
259
270
|
"--users",
|
260
271
|
type=int,
|
272
|
+
metavar="<int>",
|
261
273
|
dest="num_users",
|
262
274
|
help="Peak number of concurrent Locust users. Primarily used together with --headless or --autostart. Can be changed during a test by keyboard inputs w, W (spawn 1, 10 users) and s, S (stop 1, 10 users)",
|
263
275
|
env_var="LOCUST_USERS",
|
@@ -266,12 +278,14 @@ def setup_parser_arguments(parser):
|
|
266
278
|
"-r",
|
267
279
|
"--spawn-rate",
|
268
280
|
type=float,
|
281
|
+
metavar="<float>",
|
269
282
|
help="Rate to spawn users at (users per second). Primarily used together with --headless or --autostart",
|
270
283
|
env_var="LOCUST_SPAWN_RATE",
|
271
284
|
)
|
272
285
|
parser.add_argument(
|
273
286
|
"--hatch-rate",
|
274
287
|
env_var="LOCUST_HATCH_RATE",
|
288
|
+
metavar="<float>",
|
275
289
|
type=float,
|
276
290
|
default=0,
|
277
291
|
help=configargparse.SUPPRESS,
|
@@ -279,6 +293,7 @@ def setup_parser_arguments(parser):
|
|
279
293
|
parser.add_argument(
|
280
294
|
"-t",
|
281
295
|
"--run-time",
|
296
|
+
metavar="<time string>",
|
282
297
|
help="Stop after the specified amount of time, e.g. (300s, 20m, 3h, 1h30m, etc.). Only used together with --headless or --autostart. Defaults to run forever.",
|
283
298
|
env_var="LOCUST_RUN_TIME",
|
284
299
|
)
|
@@ -294,6 +309,7 @@ def setup_parser_arguments(parser):
|
|
294
309
|
web_ui_group.add_argument(
|
295
310
|
"--web-host",
|
296
311
|
default="",
|
312
|
+
metavar="<ip>",
|
297
313
|
help="Host to bind the web interface to. Defaults to '*' (all interfaces)",
|
298
314
|
env_var="LOCUST_WEB_HOST",
|
299
315
|
)
|
@@ -301,6 +317,7 @@ def setup_parser_arguments(parser):
|
|
301
317
|
"--web-port",
|
302
318
|
"-P",
|
303
319
|
type=int,
|
320
|
+
metavar="<port number>",
|
304
321
|
default=8089,
|
305
322
|
help="Port on which to run web host",
|
306
323
|
env_var="LOCUST_WEB_PORT",
|
@@ -320,6 +337,7 @@ def setup_parser_arguments(parser):
|
|
320
337
|
web_ui_group.add_argument(
|
321
338
|
"--autoquit",
|
322
339
|
type=int,
|
340
|
+
metavar="<seconds>",
|
323
341
|
default=-1,
|
324
342
|
help="Quits Locust entirely, X seconds after the run is finished. Only used together with --autostart. The default is to keep Locust running until you shut it down using CTRL+C",
|
325
343
|
env_var="LOCUST_AUTOQUIT",
|
@@ -335,19 +353,22 @@ def setup_parser_arguments(parser):
|
|
335
353
|
"--web-auth",
|
336
354
|
type=str,
|
337
355
|
dest="web_auth",
|
356
|
+
metavar="<username:password>",
|
338
357
|
default=None,
|
339
|
-
help="Turn on Basic Auth for the web interface. Should be supplied in the following format: username:password",
|
358
|
+
help="DEPRECATED Turn on Basic Auth for the web interface. Should be supplied in the following format: username:password",
|
340
359
|
env_var="LOCUST_WEB_AUTH",
|
341
360
|
)
|
342
361
|
web_ui_group.add_argument(
|
343
362
|
"--tls-cert",
|
344
363
|
default="",
|
364
|
+
metavar="<filename>",
|
345
365
|
help="Optional path to TLS certificate to use to serve over HTTPS",
|
346
366
|
env_var="LOCUST_TLS_CERT",
|
347
367
|
)
|
348
368
|
web_ui_group.add_argument(
|
349
369
|
"--tls-key",
|
350
370
|
default="",
|
371
|
+
metavar="<filename>",
|
351
372
|
help="Optional path to TLS private key to use to serve over HTTPS",
|
352
373
|
env_var="LOCUST_TLS_KEY",
|
353
374
|
)
|
@@ -374,37 +395,40 @@ def setup_parser_arguments(parser):
|
|
374
395
|
master_group.add_argument(
|
375
396
|
"--master",
|
376
397
|
action="store_true",
|
377
|
-
help="
|
398
|
+
help="Launch locust as a master node, to which worker nodes connect.",
|
378
399
|
env_var="LOCUST_MODE_MASTER",
|
379
400
|
)
|
380
401
|
master_group.add_argument(
|
381
402
|
"--master-bind-host",
|
382
403
|
default="*",
|
383
|
-
|
404
|
+
metavar="<ip>",
|
405
|
+
help="IP address for the master to listen on, e.g '192.168.1.1'. Defaults to * (all available interfaces).",
|
384
406
|
env_var="LOCUST_MASTER_BIND_HOST",
|
385
407
|
)
|
386
408
|
master_group.add_argument(
|
387
409
|
"--master-bind-port",
|
388
410
|
type=int,
|
411
|
+
metavar="<port number>",
|
389
412
|
default=5557,
|
390
|
-
help="Port
|
413
|
+
help="Port for the master to listen on. Defaults to 5557.",
|
391
414
|
env_var="LOCUST_MASTER_BIND_PORT",
|
392
415
|
)
|
393
416
|
master_group.add_argument(
|
394
417
|
"--expect-workers",
|
395
418
|
type=int,
|
419
|
+
metavar="<int>",
|
396
420
|
default=1,
|
397
|
-
help="
|
421
|
+
help="Delay starting the test until this number of workers have connected (only used in combination with --headless/--autostart).",
|
398
422
|
env_var="LOCUST_EXPECT_WORKERS",
|
399
423
|
)
|
400
424
|
master_group.add_argument(
|
401
425
|
"--expect-workers-max-wait",
|
402
426
|
type=int,
|
427
|
+
metavar="<int>",
|
403
428
|
default=0,
|
404
429
|
help="How long should the master wait for workers to connect before giving up. Defaults to wait forever",
|
405
430
|
env_var="LOCUST_EXPECT_WORKERS_MAX_WAIT",
|
406
431
|
)
|
407
|
-
|
408
432
|
master_group.add_argument(
|
409
433
|
"--expect-slaves",
|
410
434
|
action="store_true",
|
@@ -414,9 +438,8 @@ def setup_parser_arguments(parser):
|
|
414
438
|
worker_group = parser.add_argument_group(
|
415
439
|
"Worker options",
|
416
440
|
"""Options for running a Locust Worker node when running Locust distributed.
|
417
|
-
|
441
|
+
Typically ONLY these options (and --locustfile) need to be specified on workers, since other options (-u, -r, -t, ...) are controlled by the master node.""",
|
418
442
|
)
|
419
|
-
# if locust should be run in distributed mode as worker
|
420
443
|
worker_group.add_argument(
|
421
444
|
"--worker",
|
422
445
|
action="store_true",
|
@@ -426,7 +449,8 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
426
449
|
worker_group.add_argument(
|
427
450
|
"--processes",
|
428
451
|
type=int,
|
429
|
-
|
452
|
+
metavar="<int>",
|
453
|
+
help="Number of times to fork the locust process, to enable using system. Combine with --worker flag or let it automatically set --worker and --master flags for an all-in-one-solution. Not available on Windows. Experimental.",
|
430
454
|
env_var="LOCUST_PROCESSES",
|
431
455
|
)
|
432
456
|
worker_group.add_argument(
|
@@ -434,21 +458,20 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
434
458
|
action="store_true",
|
435
459
|
help=configargparse.SUPPRESS,
|
436
460
|
)
|
437
|
-
# master host options
|
438
461
|
worker_group.add_argument(
|
439
462
|
"--master-host",
|
440
463
|
default="127.0.0.1",
|
441
|
-
help="
|
464
|
+
help="Hostname of locust master node to connect to. Defaults to 127.0.0.1.",
|
442
465
|
env_var="LOCUST_MASTER_NODE_HOST",
|
443
|
-
metavar="
|
466
|
+
metavar="<hostname>",
|
444
467
|
)
|
445
468
|
worker_group.add_argument(
|
446
469
|
"--master-port",
|
447
470
|
type=int,
|
471
|
+
metavar="<port number>",
|
448
472
|
default=5557,
|
449
|
-
help="
|
473
|
+
help="Port to connect to on master node. Defaults to 5557.",
|
450
474
|
env_var="LOCUST_MASTER_NODE_PORT",
|
451
|
-
metavar="MASTER_NODE_PORT",
|
452
475
|
)
|
453
476
|
|
454
477
|
tag_group = parser.add_argument_group(
|
@@ -459,7 +482,7 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
459
482
|
"-T",
|
460
483
|
"--tags",
|
461
484
|
nargs="*",
|
462
|
-
metavar="
|
485
|
+
metavar="<tag>",
|
463
486
|
env_var="LOCUST_TAGS",
|
464
487
|
help="List of tags to include in the test, so only tasks with any matching tags will be executed",
|
465
488
|
)
|
@@ -467,7 +490,7 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
467
490
|
"-E",
|
468
491
|
"--exclude-tags",
|
469
492
|
nargs="*",
|
470
|
-
metavar="
|
493
|
+
metavar="<tag>",
|
471
494
|
env_var="LOCUST_EXCLUDE_TAGS",
|
472
495
|
help="List of tags to exclude from the test, so only tasks with no matching tags will be executed",
|
473
496
|
)
|
@@ -476,6 +499,7 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
476
499
|
stats_group.add_argument(
|
477
500
|
"--csv", # Name repeated in 'parse_options'
|
478
501
|
dest="csv_prefix",
|
502
|
+
metavar="<string>",
|
479
503
|
help="Store current request stats to files in CSV format. Setting this option will generate three files: [CSV_PREFIX]_stats.csv, [CSV_PREFIX]_stats_history.csv and [CSV_PREFIX]_failures.csv",
|
480
504
|
env_var="LOCUST_CSV",
|
481
505
|
)
|
@@ -507,6 +531,7 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
507
531
|
)
|
508
532
|
stats_group.add_argument(
|
509
533
|
"--html",
|
534
|
+
metavar="<filename>",
|
510
535
|
dest="html_file",
|
511
536
|
help="Store HTML report to file path specified",
|
512
537
|
env_var="LOCUST_HTML",
|
@@ -532,11 +557,13 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
532
557
|
"-L",
|
533
558
|
default="INFO",
|
534
559
|
help="Choose between DEBUG/INFO/WARNING/ERROR/CRITICAL. Default is INFO.",
|
560
|
+
metavar="<level>",
|
535
561
|
env_var="LOCUST_LOGLEVEL",
|
536
562
|
)
|
537
563
|
log_group.add_argument(
|
538
564
|
"--logfile",
|
539
565
|
help="Path to log file. If not set, log will go to stderr",
|
566
|
+
metavar="<filename>",
|
540
567
|
env_var="LOCUST_LOGFILE",
|
541
568
|
)
|
542
569
|
|
@@ -562,8 +589,9 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
562
589
|
other_group.add_argument(
|
563
590
|
"--exit-code-on-error",
|
564
591
|
type=int,
|
592
|
+
metavar="<int>",
|
565
593
|
default=1,
|
566
|
-
help="Sets the process exit code to use when a test result contain any failure or error",
|
594
|
+
help="Sets the process exit code to use when a test result contain any failure or error. Defaults to 1.",
|
567
595
|
env_var="LOCUST_EXIT_CODE_ON_ERROR",
|
568
596
|
)
|
569
597
|
other_group.add_argument(
|
@@ -571,6 +599,7 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
571
599
|
"--stop-timeout",
|
572
600
|
action="store",
|
573
601
|
dest="stop_timeout",
|
602
|
+
metavar="<number>",
|
574
603
|
default="0",
|
575
604
|
help="Number of seconds to wait for a simulated user to complete any executing task before exiting. Default is to terminate immediately. This parameter only needs to be specified for the master process when running Locust distributed.",
|
576
605
|
env_var="LOCUST_STOP_TIMEOUT",
|
@@ -594,8 +623,8 @@ Only the LOCUSTFILE (-f option) needs to be specified when starting a Worker, si
|
|
594
623
|
user_classes_group.add_argument(
|
595
624
|
"user_classes",
|
596
625
|
nargs="*",
|
597
|
-
metavar="
|
598
|
-
help="
|
626
|
+
metavar="<UserClass1 UserClass2>",
|
627
|
+
help="At the end of the command line, you can list User classes to be used (available User classes can be listed with --list). LOCUST_USER_CLASSES environment variable can also be used to specify User classes. Default is to use all available User classes",
|
599
628
|
default=os.environ.get("LOCUST_USER_CLASSES", "").split(),
|
600
629
|
)
|
601
630
|
|
@@ -166,12 +166,21 @@ def main():
|
|
166
166
|
|
167
167
|
if options.processes:
|
168
168
|
if os.name == "nt":
|
169
|
-
|
169
|
+
sys.stderr.write("--processes is not supported in Windows (except in WSL)\n")
|
170
|
+
sys.exit(1)
|
170
171
|
if options.processes == -1:
|
171
172
|
options.processes = os.cpu_count()
|
172
|
-
|
173
|
+
if not options.processes:
|
174
|
+
sys.stderr.write("--processes failed to detect number of cpus!?\n")
|
175
|
+
sys.exit(1)
|
173
176
|
elif options.processes < -1:
|
174
|
-
|
177
|
+
sys.stderr.write(f"Invalid --processes count {options.processes}\n")
|
178
|
+
sys.exit(1)
|
179
|
+
elif options.master:
|
180
|
+
sys.stderr.write(
|
181
|
+
"--master cannot be combined with --processes. Remove --master, as it is implicit as long as --worker is not set.\n"
|
182
|
+
)
|
183
|
+
sys.exit(1)
|
175
184
|
for _ in range(options.processes):
|
176
185
|
child_pid = gevent.fork()
|
177
186
|
if child_pid:
|
@@ -72,9 +72,9 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
72
72
|
timeout=5,
|
73
73
|
text=True,
|
74
74
|
).strip()
|
75
|
-
self.assertTrue(output.startswith("Usage: locust [
|
75
|
+
self.assertTrue(output.startswith("Usage: locust [options] [UserClass"))
|
76
76
|
self.assertIn("Common options:", output)
|
77
|
-
self.assertIn("-f
|
77
|
+
self.assertIn("-f <filename>, --locustfile <filename>", output)
|
78
78
|
self.assertIn("Logging options:", output)
|
79
79
|
self.assertIn("--skip-log-setup Disable Locust's logging setup.", output)
|
80
80
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|