locust 2.24.2.dev3__tar.gz → 2.24.2.dev11__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.24.2.dev3 → locust-2.24.2.dev11}/PKG-INFO +1 -1
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/running-distributed.rst +12 -1
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_messages.py +10 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/_version.py +2 -2
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/runners.py +14 -6
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_runners.py +25 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust.egg-info/PKG-INFO +1 -1
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.coveragerc +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.dockerignore +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.git-blame-ignore-revs +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.gitattributes +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.github/CONTRIBUTING.md +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.github/workflows/stale.yml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.github/workflows/tests.yml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.gitignore +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.readthedocs.yaml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.vscode/extensions.json +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.vscode/launch.json +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.vscode/launch_locust.json +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/.vscode/settings.json +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/CHANGELOG.md +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/Dockerfile +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/LICENSE +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/MANIFEST.in +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/Makefile +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/README +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/README.md +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/SECURITY.md +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/Vagrantfile +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/benchmarks/dispatch.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/_static/theme-overrides.css +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/api.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/changelog.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/conf.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/configuration.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/custom-load-shape.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/developing-locust.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/extending-locust.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/further-reading.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/history.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/images/locust_workers.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/images/number_of_users.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/images/response_times.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/images/total_requests_per_second.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/images/userclass_picker_example.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/images/webui-running-statistics.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/images/webui-splash-screenshot.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/increase-performance.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/index.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/installation.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/logging.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/quickstart.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/requirements.txt +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/retrieving-stats.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/running-cloud-integration.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/running-in-debugger.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/running-in-docker.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/running-without-web-ui.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/tasksets.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/testing-other-systems.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/use-as-lib.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/what-is-locust.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/docs/writing-a-locustfile.rst +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/add_command_line_argument.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/basic.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/browse_docs_sequence_test.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/browse_docs_test.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_shape/double_wave.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_shape/stages.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_shape/staging_user_classes.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_shape/step_load.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_shape/wait_user_count.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_wait_function.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_xmlrpc_client/server.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/debugging.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/debugging_advanced.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/docker-compose/docker-compose.yml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/dynamic_user_credentials.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/events.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/extend_modern_web_ui.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/extend_web_ui/extend.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/extend_web_ui/static/extend.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/extend_web_ui/templates/extend.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/fast_http_locust.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/grpc/grpc_user.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/grpc/hello.proto +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/grpc/hello_pb2.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/grpc/hello_pb2_grpc.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/grpc/hello_server.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/grpc/locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/manual_stats_reporting.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/multiple_hosts.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/nested_inline_tasksets.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/rest.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/semaphore_wait.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/stop_on_threshold.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/terraform/aws/README.md +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/terraform/aws/data_subnet.tf +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/terraform/aws/main.tf +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/terraform/aws/output.tf +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/terraform/aws/plan/basic.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/terraform/aws/provisioner.tf +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/terraform/aws/variables.tf +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/test_data_management.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/use_as_lib.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/vagrant/README.md +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/vagrant/supervisord.conf +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/web_ui_auth.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/worker_index.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/generate_changelog.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/__init__.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/__main__.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/argument_parser.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/clients.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/contrib/__init__.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/contrib/fasthttp.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/debug.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/dispatch.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/env.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/event.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/exception.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/html.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/input_events.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/log.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/main.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/py.typed +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/rpc/__init__.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/rpc/protocol.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/shape.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/chart.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/css/application.css +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/css/application.css.map +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/css/tables.css +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/css/tables.css.map +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/echarts.common.min.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/img/favicon.ico +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/img/logo.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/img/ui-screenshot-charts.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/img/ui-screenshot-start-test.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/img/ui-screenshot-stats.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/img/ui-screenshot-workers.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/jquery-1.11.3.min.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/jquery.jqote2.min.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/jquery.tools.min.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/locust.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/sass/_base.sass +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/sass/_mixins.sass +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/sass/application.sass +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/sass/tables.sass +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/tasks.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/static/vintage.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/stats.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/templates/index.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/templates/report.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/templates/stats_data.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/__init__.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/fake_module1_for_env_test.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/fake_module2_for_env_test.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/mock_locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/mock_logging.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_debugging.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_dispatch.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_env.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_fasthttp.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_http.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_interruptable_task.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_load_locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_locust_class.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_log.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_main.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_old_wait_api.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_parser.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_sequential_taskset.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_stats.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_tags.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_taskratio.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_users.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_util.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_wait_time.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_web.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/test_zmqrpc.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/testcases.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/test/util.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/user/__init__.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/user/inspectuser.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/user/sequential_taskset.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/user/task.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/user/users.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/user/wait_time.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/util/__init__.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/util/cache.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/util/deprecation.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/util/exception_handler.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/util/load_locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/util/rounding.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/util/timespan.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/web.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/.eslintrc +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/.gitignore +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/.prettierrc +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/auth.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/dev.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/dist/assets/favicon.ico +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/dist/assets/index-941b6e82.js +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/dist/assets/logo.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/dist/auth.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/dist/index.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/dist/report.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/index.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/package.json +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/public/assets/favicon.ico +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/public/assets/logo.png +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/public/report.html +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/App.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/App.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/FallbackRender/FallbackRender.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/FallbackRender/FallbackRender.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Form/Form.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Form/Select.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Layout/Layout.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Modal/Modal.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Reports/Reports.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Table/Table.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Table/Table.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/constants/auth.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/constants/swarm.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/constants/theme.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/global.d.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/useInterval.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/useNotifications.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/useSortByField.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/index.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/pages/Auth.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/pages/Dashboard.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/pages/HtmlReport.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/pages/tests/Auth.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/pages/tests/Dashboard.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/pages/tests/HtmlReport.test.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/api/swarm.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/hooks.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/root.slice.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/slice/url.slice.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/store.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/redux/utils.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/styles/theme.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/test/constants.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/test/setup.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/test/testUtils.tsx +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/types/auth.types.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/types/swarm.types.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/types/tab.types.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/types/table.types.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/types/ui.types.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/number.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/object.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/string.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/tests/number.test.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/tests/object.test.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/tests/string.test.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/tests/url.test.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/src/utils/url.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/tsconfig.json +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/vite.config.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/vitest.config.ts +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust/webui/yarn.lock +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust.egg-info/SOURCES.txt +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust.egg-info/dependency_links.txt +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust.egg-info/entry_points.txt +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust.egg-info/not-zip-safe +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust.egg-info/requires.txt +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/locust.egg-info/top_level.txt +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/package.json +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/pyproject.toml +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/scripts/locustfile.py +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/scripts/run-disributed-headless.sh +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/scripts/run-disributed-web.sh +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/scripts/run-local-headless.sh +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/scripts/run-local-web.sh +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/setup.cfg +0 -0
- {locust-2.24.2.dev3 → locust-2.24.2.dev11}/tox.ini +0 -0
@@ -131,7 +131,18 @@ order to coordinate the test. This can be easily accomplished with custom messag
|
|
131
131
|
environment.runner.send_message('test_users', users)
|
132
132
|
|
133
133
|
Note that when running locally (i.e. non-distributed), this functionality will be preserved;
|
134
|
-
the messages will simply be handled by the runner that sends them.
|
134
|
+
the messages will simply be handled by the runner that sends them.
|
135
|
+
|
136
|
+
.. note::
|
137
|
+
Using the default options while registering a message handler will run the listener function
|
138
|
+
in a **blocking** way, resulting in the heartbeat and other messages being delayed for the amount
|
139
|
+
of the execution.
|
140
|
+
If you think that your message handler will need to run for more than a second then you can register it
|
141
|
+
as **concurrent**. Locust will then make it run in its own greenlet. Note that these greenlets will never
|
142
|
+
be join():ed.
|
143
|
+
|
144
|
+
.. code-block::
|
145
|
+
environment.runner.register_message('test_users', setup_test_users, concurrent=True)
|
135
146
|
|
136
147
|
For more details, see the `complete example <https://github.com/locustio/locust/tree/master/examples/custom_messages.py>`_.
|
137
148
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
from locust import HttpUser, between, events, task
|
2
2
|
from locust.runners import MasterRunner, WorkerRunner
|
3
3
|
|
4
|
+
import gevent
|
5
|
+
|
4
6
|
usernames = []
|
5
7
|
|
6
8
|
|
@@ -8,6 +10,7 @@ def setup_test_users(environment, msg, **kwargs):
|
|
8
10
|
# Fired when the worker receives a message of type 'test_users'
|
9
11
|
usernames.extend(map(lambda u: u["name"], msg.data))
|
10
12
|
environment.runner.send_message("acknowledge_users", f"Thanks for the {len(msg.data)} users!")
|
13
|
+
environment.runner.send_message("concurrent_message", "Message to concurrent handler")
|
11
14
|
|
12
15
|
|
13
16
|
def on_acknowledge(msg, **kwargs):
|
@@ -15,12 +18,19 @@ def on_acknowledge(msg, **kwargs):
|
|
15
18
|
print(msg.data)
|
16
19
|
|
17
20
|
|
21
|
+
def on_concurrent_message(msg, **kwargs):
|
22
|
+
print(f"concurrent_message received with data: '{msg.data}'")
|
23
|
+
gevent.sleep(10) # if this handler was run with concurrent=False it would halt the message handling loop in locust
|
24
|
+
print("finished processing concurrent_message")
|
25
|
+
|
26
|
+
|
18
27
|
@events.init.add_listener
|
19
28
|
def on_locust_init(environment, **_kwargs):
|
20
29
|
if not isinstance(environment.runner, MasterRunner):
|
21
30
|
environment.runner.register_message("test_users", setup_test_users)
|
22
31
|
if not isinstance(environment.runner, WorkerRunner):
|
23
32
|
environment.runner.register_message("acknowledge_users", on_acknowledge)
|
33
|
+
environment.runner.register_message("concurrent_message", on_concurrent_message, concurrent=True)
|
24
34
|
|
25
35
|
|
26
36
|
@events.test_start.add_listener
|
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '2.24.2.
|
16
|
-
__version_tuple__ = version_tuple = (2, 24, 2, '
|
15
|
+
__version__ = version = '2.24.2.dev11'
|
16
|
+
__version_tuple__ = version_tuple = (2, 24, 2, 'dev11')
|
@@ -119,7 +119,7 @@ class Runner:
|
|
119
119
|
self.target_user_classes_count: dict[str, int] = {}
|
120
120
|
# target_user_count is set before the ramp-up/ramp-down occurs.
|
121
121
|
self.target_user_count: int = 0
|
122
|
-
self.custom_messages: dict[str, Callable] = {}
|
122
|
+
self.custom_messages: dict[str, tuple[Callable, bool]] = {}
|
123
123
|
|
124
124
|
self._users_dispatcher: UsersDispatcher | None = None
|
125
125
|
|
@@ -420,7 +420,7 @@ class Runner:
|
|
420
420
|
row["nodes"].add(node_id)
|
421
421
|
self.exceptions[key] = row
|
422
422
|
|
423
|
-
def register_message(self, msg_type: str, listener: Callable) -> None:
|
423
|
+
def register_message(self, msg_type: str, listener: Callable, concurrent=False) -> None:
|
424
424
|
"""
|
425
425
|
Register a listener for a custom message from another node
|
426
426
|
|
@@ -429,7 +429,7 @@ class Runner:
|
|
429
429
|
"""
|
430
430
|
if msg_type in self.custom_messages:
|
431
431
|
raise Exception(f"Tried to register listener method for {msg_type}, but it already had a listener!")
|
432
|
-
self.custom_messages[msg_type] = listener
|
432
|
+
self.custom_messages[msg_type] = (listener, concurrent)
|
433
433
|
|
434
434
|
|
435
435
|
class LocalRunner(Runner):
|
@@ -568,7 +568,7 @@ class LocalRunner(Runner):
|
|
568
568
|
"""
|
569
569
|
logger.debug("Running locally: sending %s message to self" % msg_type)
|
570
570
|
if msg_type in self.custom_messages:
|
571
|
-
listener = self.custom_messages[msg_type]
|
571
|
+
listener, concurrent = self.custom_messages[msg_type]
|
572
572
|
msg = Message(msg_type, data, "local")
|
573
573
|
listener(environment=self.environment, msg=msg)
|
574
574
|
else:
|
@@ -1139,7 +1139,11 @@ class MasterRunner(DistributedRunner):
|
|
1139
1139
|
f"Received {msg.type} message from worker {msg.node_id} (index {self.get_worker_index(msg.node_id)})"
|
1140
1140
|
)
|
1141
1141
|
try:
|
1142
|
-
self.custom_messages[msg.type]
|
1142
|
+
listener, concurrent = self.custom_messages[msg.type]
|
1143
|
+
if not concurrent:
|
1144
|
+
listener(environment=self.environment, msg=msg)
|
1145
|
+
else:
|
1146
|
+
gevent.spawn(listener, environment=self.environment, msg=msg)
|
1143
1147
|
except Exception:
|
1144
1148
|
logging.error(f"Uncaught exception in handler for {msg.type}\n{traceback.format_exc()}")
|
1145
1149
|
|
@@ -1393,7 +1397,11 @@ class WorkerRunner(DistributedRunner):
|
|
1393
1397
|
self.last_heartbeat_timestamp = time.time()
|
1394
1398
|
elif msg.type in self.custom_messages:
|
1395
1399
|
logger.debug("Received %s message from master" % msg.type)
|
1396
|
-
self.custom_messages[msg.type]
|
1400
|
+
listener, concurrent = self.custom_messages[msg.type]
|
1401
|
+
if not concurrent:
|
1402
|
+
listener(environment=self.environment, msg=msg)
|
1403
|
+
else:
|
1404
|
+
gevent.spawn(listener, self.environment, msg)
|
1397
1405
|
else:
|
1398
1406
|
logger.warning(f"Unknown message type received: {msg.type}")
|
1399
1407
|
|
@@ -606,6 +606,31 @@ class TestLocustRunner(LocustRunnerTestCase):
|
|
606
606
|
self.assertTrue(test_custom_msg[0])
|
607
607
|
self.assertEqual(123, test_custom_msg_data[0]["test_data"])
|
608
608
|
|
609
|
+
def test_concurrent_custom_message(self):
|
610
|
+
class MyUser(User):
|
611
|
+
wait_time = constant(1)
|
612
|
+
|
613
|
+
@task
|
614
|
+
def my_task(self):
|
615
|
+
pass
|
616
|
+
|
617
|
+
test_custom_msg = [False]
|
618
|
+
test_custom_msg_data = [{}]
|
619
|
+
|
620
|
+
def on_custom_msg(msg, **kw):
|
621
|
+
test_custom_msg[0] = True
|
622
|
+
test_custom_msg_data[0] = msg.data
|
623
|
+
|
624
|
+
environment = Environment(user_classes=[MyUser])
|
625
|
+
runner = LocalRunner(environment)
|
626
|
+
|
627
|
+
runner.register_message("test_custom_msg", on_custom_msg, concurrent=True)
|
628
|
+
runner.send_message("test_custom_msg", {"test_data": 123})
|
629
|
+
|
630
|
+
gevent.sleep(0.5)
|
631
|
+
self.assertTrue(test_custom_msg[0])
|
632
|
+
self.assertEqual(123, test_custom_msg_data[0]["test_data"])
|
633
|
+
|
609
634
|
def test_undefined_custom_message(self):
|
610
635
|
class MyUser(User):
|
611
636
|
wait_time = constant(1)
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/extend_web_ui/static/custom-stats-table.css
RENAMED
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
|
{locust-2.24.2.dev3 → locust-2.24.2.dev11}/examples/sdk_session_patching/session_patch_locustfile.py
RENAMED
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|