locust 2.23.2.dev4__tar.gz → 2.23.2.dev16__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.
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/CHANGELOG.md +18 -0
- {locust-2.23.2.dev4/locust.egg-info → locust-2.23.2.dev16}/PKG-INFO +1 -1
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/configuration.rst +1 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/running-cloud-integration.rst +4 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/terraform/aws/README.md +1 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/web_ui_auth.py +4 -2
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/_version.py +2 -2
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/dispatch.py +4 -3
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/env.py +4 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/runners.py +3 -3
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_env.py +13 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_runners.py +39 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/util.py +4 -1
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/user/task.py +1 -1
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/user/users.py +1 -1
- locust-2.23.2.dev4/locust/webui/dist/assets/index-fcdc76c8.js → locust-2.23.2.dev16/locust/webui/dist/assets/index-ad6f2665.js +58 -58
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/dist/auth.html +1 -1
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/dist/index.html +1 -1
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/package.json +1 -0
- locust-2.23.2.dev16/locust/webui/src/components/FallbackRender/FallbackRender.tsx +12 -0
- locust-2.23.2.dev16/locust/webui/src/components/Layout/Footer/Footer.tsx +19 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Layout/Layout.tsx +5 -2
- locust-2.23.2.dev16/locust/webui/src/index.tsx +49 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/store.ts +2 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/styles/theme.ts +9 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/yarn.lock +7 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16/locust.egg-info}/PKG-INFO +1 -1
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust.egg-info/SOURCES.txt +2 -1
- locust-2.23.2.dev4/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -13
- locust-2.23.2.dev4/locust/webui/src/index.tsx +0 -43
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.coveragerc +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.dockerignore +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.git-blame-ignore-revs +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.gitattributes +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.github/CONTRIBUTING.md +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.github/workflows/stale.yml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.github/workflows/tests.yml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.gitignore +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.readthedocs.yaml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.vscode/extensions.json +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.vscode/launch.json +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.vscode/launch_locust.json +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/.vscode/settings.json +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/Dockerfile +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/LICENSE +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/MANIFEST.in +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/Makefile +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/README +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/README.md +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/SECURITY.md +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/Vagrantfile +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/benchmarks/dispatch.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/_static/theme-overrides.css +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/api.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/changelog.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/conf.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/custom-load-shape.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/developing-locust.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/extending-locust.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/further-reading.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/history.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/images/locust_workers.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/images/number_of_users.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/images/response_times.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/images/total_requests_per_second.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/images/userclass_picker_example.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/images/webui-running-statistics.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/images/webui-splash-screenshot.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/increase-performance.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/index.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/installation.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/logging.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/quickstart.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/requirements.txt +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/retrieving-stats.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/running-distributed.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/running-in-debugger.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/running-in-docker.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/running-without-web-ui.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/tasksets.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/testing-other-systems.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/use-as-lib.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/what-is-locust.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/docs/writing-a-locustfile.rst +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/add_command_line_argument.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/basic.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/browse_docs_sequence_test.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/browse_docs_test.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_messages.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_shape/double_wave.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_shape/stages.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_shape/staging_user_classes.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_shape/step_load.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_shape/wait_user_count.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_wait_function.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_xmlrpc_client/server.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/debugging.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/debugging_advanced.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/docker-compose/docker-compose.yml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/dynamic_user_credentials.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/events.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/extend_modern_web_ui.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/extend_web_ui/extend.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/extend_web_ui/static/extend.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/extend_web_ui/templates/extend.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/fast_http_locust.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/grpc/grpc_user.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/grpc/hello.proto +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/grpc/hello_pb2.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/grpc/hello_pb2_grpc.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/grpc/hello_server.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/grpc/locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/manual_stats_reporting.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/multiple_hosts.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/nested_inline_tasksets.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/rest.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/semaphore_wait.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/stop_on_threshold.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/terraform/aws/data_subnet.tf +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/terraform/aws/main.tf +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/terraform/aws/output.tf +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/terraform/aws/plan/basic.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/terraform/aws/provisioner.tf +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/terraform/aws/variables.tf +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/test_data_management.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/use_as_lib.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/vagrant/README.md +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/vagrant/supervisord.conf +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/examples/worker_index.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/generate_changelog.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/__init__.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/__main__.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/argument_parser.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/clients.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/contrib/__init__.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/contrib/fasthttp.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/debug.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/event.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/exception.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/html.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/input_events.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/log.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/main.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/py.typed +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/rpc/__init__.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/rpc/protocol.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/shape.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/chart.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/css/application.css +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/css/application.css.map +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/css/tables.css +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/css/tables.css.map +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/echarts.common.min.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/img/favicon.ico +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/img/logo.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/img/ui-screenshot-charts.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/img/ui-screenshot-start-test.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/img/ui-screenshot-stats.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/img/ui-screenshot-workers.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/jquery-1.11.3.min.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/jquery.jqote2.min.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/jquery.tools.min.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/locust.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/sass/_base.sass +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/sass/_mixins.sass +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/sass/application.sass +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/sass/tables.sass +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/tasks.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/static/vintage.js +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/stats.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/templates/index.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/templates/report.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/templates/stats_data.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/__init__.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/fake_module1_for_env_test.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/fake_module2_for_env_test.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/mock_locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/mock_logging.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_debugging.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_dispatch.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_fasthttp.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_http.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_interruptable_task.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_load_locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_locust_class.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_log.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_main.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_old_wait_api.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_parser.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_sequential_taskset.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_stats.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_tags.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_taskratio.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_users.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_util.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_wait_time.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_web.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/test_zmqrpc.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/test/testcases.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/user/__init__.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/user/inspectuser.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/user/sequential_taskset.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/user/wait_time.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/util/__init__.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/util/cache.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/util/deprecation.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/util/exception_handler.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/util/load_locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/util/rounding.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/util/timespan.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/web.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/.eslintrc +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/.gitignore +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/.prettierrc +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/auth.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/dev.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/dist/assets/favicon.ico +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/dist/assets/logo.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/dist/report.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/index.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/public/assets/favicon.ico +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/public/assets/logo.png +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/public/report.html +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/App.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/Report.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/auth.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Form/Form.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Form/Select.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Modal/Modal.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Reports/Reports.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Table/Table.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Table/Table.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/constants/swarm.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/constants/theme.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/global.d.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/useInterval.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/useNotifications.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/useSortByField.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/api/swarm.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/hooks.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/root.slice.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/slice/url.slice.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/redux/utils.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/test/constants.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/test/setup.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/test/testUtils.tsx +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/types/auth.types.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/types/swarm.types.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/types/tab.types.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/types/table.types.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/types/ui.types.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/number.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/object.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/string.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/tests/number.test.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/tests/object.test.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/tests/string.test.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/tests/url.test.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/src/utils/url.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/tsconfig.json +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/vite.config.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust/webui/vitest.config.ts +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust.egg-info/dependency_links.txt +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust.egg-info/entry_points.txt +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust.egg-info/not-zip-safe +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust.egg-info/requires.txt +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/locust.egg-info/top_level.txt +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/package.json +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/pyproject.toml +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/scripts/locustfile.py +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/scripts/run-disributed-headless.sh +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/scripts/run-disributed-web.sh +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/scripts/run-local-headless.sh +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/scripts/run-local-web.sh +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/setup.cfg +0 -0
- {locust-2.23.2.dev4 → locust-2.23.2.dev16}/tox.ini +0 -0
@@ -1,6 +1,24 @@
|
|
1
1
|
# Detailed changelog
|
2
2
|
The most important changes can also be found in [the documentation](https://docs.locust.io/en/latest/changelog.html).
|
3
3
|
|
4
|
+
## [2.23.1](https://github.com/locustio/locust/tree/2.23.1) (2024-02-11)
|
5
|
+
|
6
|
+
[Full Changelog](https://github.com/locustio/locust/compare/2.23.0...2.23.1)
|
7
|
+
|
8
|
+
**Fixed bugs:**
|
9
|
+
|
10
|
+
- Modern UI: Average Response Time and 95th percentile have the same color [\#2598](https://github.com/locustio/locust/issues/2598)
|
11
|
+
|
12
|
+
**Closed issues:**
|
13
|
+
|
14
|
+
- Modern UI: Add exception message column on the Exception Statistics [\#2597](https://github.com/locustio/locust/issues/2597)
|
15
|
+
|
16
|
+
**Merged pull requests:**
|
17
|
+
|
18
|
+
- Modern UI: Add exception message column on the Exception Table [\#2601](https://github.com/locustio/locust/pull/2601) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
|
19
|
+
- Modern UI: Wrong chart's legend for overridden percentiles values [\#2600](https://github.com/locustio/locust/pull/2600) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
|
20
|
+
- Change download-from-master to use temp file dir [\#2599](https://github.com/locustio/locust/pull/2599) ([cyberw](https://github.com/cyberw))
|
21
|
+
|
4
22
|
## [2.23.0](https://github.com/locustio/locust/tree/2.23.0) (2024-02-11)
|
5
23
|
|
6
24
|
[Full Changelog](https://github.com/locustio/locust/compare/2.22.0...2.23.0)
|
@@ -4,6 +4,10 @@
|
|
4
4
|
Running Locust distributed with Terraform/AWS
|
5
5
|
=============================================
|
6
6
|
|
7
|
+
.. note::
|
8
|
+
|
9
|
+
This is broken at the moment. See https://github.com/locustio/locust/issues/2357 for a possible workaround.
|
10
|
+
|
7
11
|
Here's one way to provision Locust using Infrastructure as Code/IaC.
|
8
12
|
|
9
13
|
For this we use a `Terraform <https://www.terraform.io/>`_ module that provisions 1 leader and "n" worker nodes. This implementation uses AWS and EC2, but you may be able to modify it for other cloud providers.
|
@@ -6,7 +6,7 @@ according to your projects specifications.
|
|
6
6
|
|
7
7
|
For more information, see https://docs.locust.io/en/stable/extending-locust.html#authentication
|
8
8
|
"""
|
9
|
-
from locust import HttpUser, events
|
9
|
+
from locust import HttpUser, events, task
|
10
10
|
|
11
11
|
import json
|
12
12
|
import os
|
@@ -16,7 +16,9 @@ from flask_login import UserMixin, login_user
|
|
16
16
|
|
17
17
|
|
18
18
|
class LocustHttpUser(HttpUser):
|
19
|
-
|
19
|
+
@task
|
20
|
+
def example(self):
|
21
|
+
self.client.get("/")
|
20
22
|
|
21
23
|
|
22
24
|
class AuthUser(UserMixin):
|
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '2.23.2.
|
16
|
-
__version_tuple__ = version_tuple = (2, 23, 2, '
|
15
|
+
__version__ = version = '2.23.2.dev16'
|
16
|
+
__version_tuple__ = version_tuple = (2, 23, 2, 'dev16')
|
@@ -5,9 +5,8 @@ import itertools
|
|
5
5
|
import math
|
6
6
|
import time
|
7
7
|
from collections import defaultdict
|
8
|
-
from collections.abc import Iterator
|
9
8
|
from operator import attrgetter
|
10
|
-
from typing import TYPE_CHECKING, Generator
|
9
|
+
from typing import TYPE_CHECKING, Generator, Iterator
|
11
10
|
|
12
11
|
import gevent
|
13
12
|
from roundrobin import smooth
|
@@ -164,7 +163,9 @@ class UsersDispatcher(Iterator):
|
|
164
163
|
|
165
164
|
self._dispatch_in_progress = False
|
166
165
|
|
167
|
-
def new_dispatch(
|
166
|
+
def new_dispatch(
|
167
|
+
self, target_user_count: int, spawn_rate: float, user_classes: list[type[User]] | None = None
|
168
|
+
) -> None:
|
168
169
|
"""
|
169
170
|
Initialize a new dispatch cycle.
|
170
171
|
|
@@ -5,6 +5,7 @@ from typing import Callable, TypeVar
|
|
5
5
|
|
6
6
|
from configargparse import Namespace
|
7
7
|
|
8
|
+
from .dispatch import UsersDispatcher
|
8
9
|
from .event import Events
|
9
10
|
from .exception import RunnerAlreadyExistsError
|
10
11
|
from .runners import LocalRunner, MasterRunner, Runner, WorkerRunner
|
@@ -35,6 +36,7 @@ class Environment:
|
|
35
36
|
available_user_classes: dict[str, User] | None = None,
|
36
37
|
available_shape_classes: dict[str, LoadTestShape] | None = None,
|
37
38
|
available_user_tasks: dict[str, list[TaskSet | Callable]] | None = None,
|
39
|
+
dispatcher_class: type[UsersDispatcher] = UsersDispatcher,
|
38
40
|
):
|
39
41
|
self.runner: Runner | None = None
|
40
42
|
"""Reference to the :class:`Runner <locust.runners.Runner>` instance"""
|
@@ -95,6 +97,8 @@ class Environment:
|
|
95
97
|
"""List of the available Shape Classes to pick from in the ShapeClass Picker"""
|
96
98
|
self.available_user_tasks = available_user_tasks
|
97
99
|
"""List of the available Tasks per User Classes to pick from in the Task Picker"""
|
100
|
+
self.dispatcher_class = dispatcher_class
|
101
|
+
"""A user dispatcher class that decides how users are spawned, default :class:`UsersDispatcher <locust.dispatch.UsersDispatcher>`"""
|
98
102
|
|
99
103
|
self._remove_user_classes_with_weight_zero()
|
100
104
|
self._validate_user_class_name_uniqueness()
|
@@ -492,13 +492,13 @@ class LocalRunner(Runner):
|
|
492
492
|
self.update_state(STATE_SPAWNING)
|
493
493
|
|
494
494
|
if self._users_dispatcher is None:
|
495
|
-
self._users_dispatcher =
|
495
|
+
self._users_dispatcher = self.environment.dispatcher_class(
|
496
496
|
worker_nodes=[self._local_worker_node], user_classes=self.user_classes
|
497
497
|
)
|
498
498
|
|
499
499
|
logger.info("Ramping to %d users at a rate of %.2f per second" % (user_count, spawn_rate))
|
500
500
|
|
501
|
-
|
501
|
+
self._users_dispatcher.new_dispatch(user_count, spawn_rate, user_classes)
|
502
502
|
|
503
503
|
try:
|
504
504
|
for dispatched_users in self._users_dispatcher:
|
@@ -750,7 +750,7 @@ class MasterRunner(DistributedRunner):
|
|
750
750
|
self.spawn_rate = spawn_rate
|
751
751
|
|
752
752
|
if self._users_dispatcher is None:
|
753
|
-
self._users_dispatcher =
|
753
|
+
self._users_dispatcher = self.environment.dispatcher_class(
|
754
754
|
worker_nodes=list(self.clients.values()), user_classes=self.user_classes
|
755
755
|
)
|
756
756
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from locust import (
|
2
2
|
constant,
|
3
3
|
)
|
4
|
+
from locust.dispatch import UsersDispatcher
|
4
5
|
from locust.env import Environment, LoadTestShape
|
5
6
|
from locust.user import (
|
6
7
|
User,
|
@@ -201,6 +202,18 @@ class TestEnvironment(LocustTestCase):
|
|
201
202
|
):
|
202
203
|
Environment(user_classes=[MyUserWithSameName1], shape_class=SubLoadTestShape)
|
203
204
|
|
205
|
+
def test_dispatcher_class_attribute(self):
|
206
|
+
environment = Environment(user_classes=[MyUserWithSameName1])
|
207
|
+
|
208
|
+
self.assertEqual(environment.dispatcher_class, UsersDispatcher)
|
209
|
+
|
210
|
+
class MyUsersDispatcher(UsersDispatcher):
|
211
|
+
pass
|
212
|
+
|
213
|
+
environment = Environment(user_classes=[MyUserWithSameName1], dispatcher_class=MyUsersDispatcher)
|
214
|
+
|
215
|
+
self.assertEqual(environment.dispatcher_class, MyUsersDispatcher)
|
216
|
+
|
204
217
|
def test_update_user_class(self):
|
205
218
|
class MyUser1(User):
|
206
219
|
@task
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import locust
|
2
4
|
from locust import (
|
3
5
|
LoadTestShape,
|
@@ -6,6 +8,7 @@ from locust import (
|
|
6
8
|
runners,
|
7
9
|
)
|
8
10
|
from locust.argument_parser import parse_options
|
11
|
+
from locust.dispatch import UsersDispatcher
|
9
12
|
from locust.env import Environment
|
10
13
|
from locust.exception import RPCError, RPCReceiveError, StopUser
|
11
14
|
from locust.main import create_environment
|
@@ -843,6 +846,42 @@ class TestLocustRunner(LocustRunnerTestCase):
|
|
843
846
|
local_runner.stop()
|
844
847
|
web_ui.stop()
|
845
848
|
|
849
|
+
def test_custom_dispatcher_class(self):
|
850
|
+
@mock.create_autospec
|
851
|
+
class MyUsersDispatcher(UsersDispatcher):
|
852
|
+
def __init__(self, worker_nodes: list[WorkerNode], user_classes: list[type[User]]) -> None:
|
853
|
+
super().__init__(worker_nodes, user_classes)
|
854
|
+
|
855
|
+
def add_worker(self, worker_node: WorkerNode) -> None:
|
856
|
+
pass
|
857
|
+
|
858
|
+
def remove_worker(self, worker_node: WorkerNode) -> None:
|
859
|
+
pass
|
860
|
+
|
861
|
+
@property
|
862
|
+
def dispatch_in_progress(self) -> bool:
|
863
|
+
return True
|
864
|
+
|
865
|
+
def new_dispatch(self, target_user_count: int, spawn_rate: float, user_classes: list | None = None) -> None:
|
866
|
+
return super().new_dispatch(target_user_count, spawn_rate, user_classes)
|
867
|
+
|
868
|
+
class MyUser1(User):
|
869
|
+
wait_time = constant(0)
|
870
|
+
fixed_count = 1
|
871
|
+
|
872
|
+
@task
|
873
|
+
def my_task(self):
|
874
|
+
pass
|
875
|
+
|
876
|
+
environment = Environment(user_classes=[MyUser1], dispatcher_class=MyUsersDispatcher)
|
877
|
+
runner = LocalRunner(environment)
|
878
|
+
|
879
|
+
runner.start(user_count=1, spawn_rate=1)
|
880
|
+
sleep(1)
|
881
|
+
runner._users_dispatcher.new_dispatch.assert_called_with(1, 1, None)
|
882
|
+
runner._users_dispatcher.__iter__.assert_called_once()
|
883
|
+
runner.stop()
|
884
|
+
|
846
885
|
|
847
886
|
class TestMasterWorkerRunners(LocustTestCase):
|
848
887
|
def test_distributed_integration_run(self):
|
@@ -3,6 +3,7 @@ import functools
|
|
3
3
|
import gc
|
4
4
|
import os
|
5
5
|
import socket
|
6
|
+
import warnings
|
6
7
|
from contextlib import contextmanager
|
7
8
|
from tempfile import NamedTemporaryFile
|
8
9
|
|
@@ -78,7 +79,9 @@ def create_tls_cert(hostname):
|
|
78
79
|
def clear_all_functools_lru_cache() -> None:
|
79
80
|
# Clear all `functools.lru_cache` to ensure that no state are persisted from one test to another.
|
80
81
|
# Taken from https://stackoverflow.com/a/50699209.
|
81
|
-
|
82
|
+
with warnings.catch_warnings():
|
83
|
+
warnings.simplefilter(action="ignore", category=ResourceWarning)
|
84
|
+
gc.collect()
|
82
85
|
wrappers = [a for a in gc.get_objects() if isinstance(a, functools._lru_cache_wrapper)]
|
83
86
|
assert len(wrappers) > 0
|
84
87
|
for wrapper in wrappers:
|
@@ -308,7 +308,7 @@ class TaskSet(metaclass=TaskSetMeta):
|
|
308
308
|
"""Parent TaskSet instance of this TaskSet (or :py:class:`User <locust.User>` if this is not a nested TaskSet)"""
|
309
309
|
return self._parent
|
310
310
|
|
311
|
-
def on_start(self):
|
311
|
+
def on_start(self) -> None:
|
312
312
|
"""
|
313
313
|
Called when a User starts executing this TaskSet
|
314
314
|
"""
|
@@ -128,7 +128,7 @@ class User(metaclass=UserMeta):
|
|
128
128
|
self._taskset_instance: TaskSet = None
|
129
129
|
self._cp_last_run = time.time() # used by constant_pacing wait_time
|
130
130
|
|
131
|
-
def on_start(self):
|
131
|
+
def on_start(self) -> None:
|
132
132
|
"""
|
133
133
|
Called when a User starts running.
|
134
134
|
"""
|