locust 2.24.2.dev24__tar.gz → 2.25.1.dev8__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.dev24 → locust-2.25.1.dev8}/.github/workflows/tests.yml +0 -1
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/CHANGELOG.md +29 -2
- {locust-2.24.2.dev24/locust.egg-info → locust-2.25.1.dev8}/PKG-INFO +4 -5
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/README.md +1 -1
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/changelog.rst +7 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/quickstart.rst +2 -2
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/writing-a-locustfile.rst +11 -9
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/_version.py +2 -2
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/contrib/fasthttp.py +4 -4
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/dispatch.py +44 -9
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_dispatch.py +69 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_fasthttp.py +1 -1
- {locust-2.24.2.dev24 → locust-2.25.1.dev8/locust.egg-info}/PKG-INFO +4 -5
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/requires.txt +1 -1
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/pyproject.toml +10 -4
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/tox.ini +1 -1
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.coveragerc +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.dockerignore +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.git-blame-ignore-revs +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.gitattributes +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/CONTRIBUTING.md +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/workflows/stale.yml +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.gitignore +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.readthedocs.yaml +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/extensions.json +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/launch.json +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/launch_locust.json +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/settings.json +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/Dockerfile +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/LICENSE +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/MANIFEST.in +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/Makefile +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/README +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/SECURITY.md +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/Vagrantfile +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/benchmarks/dispatch.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/_static/theme-overrides.css +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/api.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/conf.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/configuration.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/custom-load-shape.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/developing-locust.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/extending-locust.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/further-reading.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/history.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/extend_modern_web_ui_cache_stats.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/locust_workers.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/number_of_users.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/response_times.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/total_requests_per_second.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/userclass_picker_example.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/webui-running-statistics.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/webui-splash-screenshot.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/increase-performance.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/index.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/installation.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/logging.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/requirements.txt +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/retrieving-stats.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-cloud-integration.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-distributed.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-in-debugger.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-in-docker.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-without-web-ui.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/tasksets.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/testing-other-systems.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/use-as-lib.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/what-is-locust.rst +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/add_command_line_argument.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/basic.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/browse_docs_sequence_test.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/browse_docs_test.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_messages.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/double_wave.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/stages.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/staging_user_classes.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/step_load.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/wait_user_count.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_wait_function.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_xmlrpc_client/server.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/debugging.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/debugging_advanced.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/docker-compose/docker-compose.yml +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/dynamic_user_credentials.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/events.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_modern_web_ui.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/extend.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/static/extend.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/templates/extend.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/fast_http_locust.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/grpc_user.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello.proto +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello_pb2.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello_pb2_grpc.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello_server.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/manual_stats_reporting.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/multiple_hosts.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/nested_inline_tasksets.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/rest.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/semaphore_wait.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/stop_on_threshold.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/README.md +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/data_subnet.tf +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/main.tf +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/output.tf +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/plan/basic.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/provisioner.tf +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/variables.tf +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/test_data_management.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/use_as_lib.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/vagrant/README.md +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/vagrant/supervisord.conf +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/web_ui_auth.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/web_ui_cache_stats.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/worker_index.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/generate_changelog.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/__init__.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/__main__.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/argument_parser.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/clients.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/contrib/__init__.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/debug.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/env.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/event.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/exception.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/html.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/input_events.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/log.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/main.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/py.typed +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/rpc/__init__.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/rpc/protocol.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/runners.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/shape.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/chart.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/application.css +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/application.css.map +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/tables.css +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/tables.css.map +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/echarts.common.min.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/favicon.ico +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/logo.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-charts.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-start-test.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-stats.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-workers.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/jquery-1.11.3.min.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/jquery.jqote2.min.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/jquery.tools.min.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/locust.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/_base.sass +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/_mixins.sass +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/application.sass +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/tables.sass +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/tasks.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/vintage.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/stats.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/templates/index.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/templates/report.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/templates/stats_data.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/__init__.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/fake_module1_for_env_test.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/fake_module2_for_env_test.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/mock_locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/mock_logging.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_debugging.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_env.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_http.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_interruptable_task.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_load_locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_locust_class.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_log.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_main.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_old_wait_api.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_parser.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_runners.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_sequential_taskset.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_stats.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_tags.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_taskratio.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_users.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_util.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_wait_time.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_web.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_zmqrpc.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/testcases.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/util.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/__init__.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/inspectuser.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/sequential_taskset.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/task.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/users.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/wait_time.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/__init__.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/cache.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/deprecation.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/exception_handler.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/load_locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/rounding.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/timespan.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/web.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/.eslintrc +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/.gitignore +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/.prettierrc +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/auth.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dev.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/assets/favicon.ico +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/assets/index-941b6e82.js +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/assets/logo.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/auth.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/index.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/report.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/index.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/package.json +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/public/assets/favicon.ico +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/public/assets/logo.png +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/public/report.html +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/App.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/App.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/FallbackRender/FallbackRender.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/FallbackRender/FallbackRender.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/Form.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/Select.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Layout.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Modal/Modal.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Reports/Reports.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Table/Table.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Table/Table.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/constants/auth.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/constants/swarm.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/constants/theme.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/global.d.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useInterval.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useNotifications.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useSortByField.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/index.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/Auth.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/Dashboard.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/HtmlReport.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/tests/Auth.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/tests/Dashboard.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/tests/HtmlReport.test.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/api/swarm.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/hooks.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/root.slice.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/url.slice.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/store.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/utils.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/styles/theme.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/constants.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/setup.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/testUtils.tsx +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/auth.types.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/swarm.types.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/tab.types.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/table.types.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/ui.types.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/number.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/object.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/string.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/number.test.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/object.test.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/string.test.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/url.test.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/url.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/tsconfig.json +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/vite.config.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/vitest.config.ts +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/yarn.lock +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/SOURCES.txt +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/dependency_links.txt +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/entry_points.txt +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/not-zip-safe +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/top_level.txt +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/package.json +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/locustfile.py +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-disributed-headless.sh +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-disributed-web.sh +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-local-headless.sh +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-local-web.sh +0 -0
- {locust-2.24.2.dev24 → locust-2.25.1.dev8}/setup.cfg +0 -0
@@ -24,7 +24,6 @@ jobs:
|
|
24
24
|
- { name: "3.11", python: "3.11", os: ubuntu-latest, tox: py311 }
|
25
25
|
- { name: "3.10", python: "3.10", os: ubuntu-latest, tox: py310 }
|
26
26
|
- { name: "3.9", python: "3.9", os: ubuntu-latest, tox: py39 }
|
27
|
-
- { name: "3.8", python: "3.8", os: ubuntu-latest, tox: py38 }
|
28
27
|
|
29
28
|
steps:
|
30
29
|
- uses: actions/checkout@v3
|
@@ -1,6 +1,33 @@
|
|
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.25.0](https://github.com/locustio/locust/tree/2.25.0) (2024-04-14)
|
5
|
+
|
6
|
+
[Full Changelog](https://github.com/locustio/locust/compare/2.24.1...2.25.0)
|
7
|
+
|
8
|
+
**Fixed bugs:**
|
9
|
+
|
10
|
+
- Wrong distribution of virtual users by user classes [\#2662](https://github.com/locustio/locust/issues/2662)
|
11
|
+
- Monkey patching error [\#2661](https://github.com/locustio/locust/issues/2661)
|
12
|
+
- cannot specify task of UserClass when locust run on distributed mode [\#2657](https://github.com/locustio/locust/issues/2657)
|
13
|
+
- \[ModernUI\] HTML entities are incorrectly escaped in generated report [\#2635](https://github.com/locustio/locust/issues/2635)
|
14
|
+
- Bug / Feature request: Time intensive `custom_messages` functions trigger heartbeat timeout [\#2608](https://github.com/locustio/locust/issues/2608)
|
15
|
+
|
16
|
+
**Closed issues:**
|
17
|
+
|
18
|
+
- Add an UI extension exemple that display proxy cache hit/miss [\#2644](https://github.com/locustio/locust/issues/2644)
|
19
|
+
|
20
|
+
**Merged pull requests:**
|
21
|
+
|
22
|
+
- Log deprecation warning for --legacy-ui [\#2670](https://github.com/locustio/locust/pull/2670) ([cyberw](https://github.com/cyberw))
|
23
|
+
- Add an example that displays cache stats using the new UI. [\#2669](https://github.com/locustio/locust/pull/2669) ([obriat](https://github.com/obriat))
|
24
|
+
- Update User Classes in Distributed Mode [\#2666](https://github.com/locustio/locust/pull/2666) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
|
25
|
+
- fix\(dispatch\): UserClasses weight distribution with gcd [\#2663](https://github.com/locustio/locust/pull/2663) ([llirrikk](https://github.com/llirrikk))
|
26
|
+
- chore: fix some comments [\#2659](https://github.com/locustio/locust/pull/2659) ([JohnEndson](https://github.com/JohnEndson))
|
27
|
+
- Fix issue with concurrent custom messages and docs [\#2654](https://github.com/locustio/locust/pull/2654) ([cyberw](https://github.com/cyberw))
|
28
|
+
- Add functionality to run listener functions for `custom_messages` concurrently [\#2650](https://github.com/locustio/locust/pull/2650) ([samuelspagl](https://github.com/samuelspagl))
|
29
|
+
- \[Modern UI\] Escape HTML Entities correctly in Exceptions Table [\#2648](https://github.com/locustio/locust/pull/2648) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
|
30
|
+
|
4
31
|
## [2.24.1](https://github.com/locustio/locust/tree/2.24.1) (2024-03-20)
|
5
32
|
|
6
33
|
[Full Changelog](https://github.com/locustio/locust/compare/2.24.0...2.24.1)
|
@@ -857,8 +884,8 @@ The most important changes can also be found in [the documentation](https://docs
|
|
857
884
|
**Merged pull requests:**
|
858
885
|
|
859
886
|
- Fire requests through Environment.events [\#1982](https://github.com/locustio/locust/pull/1982) ([BonelessPi](https://github.com/BonelessPi))
|
860
|
-
- Fix docs with underscore postfix for hyperlink? [\#1979](https://github.com/locustio/locust/pull/1979) ([
|
861
|
-
- Repair broken hyperlinks in documentation [\#1978](https://github.com/locustio/locust/pull/1978) ([
|
887
|
+
- Fix docs with underscore postfix for hyperlink? [\#1979](https://github.com/locustio/locust/pull/1979) ([jeroenhe](https://github.com/jeroenhe))
|
888
|
+
- Repair broken hyperlinks in documentation [\#1978](https://github.com/locustio/locust/pull/1978) ([jeroenhe](https://github.com/jeroenhe))
|
862
889
|
|
863
890
|
## [2.6.0](https://github.com/locustio/locust/tree/2.6.0) (2022-01-23)
|
864
891
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: locust
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.25.1.dev8
|
4
4
|
Summary: Developer friendly load testing framework
|
5
5
|
License: MIT
|
6
6
|
Project-URL: Homepage, https://github.com/locustio/locust
|
@@ -14,7 +14,6 @@ Classifier: License :: OSI Approved :: MIT License
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
15
15
|
Classifier: Programming Language :: Python
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
17
|
-
Classifier: Programming Language :: Python :: 3.8
|
18
17
|
Classifier: Programming Language :: Python :: 3.9
|
19
18
|
Classifier: Programming Language :: Python :: 3.10
|
20
19
|
Classifier: Programming Language :: Python :: 3.11
|
@@ -24,7 +23,7 @@ Classifier: Intended Audience :: System Administrators
|
|
24
23
|
Classifier: Topic :: Software Development :: Testing
|
25
24
|
Classifier: Topic :: Software Development :: Testing :: Traffic Generation
|
26
25
|
Classifier: Topic :: System :: Distributed Computing
|
27
|
-
Requires-Python: >=3.
|
26
|
+
Requires-Python: >=3.9
|
28
27
|
Description-Content-Type: text/markdown
|
29
28
|
License-File: LICENSE
|
30
29
|
Requires-Dist: gevent>=22.10.2
|
@@ -33,7 +32,7 @@ Requires-Dist: Werkzeug>=2.0.0
|
|
33
32
|
Requires-Dist: requests>=2.26.0
|
34
33
|
Requires-Dist: msgpack>=1.0.0
|
35
34
|
Requires-Dist: pyzmq>=25.0.0
|
36
|
-
Requires-Dist: geventhttpclient>=2.
|
35
|
+
Requires-Dist: geventhttpclient>=2.2.1
|
37
36
|
Requires-Dist: ConfigArgParse>=1.5.5
|
38
37
|
Requires-Dist: tomli>=1.1.0; python_version < "3.11"
|
39
38
|
Requires-Dist: psutil>=5.9.1
|
@@ -45,7 +44,7 @@ Requires-Dist: pywin32; platform_system == "Windows"
|
|
45
44
|
# Locust
|
46
45
|
|
47
46
|
[](https://pypi.org/project/locust/)
|
48
|
-
|
47
|
+

|
49
48
|
[](https://pepy.tech/project/locust)
|
50
49
|
[](https://github.com/locustio/locust/actions?query=workflow%3ATests)
|
51
50
|
[](https://github.com/locustio/locust/graphs/contributors)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Locust
|
2
2
|
|
3
3
|
[](https://pypi.org/project/locust/)
|
4
|
-
|
4
|
+

|
5
5
|
[](https://pepy.tech/project/locust)
|
6
6
|
[](https://github.com/locustio/locust/actions?query=workflow%3ATests)
|
7
7
|
[](https://github.com/locustio/locust/graphs/contributors)
|
@@ -4,6 +4,13 @@ Changelog Highlights
|
|
4
4
|
|
5
5
|
For full details of the Locust changelog, please see https://github.com/locustio/locust/blob/master/CHANGELOG.md
|
6
6
|
|
7
|
+
2.25.0
|
8
|
+
======
|
9
|
+
* Add functionality to run listener functions for `custom_messages` concurrently (https://github.com/locustio/locust/pull/2650)
|
10
|
+
* Update User Classes in Distributed Mode (https://github.com/locustio/locust/pull/2666)
|
11
|
+
* Log deprecation warning for --legacy-ui (https://github.com/locustio/locust/pull/2670)
|
12
|
+
* Fix UserClasses weight distribution with gcd (https://github.com/locustio/locust/pull/2663)
|
13
|
+
|
7
14
|
2.24.1
|
8
15
|
======
|
9
16
|
* Some documentation updates & minor fixes to UI
|
@@ -16,7 +16,7 @@ A Locust test is essentially just a Python program making requests to the system
|
|
16
16
|
self.client.get("/hello")
|
17
17
|
self.client.get("/world")
|
18
18
|
|
19
|
-
This user will make HTTP
|
19
|
+
This user will make an HTTP request to ``/hello``, and after that to ``/world``, and then repeat. For a full explanation and a more realistic example see :ref:`writing-a-locustfile`.
|
20
20
|
|
21
21
|
Change ``/hello`` and ``/world`` to some actual paths on the web site/service you want to test, put the code in a file named ``locustfile.py`` in your current directory and then run ``locust``:
|
22
22
|
|
@@ -24,7 +24,7 @@ Change ``/hello`` and ``/world`` to some actual paths on the web site/service yo
|
|
24
24
|
:substitutions:
|
25
25
|
|
26
26
|
$ locust
|
27
|
-
[2021-07-24 09:58:46,215] .../INFO/locust.main: Starting web interface at http
|
27
|
+
[2021-07-24 09:58:46,215] .../INFO/locust.main: Starting web interface at http://0.0.0.0:8089
|
28
28
|
[2021-07-24 09:58:46,285] .../INFO/locust.main: Starting Locust |version|
|
29
29
|
|
30
30
|
Locust's web interface
|
@@ -62,28 +62,30 @@ is executed. For more info see :ref:`wait-time`.
|
|
62
62
|
|
63
63
|
@task
|
64
64
|
def hello_world(self):
|
65
|
-
|
65
|
+
self.client.get("/hello")
|
66
|
+
self.client.get("/world")
|
66
67
|
|
67
|
-
Methods decorated with ``@task`` are the core of your locust file. For every running
|
68
|
-
Locust creates a greenlet (micro-thread), that will call those methods.
|
68
|
+
Methods decorated with ``@task`` are the core of your locust file. For every running User,
|
69
|
+
Locust creates a `greenlet <https://greenlet.readthedocs.io/en/stable/greenlet.html>`_ (a coroutine or "micro-thread"), that will call those methods.
|
70
|
+
Code within a task is executed sequentially (it is just regular Python code),
|
71
|
+
so ``/world`` wont be called until the response from ``/hello`` has been received.
|
69
72
|
|
70
73
|
.. code-block:: python
|
71
74
|
|
72
75
|
@task
|
73
76
|
def hello_world(self):
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
+
...
|
78
|
+
|
77
79
|
@task(3)
|
78
80
|
def view_items(self):
|
79
|
-
|
81
|
+
...
|
80
82
|
|
81
83
|
We've declared two tasks by decorating two methods with ``@task``, one of which has been given a higher weight (3).
|
82
84
|
When our ``QuickstartUser`` runs it'll pick one of the declared tasks - in this case either ``hello_world`` or
|
83
85
|
``view_items`` - and execute it. Tasks are picked at random, but you can give them different weighting. The above
|
84
86
|
configuration will make Locust three times more likely to pick ``view_items`` than ``hello_world``. When a task has
|
85
|
-
finished executing, the User will then sleep
|
86
|
-
|
87
|
+
finished executing, the User will then sleep for its specified wait time (in this case between 1 and 5 seconds).
|
88
|
+
Then it will pick a new task.
|
87
89
|
|
88
90
|
Note that only methods decorated with ``@task`` will be picked, so you can define your own internal helper methods any way you like.
|
89
91
|
|
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '2.
|
16
|
-
__version_tuple__ = version_tuple = (2,
|
15
|
+
__version__ = version = '2.25.1.dev8'
|
16
|
+
__version_tuple__ = version_tuple = (2, 25, 1, 'dev8')
|
@@ -306,11 +306,11 @@ class FastHttpUser(User):
|
|
306
306
|
connection_timeout: float = 60.0
|
307
307
|
"""Parameter passed to FastHttpSession"""
|
308
308
|
|
309
|
-
max_redirects: int =
|
310
|
-
"""Parameter passed to FastHttpSession.
|
309
|
+
max_redirects: int = 30
|
310
|
+
"""Parameter passed to FastHttpSession."""
|
311
311
|
|
312
|
-
max_retries: int =
|
313
|
-
"""Parameter passed to FastHttpSession.
|
312
|
+
max_retries: int = 0
|
313
|
+
"""Parameter passed to FastHttpSession."""
|
314
314
|
|
315
315
|
insecure: bool = True
|
316
316
|
"""Parameter passed to FastHttpSession. Default True, meaning no SSL verification."""
|
@@ -1,8 +1,10 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import contextlib
|
4
|
+
import functools
|
4
5
|
import itertools
|
5
6
|
import math
|
7
|
+
import sys
|
6
8
|
import time
|
7
9
|
from collections import defaultdict
|
8
10
|
from operator import attrgetter
|
@@ -16,6 +18,20 @@ if TYPE_CHECKING:
|
|
16
18
|
from locust.runners import WorkerNode
|
17
19
|
|
18
20
|
|
21
|
+
def compatible_math_gcd(*args: int) -> int:
|
22
|
+
"""
|
23
|
+
This function is a workaround for the fact that `math.gcd` in:
|
24
|
+
- 3.5 <= Python < 3.9 doesn't accept more than two arguments.
|
25
|
+
- 3.9 <= Python can accept more than two arguments.
|
26
|
+
See more at https://docs.python.org/3.9/library/math.html#math.gcd
|
27
|
+
"""
|
28
|
+
if (3, 5) <= sys.version_info < (3, 9):
|
29
|
+
return functools.reduce(math.gcd, args)
|
30
|
+
elif sys.version_info >= (3, 9):
|
31
|
+
return math.gcd(*args)
|
32
|
+
raise NotImplementedError("This function is only implemented for Python from 3.5")
|
33
|
+
|
34
|
+
|
19
35
|
# To profile line-by-line, uncomment the code below (i.e. `import line_profiler ...`) and
|
20
36
|
# place `@profile` on the functions/methods you wish to profile. Then, in the unit test you are
|
21
37
|
# running, use `from locust.dispatch import profile; profile.print_stats()` at the end of the unit test.
|
@@ -366,18 +382,37 @@ class UsersDispatcher(Iterator):
|
|
366
382
|
if not users:
|
367
383
|
return itertools.cycle([None])
|
368
384
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
385
|
+
def _get_order_of_magnitude(n: float) -> int:
|
386
|
+
"""Get how many times we need to multiply `n` to get an integer-like number.
|
387
|
+
For example:
|
388
|
+
0.1 would return 10,
|
389
|
+
0.04 would return 100,
|
390
|
+
0.0007 would return 10000.
|
391
|
+
"""
|
392
|
+
if n <= 0:
|
393
|
+
raise ValueError("To get the order of magnitude, the number must be greater than 0.")
|
394
|
+
|
395
|
+
counter = 0
|
396
|
+
while n < 1:
|
397
|
+
n *= 10
|
398
|
+
counter += 1
|
399
|
+
return 10**counter
|
400
|
+
|
401
|
+
# Get maximum order of magnitude to "normalize the weights".
|
402
|
+
# "Normalizing the weights" is to multiply all weights by the same number so that
|
403
|
+
# they become integers. Then we can find the largest common divisor of all the
|
404
|
+
# weights, divide them by it and get the smallest possible numbers with the same
|
405
|
+
# ratio as the numbers originally had.
|
406
|
+
max_order_of_magnitude = _get_order_of_magnitude(min(abs(u[1]) for u in users))
|
407
|
+
weights = tuple(int(u[1] * max_order_of_magnitude) for u in users)
|
408
|
+
|
409
|
+
greatest_common_divisor = compatible_math_gcd(*weights)
|
375
410
|
normalized_values = [
|
376
411
|
(
|
377
|
-
user.__name__,
|
378
|
-
|
412
|
+
user[0].__name__,
|
413
|
+
normalized_weight // greatest_common_divisor,
|
379
414
|
)
|
380
|
-
for user,
|
415
|
+
for user, normalized_weight in zip(users, weights)
|
381
416
|
]
|
382
417
|
generation_length_to_get_proper_distribution = sum(
|
383
418
|
normalized_val[1] for normalized_val in normalized_values
|
@@ -847,6 +847,75 @@ class TestRampUpUsersFromZero(unittest.TestCase):
|
|
847
847
|
delta = time.perf_counter() - ts
|
848
848
|
self.assertTrue(0 <= delta <= _TOLERANCE, delta)
|
849
849
|
|
850
|
+
def test_implementation_of_dispatch_distribution_with_gcd(self):
|
851
|
+
class User1(User):
|
852
|
+
weight = 4
|
853
|
+
|
854
|
+
class User2(User):
|
855
|
+
weight = 5
|
856
|
+
|
857
|
+
user_classes = [User1, User2]
|
858
|
+
worker_node1 = WorkerNode("1")
|
859
|
+
|
860
|
+
sleep_time = 0.2 # Speed-up test
|
861
|
+
|
862
|
+
users_dispatcher = UsersDispatcher(worker_nodes=[worker_node1], user_classes=user_classes)
|
863
|
+
users_dispatcher.new_dispatch(target_user_count=9, spawn_rate=9)
|
864
|
+
|
865
|
+
users_dispatcher._wait_between_dispatch = sleep_time
|
866
|
+
|
867
|
+
ts = time.perf_counter()
|
868
|
+
self.assertDictEqual(
|
869
|
+
next(users_dispatcher),
|
870
|
+
{
|
871
|
+
"1": {"User1": 4, "User2": 5},
|
872
|
+
},
|
873
|
+
)
|
874
|
+
delta = time.perf_counter() - ts
|
875
|
+
self.assertTrue(0 <= delta <= _TOLERANCE, delta)
|
876
|
+
|
877
|
+
ts = time.perf_counter()
|
878
|
+
self.assertRaises(StopIteration, lambda: next(users_dispatcher))
|
879
|
+
delta = time.perf_counter() - ts
|
880
|
+
self.assertTrue(0 <= delta <= _TOLERANCE, delta)
|
881
|
+
|
882
|
+
def test_implementation_of_dispatch_distribution_with_gcd_float_weight(self):
|
883
|
+
class User1(User):
|
884
|
+
weight = 0.8
|
885
|
+
|
886
|
+
class User2(User):
|
887
|
+
weight = 1
|
888
|
+
|
889
|
+
normalized_weights_to_min_int = 5 # User1: 0.8 * 5 = 4; User2: 1 * 5 = 5
|
890
|
+
|
891
|
+
user_classes = [User1, User2]
|
892
|
+
worker_node1 = WorkerNode("1")
|
893
|
+
|
894
|
+
sleep_time = 0.2 # Speed-up test
|
895
|
+
|
896
|
+
users_dispatcher = UsersDispatcher(worker_nodes=[worker_node1], user_classes=user_classes)
|
897
|
+
users_dispatcher.new_dispatch(target_user_count=18, spawn_rate=18)
|
898
|
+
|
899
|
+
users_dispatcher._wait_between_dispatch = sleep_time
|
900
|
+
|
901
|
+
ts = time.perf_counter()
|
902
|
+
self.assertDictEqual(
|
903
|
+
next(users_dispatcher),
|
904
|
+
{
|
905
|
+
"1": {
|
906
|
+
"User1": int(normalized_weights_to_min_int * User1.weight * 2),
|
907
|
+
"User2": int(normalized_weights_to_min_int * User2.weight * 2),
|
908
|
+
},
|
909
|
+
},
|
910
|
+
)
|
911
|
+
delta = time.perf_counter() - ts
|
912
|
+
self.assertTrue(0 <= delta <= _TOLERANCE, delta)
|
913
|
+
|
914
|
+
ts = time.perf_counter()
|
915
|
+
self.assertRaises(StopIteration, lambda: next(users_dispatcher))
|
916
|
+
delta = time.perf_counter() - ts
|
917
|
+
self.assertTrue(0 <= delta <= _TOLERANCE, delta)
|
918
|
+
|
850
919
|
|
851
920
|
class TestWaitBetweenDispatch(unittest.TestCase):
|
852
921
|
def test_wait_between_dispatch(self):
|
@@ -506,7 +506,7 @@ class TestFastHttpUserClass(WebserverTestCase):
|
|
506
506
|
|
507
507
|
def test_max_redirect_setting(self):
|
508
508
|
class MyUser(FastHttpUser):
|
509
|
-
max_redirects =
|
509
|
+
max_redirects = 0
|
510
510
|
host = "http://127.0.0.1:%i" % self.port
|
511
511
|
|
512
512
|
l = MyUser(self.environment)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: locust
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.25.1.dev8
|
4
4
|
Summary: Developer friendly load testing framework
|
5
5
|
License: MIT
|
6
6
|
Project-URL: Homepage, https://github.com/locustio/locust
|
@@ -14,7 +14,6 @@ Classifier: License :: OSI Approved :: MIT License
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
15
15
|
Classifier: Programming Language :: Python
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
17
|
-
Classifier: Programming Language :: Python :: 3.8
|
18
17
|
Classifier: Programming Language :: Python :: 3.9
|
19
18
|
Classifier: Programming Language :: Python :: 3.10
|
20
19
|
Classifier: Programming Language :: Python :: 3.11
|
@@ -24,7 +23,7 @@ Classifier: Intended Audience :: System Administrators
|
|
24
23
|
Classifier: Topic :: Software Development :: Testing
|
25
24
|
Classifier: Topic :: Software Development :: Testing :: Traffic Generation
|
26
25
|
Classifier: Topic :: System :: Distributed Computing
|
27
|
-
Requires-Python: >=3.
|
26
|
+
Requires-Python: >=3.9
|
28
27
|
Description-Content-Type: text/markdown
|
29
28
|
License-File: LICENSE
|
30
29
|
Requires-Dist: gevent>=22.10.2
|
@@ -33,7 +32,7 @@ Requires-Dist: Werkzeug>=2.0.0
|
|
33
32
|
Requires-Dist: requests>=2.26.0
|
34
33
|
Requires-Dist: msgpack>=1.0.0
|
35
34
|
Requires-Dist: pyzmq>=25.0.0
|
36
|
-
Requires-Dist: geventhttpclient>=2.
|
35
|
+
Requires-Dist: geventhttpclient>=2.2.1
|
37
36
|
Requires-Dist: ConfigArgParse>=1.5.5
|
38
37
|
Requires-Dist: tomli>=1.1.0; python_version < "3.11"
|
39
38
|
Requires-Dist: psutil>=5.9.1
|
@@ -45,7 +44,7 @@ Requires-Dist: pywin32; platform_system == "Windows"
|
|
45
44
|
# Locust
|
46
45
|
|
47
46
|
[](https://pypi.org/project/locust/)
|
48
|
-
|
47
|
+

|
49
48
|
[](https://pepy.tech/project/locust)
|
50
49
|
[](https://github.com/locustio/locust/actions?query=workflow%3ATests)
|
51
50
|
[](https://github.com/locustio/locust/graphs/contributors)
|
@@ -7,7 +7,7 @@ name = "locust"
|
|
7
7
|
license = { text = "MIT" }
|
8
8
|
description = "Developer friendly load testing framework"
|
9
9
|
dynamic = ["version"]
|
10
|
-
requires-python = ">=3.
|
10
|
+
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"gevent >=22.10.2",
|
13
13
|
"flask >=2.0.0",
|
@@ -15,7 +15,7 @@ dependencies = [
|
|
15
15
|
"requests >=2.26.0",
|
16
16
|
"msgpack >=1.0.0",
|
17
17
|
"pyzmq >=25.0.0",
|
18
|
-
"geventhttpclient >=2.
|
18
|
+
"geventhttpclient >=2.2.1",
|
19
19
|
"ConfigArgParse >=1.5.5",
|
20
20
|
"tomli >=1.1.0; python_version<'3.11'",
|
21
21
|
"psutil >=5.9.1",
|
@@ -31,7 +31,6 @@ classifiers = [
|
|
31
31
|
"Operating System :: OS Independent",
|
32
32
|
"Programming Language :: Python",
|
33
33
|
"Programming Language :: Python :: 3",
|
34
|
-
"Programming Language :: Python :: 3.8",
|
35
34
|
"Programming Language :: Python :: 3.9",
|
36
35
|
"Programming Language :: Python :: 3.10",
|
37
36
|
"Programming Language :: Python :: 3.11",
|
@@ -104,8 +103,15 @@ locust = "locust.main:main"
|
|
104
103
|
[tool.mypy]
|
105
104
|
# missing type stubs
|
106
105
|
ignore_missing_imports = true
|
107
|
-
python_version = "3.
|
106
|
+
python_version = "3.9"
|
108
107
|
|
109
108
|
[[tool.mypy.overrides]]
|
110
109
|
module = ["locust.dispatch"]
|
111
110
|
no_strict_optional = true
|
111
|
+
|
112
|
+
[tool.pyright]
|
113
|
+
exclude = [
|
114
|
+
"locust/test",
|
115
|
+
]
|
116
|
+
reportOptionalMemberAccess = "none"
|
117
|
+
analyzeUnannotatedFunctions = false
|
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
|