locust 2.23.2.dev7__tar.gz → 2.23.2.dev18__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.dev7 → locust-2.23.2.dev18}/.gitignore +1 -0
- {locust-2.23.2.dev7/locust.egg-info → locust-2.23.2.dev18}/PKG-INFO +1 -1
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/configuration.rst +1 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/running-cloud-integration.rst +4 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/terraform/aws/README.md +1 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/web_ui_auth.py +4 -2
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/_version.py +2 -2
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/dispatch.py +4 -3
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/env.py +4 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/runners.py +3 -3
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_env.py +13 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_runners.py +39 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/util.py +4 -1
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/user/task.py +1 -1
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/user/users.py +1 -1
- locust-2.23.2.dev7/locust/webui/dist/assets/index-af38c28c.js → locust-2.23.2.dev18/locust/webui/dist/assets/index-ad6f2665.js +58 -58
- locust-2.23.2.dev18/locust/webui/dist/assets/logo.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/dist/auth.html +1 -1
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/dist/index.html +1 -1
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/package.json +1 -0
- locust-2.23.2.dev18/locust/webui/src/components/FallbackRender/FallbackRender.tsx +12 -0
- locust-2.23.2.dev18/locust/webui/src/index.tsx +49 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/store.ts +2 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/yarn.lock +7 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18/locust.egg-info}/PKG-INFO +1 -1
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust.egg-info/SOURCES.txt +2 -1
- locust-2.23.2.dev7/locust/webui/public/assets/logo.png +0 -0
- locust-2.23.2.dev7/locust/webui/src/index.tsx +0 -43
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.coveragerc +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.dockerignore +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.git-blame-ignore-revs +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.gitattributes +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.github/CONTRIBUTING.md +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.github/workflows/stale.yml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.github/workflows/tests.yml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.readthedocs.yaml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.vscode/extensions.json +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.vscode/launch.json +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.vscode/launch_locust.json +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/.vscode/settings.json +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/CHANGELOG.md +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/Dockerfile +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/LICENSE +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/MANIFEST.in +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/Makefile +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/README +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/README.md +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/SECURITY.md +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/Vagrantfile +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/benchmarks/dispatch.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/_static/theme-overrides.css +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/api.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/changelog.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/conf.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/custom-load-shape.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/developing-locust.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/extending-locust.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/further-reading.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/history.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/images/locust_workers.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/images/number_of_users.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/images/response_times.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/images/total_requests_per_second.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/images/userclass_picker_example.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/images/webui-running-statistics.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/images/webui-splash-screenshot.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/increase-performance.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/index.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/installation.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/logging.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/quickstart.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/requirements.txt +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/retrieving-stats.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/running-distributed.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/running-in-debugger.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/running-in-docker.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/running-without-web-ui.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/tasksets.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/testing-other-systems.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/use-as-lib.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/what-is-locust.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/docs/writing-a-locustfile.rst +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/add_command_line_argument.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/basic.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/browse_docs_sequence_test.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/browse_docs_test.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_messages.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_shape/double_wave.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_shape/stages.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_shape/staging_user_classes.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_shape/step_load.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_shape/wait_user_count.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_wait_function.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_xmlrpc_client/server.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/debugging.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/debugging_advanced.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/docker-compose/docker-compose.yml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/dynamic_user_credentials.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/events.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/extend_modern_web_ui.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/extend_web_ui/extend.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/extend_web_ui/static/extend.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/extend_web_ui/templates/extend.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/fast_http_locust.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/grpc/grpc_user.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/grpc/hello.proto +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/grpc/hello_pb2.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/grpc/hello_pb2_grpc.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/grpc/hello_server.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/grpc/locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/manual_stats_reporting.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/multiple_hosts.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/nested_inline_tasksets.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/rest.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/semaphore_wait.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/stop_on_threshold.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/terraform/aws/data_subnet.tf +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/terraform/aws/main.tf +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/terraform/aws/output.tf +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/terraform/aws/plan/basic.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/terraform/aws/provisioner.tf +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/terraform/aws/variables.tf +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/test_data_management.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/use_as_lib.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/vagrant/README.md +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/vagrant/supervisord.conf +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/examples/worker_index.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/generate_changelog.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/__init__.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/__main__.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/argument_parser.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/clients.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/contrib/__init__.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/contrib/fasthttp.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/debug.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/event.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/exception.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/html.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/input_events.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/log.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/main.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/py.typed +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/rpc/__init__.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/rpc/protocol.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/shape.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/chart.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/css/application.css +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/css/application.css.map +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/css/tables.css +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/css/tables.css.map +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/echarts.common.min.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/img/favicon.ico +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/img/logo.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/img/ui-screenshot-charts.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/img/ui-screenshot-start-test.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/img/ui-screenshot-stats.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/img/ui-screenshot-workers.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/jquery-1.11.3.min.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/jquery.jqote2.min.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/jquery.tools.min.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/locust.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/sass/_base.sass +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/sass/_mixins.sass +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/sass/application.sass +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/sass/tables.sass +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/tasks.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/static/vintage.js +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/stats.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/templates/index.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/templates/report.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/templates/stats_data.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/__init__.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/fake_module1_for_env_test.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/fake_module2_for_env_test.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/mock_locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/mock_logging.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_debugging.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_dispatch.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_fasthttp.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_http.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_interruptable_task.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_load_locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_locust_class.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_log.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_main.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_old_wait_api.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_parser.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_sequential_taskset.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_stats.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_tags.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_taskratio.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_users.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_util.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_wait_time.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_web.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/test_zmqrpc.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/test/testcases.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/user/__init__.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/user/inspectuser.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/user/sequential_taskset.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/user/wait_time.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/util/__init__.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/util/cache.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/util/deprecation.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/util/exception_handler.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/util/load_locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/util/rounding.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/util/timespan.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/web.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/.eslintrc +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/.gitignore +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/.prettierrc +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/auth.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/dev.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/dist/assets/favicon.ico +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/dist/report.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/index.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/public/assets/favicon.ico +0 -0
- {locust-2.23.2.dev7/locust/webui/dist → locust-2.23.2.dev18/locust/webui/public}/assets/logo.png +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/public/report.html +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/App.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/Report.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/auth.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Form/Form.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Form/Select.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Layout/Layout.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Modal/Modal.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Reports/Reports.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Table/Table.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Table/Table.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/constants/swarm.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/constants/theme.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/global.d.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/useInterval.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/useNotifications.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/useSortByField.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/api/swarm.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/hooks.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/root.slice.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/slice/url.slice.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/redux/utils.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/styles/theme.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/test/constants.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/test/setup.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/test/testUtils.tsx +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/types/auth.types.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/types/swarm.types.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/types/tab.types.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/types/table.types.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/types/ui.types.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/number.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/object.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/string.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/tests/number.test.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/tests/object.test.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/tests/string.test.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/tests/url.test.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/src/utils/url.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/tsconfig.json +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/vite.config.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust/webui/vitest.config.ts +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust.egg-info/dependency_links.txt +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust.egg-info/entry_points.txt +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust.egg-info/not-zip-safe +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust.egg-info/requires.txt +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/locust.egg-info/top_level.txt +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/package.json +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/pyproject.toml +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/scripts/locustfile.py +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/scripts/run-disributed-headless.sh +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/scripts/run-disributed-web.sh +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/scripts/run-local-headless.sh +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/scripts/run-local-web.sh +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/setup.cfg +0 -0
- {locust-2.23.2.dev7 → locust-2.23.2.dev18}/tox.ini +0 -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.dev18'
|
16
|
+
__version_tuple__ = version_tuple = (2, 23, 2, 'dev18')
|
@@ -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
|
"""
|