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.
Files changed (351) hide show
  1. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/workflows/tests.yml +0 -1
  2. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/CHANGELOG.md +29 -2
  3. {locust-2.24.2.dev24/locust.egg-info → locust-2.25.1.dev8}/PKG-INFO +4 -5
  4. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/README.md +1 -1
  5. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/changelog.rst +7 -0
  6. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/quickstart.rst +2 -2
  7. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/writing-a-locustfile.rst +11 -9
  8. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/_version.py +2 -2
  9. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/contrib/fasthttp.py +4 -4
  10. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/dispatch.py +44 -9
  11. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_dispatch.py +69 -0
  12. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_fasthttp.py +1 -1
  13. {locust-2.24.2.dev24 → locust-2.25.1.dev8/locust.egg-info}/PKG-INFO +4 -5
  14. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/requires.txt +1 -1
  15. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/pyproject.toml +10 -4
  16. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/tox.ini +1 -1
  17. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.coveragerc +0 -0
  18. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.dockerignore +0 -0
  19. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.git-blame-ignore-revs +0 -0
  20. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.gitattributes +0 -0
  21. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/CONTRIBUTING.md +0 -0
  22. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  23. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  25. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.github/workflows/stale.yml +0 -0
  26. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.gitignore +0 -0
  27. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.readthedocs.yaml +0 -0
  28. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/extensions.json +0 -0
  29. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/launch.json +0 -0
  30. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/launch_locust.json +0 -0
  31. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/.vscode/settings.json +0 -0
  32. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/Dockerfile +0 -0
  33. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/LICENSE +0 -0
  34. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/MANIFEST.in +0 -0
  35. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/Makefile +0 -0
  36. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/README +0 -0
  37. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/SECURITY.md +0 -0
  38. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/Vagrantfile +0 -0
  39. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/benchmarks/dispatch.py +0 -0
  40. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/_static/theme-overrides.css +0 -0
  41. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/api.rst +0 -0
  42. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/conf.py +0 -0
  43. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/configuration.rst +0 -0
  44. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/custom-load-shape.rst +0 -0
  45. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/developing-locust.rst +0 -0
  46. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/extending-locust.rst +0 -0
  47. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/further-reading.rst +0 -0
  48. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/history.rst +0 -0
  49. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/extend_modern_web_ui_cache_stats.png +0 -0
  50. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/locust_workers.png +0 -0
  51. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/number_of_users.png +0 -0
  52. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/response_times.png +0 -0
  53. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/total_requests_per_second.png +0 -0
  54. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/userclass_picker_example.png +0 -0
  55. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/webui-running-statistics.png +0 -0
  56. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/images/webui-splash-screenshot.png +0 -0
  57. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/increase-performance.rst +0 -0
  58. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/index.rst +0 -0
  59. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/installation.rst +0 -0
  60. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/logging.rst +0 -0
  61. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/requirements.txt +0 -0
  62. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/retrieving-stats.rst +0 -0
  63. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-cloud-integration.rst +0 -0
  64. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-distributed.rst +0 -0
  65. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-in-debugger.rst +0 -0
  66. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-in-docker.rst +0 -0
  67. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/running-without-web-ui.rst +0 -0
  68. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/tasksets.rst +0 -0
  69. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/testing-other-systems.rst +0 -0
  70. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/use-as-lib.rst +0 -0
  71. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/docs/what-is-locust.rst +0 -0
  72. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/add_command_line_argument.py +0 -0
  73. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/basic.py +0 -0
  74. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/browse_docs_sequence_test.py +0 -0
  75. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/browse_docs_test.py +0 -0
  76. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_messages.py +0 -0
  77. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/double_wave.py +0 -0
  78. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/stages.py +0 -0
  79. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/staging_user_classes.py +0 -0
  80. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/step_load.py +0 -0
  81. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_shape/wait_user_count.py +0 -0
  82. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_wait_function.py +0 -0
  83. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_xmlrpc_client/server.py +0 -0
  84. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
  85. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/debugging.py +0 -0
  86. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/debugging_advanced.py +0 -0
  87. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/docker-compose/docker-compose.yml +0 -0
  88. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/dynamic_user_credentials.py +0 -0
  89. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/events.py +0 -0
  90. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_modern_web_ui.py +0 -0
  91. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/extend.py +0 -0
  92. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
  93. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/static/extend.js +0 -0
  94. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/extend_web_ui/templates/extend.html +0 -0
  95. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/fast_http_locust.py +0 -0
  96. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/grpc_user.py +0 -0
  97. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello.proto +0 -0
  98. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello_pb2.py +0 -0
  99. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello_pb2_grpc.py +0 -0
  100. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/hello_server.py +0 -0
  101. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/grpc/locustfile.py +0 -0
  102. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/locustfile.py +0 -0
  103. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/manual_stats_reporting.py +0 -0
  104. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/multiple_hosts.py +0 -0
  105. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/nested_inline_tasksets.py +0 -0
  106. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/rest.py +0 -0
  107. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
  108. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/semaphore_wait.py +0 -0
  109. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/stop_on_threshold.py +0 -0
  110. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/README.md +0 -0
  111. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/data_subnet.tf +0 -0
  112. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/main.tf +0 -0
  113. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/output.tf +0 -0
  114. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/plan/basic.py +0 -0
  115. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/provisioner.tf +0 -0
  116. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/terraform/aws/variables.tf +0 -0
  117. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/test_data_management.py +0 -0
  118. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/use_as_lib.py +0 -0
  119. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/vagrant/README.md +0 -0
  120. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/vagrant/supervisord.conf +0 -0
  121. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/web_ui_auth.py +0 -0
  122. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/web_ui_cache_stats.py +0 -0
  123. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/examples/worker_index.py +0 -0
  124. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/generate_changelog.py +0 -0
  125. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/__init__.py +0 -0
  126. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/__main__.py +0 -0
  127. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/argument_parser.py +0 -0
  128. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/clients.py +0 -0
  129. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/contrib/__init__.py +0 -0
  130. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/debug.py +0 -0
  131. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/env.py +0 -0
  132. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/event.py +0 -0
  133. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/exception.py +0 -0
  134. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/html.py +0 -0
  135. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/input_events.py +0 -0
  136. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/log.py +0 -0
  137. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/main.py +0 -0
  138. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/py.typed +0 -0
  139. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/rpc/__init__.py +0 -0
  140. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/rpc/protocol.py +0 -0
  141. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/rpc/zmqrpc.py +0 -0
  142. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/runners.py +0 -0
  143. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/shape.py +0 -0
  144. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/chart.js +0 -0
  145. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/application.css +0 -0
  146. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/application.css.map +0 -0
  147. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/tables.css +0 -0
  148. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/css/tables.css.map +0 -0
  149. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/echarts.common.min.js +0 -0
  150. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/favicon.ico +0 -0
  151. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/logo.png +0 -0
  152. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-charts.png +0 -0
  153. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-start-test.png +0 -0
  154. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-stats.png +0 -0
  155. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/img/ui-screenshot-workers.png +0 -0
  156. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/jquery-1.11.3.min.js +0 -0
  157. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/jquery.jqote2.min.js +0 -0
  158. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/jquery.tools.min.js +0 -0
  159. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/locust.js +0 -0
  160. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/_base.sass +0 -0
  161. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/_mixins.sass +0 -0
  162. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/application.sass +0 -0
  163. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/sass/tables.sass +0 -0
  164. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/tasks.js +0 -0
  165. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/static/vintage.js +0 -0
  166. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/stats.py +0 -0
  167. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/templates/index.html +0 -0
  168. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/templates/report.html +0 -0
  169. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/templates/stats_data.html +0 -0
  170. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/__init__.py +0 -0
  171. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/fake_module1_for_env_test.py +0 -0
  172. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/fake_module2_for_env_test.py +0 -0
  173. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/mock_locustfile.py +0 -0
  174. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/mock_logging.py +0 -0
  175. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_debugging.py +0 -0
  176. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_env.py +0 -0
  177. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_http.py +0 -0
  178. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_interruptable_task.py +0 -0
  179. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_load_locustfile.py +0 -0
  180. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_locust_class.py +0 -0
  181. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_log.py +0 -0
  182. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_main.py +0 -0
  183. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_old_wait_api.py +0 -0
  184. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_parser.py +0 -0
  185. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_runners.py +0 -0
  186. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_sequential_taskset.py +0 -0
  187. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_stats.py +0 -0
  188. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_tags.py +0 -0
  189. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_taskratio.py +0 -0
  190. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_users.py +0 -0
  191. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_util.py +0 -0
  192. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_wait_time.py +0 -0
  193. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_web.py +0 -0
  194. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/test_zmqrpc.py +0 -0
  195. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/testcases.py +0 -0
  196. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/test/util.py +0 -0
  197. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/__init__.py +0 -0
  198. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/inspectuser.py +0 -0
  199. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/sequential_taskset.py +0 -0
  200. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/task.py +0 -0
  201. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/users.py +0 -0
  202. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/user/wait_time.py +0 -0
  203. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/__init__.py +0 -0
  204. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/cache.py +0 -0
  205. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/deprecation.py +0 -0
  206. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/exception_handler.py +0 -0
  207. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/load_locustfile.py +0 -0
  208. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/rounding.py +0 -0
  209. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/util/timespan.py +0 -0
  210. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/web.py +0 -0
  211. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/.eslintrc +0 -0
  212. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/.gitignore +0 -0
  213. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/.prettierrc +0 -0
  214. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/auth.html +0 -0
  215. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dev.html +0 -0
  216. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/assets/favicon.ico +0 -0
  217. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/assets/index-941b6e82.js +0 -0
  218. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/assets/logo.png +0 -0
  219. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/auth.html +0 -0
  220. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/index.html +0 -0
  221. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/dist/report.html +0 -0
  222. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/index.html +0 -0
  223. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/package.json +0 -0
  224. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/public/assets/favicon.ico +0 -0
  225. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/public/assets/logo.png +0 -0
  226. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/public/report.html +0 -0
  227. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/App.test.tsx +0 -0
  228. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/App.tsx +0 -0
  229. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
  230. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
  231. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
  232. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
  233. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/FallbackRender/FallbackRender.test.tsx +0 -0
  234. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/FallbackRender/FallbackRender.tsx +0 -0
  235. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/Form.tsx +0 -0
  236. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/Select.tsx +0 -0
  237. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
  238. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
  239. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
  240. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
  241. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Layout.tsx +0 -0
  242. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
  243. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
  244. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
  245. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
  246. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
  247. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
  248. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
  249. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
  250. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
  251. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
  252. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Modal/Modal.tsx +0 -0
  253. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
  254. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Reports/Reports.tsx +0 -0
  255. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
  256. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
  257. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
  258. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
  259. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
  260. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
  261. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
  262. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
  263. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
  264. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
  265. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
  266. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
  267. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
  268. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
  269. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
  270. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
  271. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
  272. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
  273. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
  274. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
  275. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
  276. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
  277. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Table/Table.test.tsx +0 -0
  278. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Table/Table.tsx +0 -0
  279. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
  280. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
  281. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
  282. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
  283. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
  284. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
  285. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/constants/auth.ts +0 -0
  286. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/constants/swarm.ts +0 -0
  287. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/constants/theme.ts +0 -0
  288. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/global.d.ts +0 -0
  289. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
  290. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
  291. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
  292. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
  293. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useInterval.ts +0 -0
  294. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useNotifications.ts +0 -0
  295. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
  296. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useSortByField.ts +0 -0
  297. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
  298. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/index.tsx +0 -0
  299. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/Auth.tsx +0 -0
  300. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/Dashboard.tsx +0 -0
  301. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/HtmlReport.tsx +0 -0
  302. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/tests/Auth.test.tsx +0 -0
  303. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/tests/Dashboard.test.tsx +0 -0
  304. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/pages/tests/HtmlReport.test.tsx +0 -0
  305. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/api/swarm.ts +0 -0
  306. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/hooks.ts +0 -0
  307. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
  308. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
  309. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/root.slice.ts +0 -0
  310. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
  311. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
  312. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
  313. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
  314. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/slice/url.slice.ts +0 -0
  315. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/store.ts +0 -0
  316. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/redux/utils.ts +0 -0
  317. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/styles/theme.ts +0 -0
  318. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/constants.ts +0 -0
  319. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
  320. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
  321. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/setup.ts +0 -0
  322. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/test/testUtils.tsx +0 -0
  323. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/auth.types.ts +0 -0
  324. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/swarm.types.ts +0 -0
  325. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/tab.types.ts +0 -0
  326. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/table.types.ts +0 -0
  327. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/types/ui.types.ts +0 -0
  328. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/number.ts +0 -0
  329. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/object.ts +0 -0
  330. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/string.ts +0 -0
  331. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/number.test.ts +0 -0
  332. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/object.test.ts +0 -0
  333. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/string.test.ts +0 -0
  334. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/tests/url.test.ts +0 -0
  335. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/src/utils/url.ts +0 -0
  336. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/tsconfig.json +0 -0
  337. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/vite.config.ts +0 -0
  338. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/vitest.config.ts +0 -0
  339. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust/webui/yarn.lock +0 -0
  340. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/SOURCES.txt +0 -0
  341. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/dependency_links.txt +0 -0
  342. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/entry_points.txt +0 -0
  343. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/not-zip-safe +0 -0
  344. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/locust.egg-info/top_level.txt +0 -0
  345. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/package.json +0 -0
  346. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/locustfile.py +0 -0
  347. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-disributed-headless.sh +0 -0
  348. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-disributed-web.sh +0 -0
  349. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-local-headless.sh +0 -0
  350. {locust-2.24.2.dev24 → locust-2.25.1.dev8}/scripts/run-local-web.sh +0 -0
  351. {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) ([jeroenhendricksen](https://github.com/jeroenhendricksen))
861
- - Repair broken hyperlinks in documentation [\#1978](https://github.com/locustio/locust/pull/1978) ([jeroenhendricksen](https://github.com/jeroenhendricksen))
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.24.2.dev24
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.8
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.0.11
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
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
48
- [![PyPI](https://img.shields.io/pypi/pyversions/locust.svg)](https://pypi.org/project/locust/)
47
+ ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flocustio%2Flocust%2Fmaster%2Fpyproject.toml&link=https%3A%2F%2Fpypi.org%2Fproject%2Flocust)
49
48
  [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
50
49
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
51
50
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
@@ -1,7 +1,7 @@
1
1
  # Locust
2
2
 
3
3
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
4
- [![PyPI](https://img.shields.io/pypi/pyversions/locust.svg)](https://pypi.org/project/locust/)
4
+ ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flocustio%2Flocust%2Fmaster%2Fpyproject.toml&link=https%3A%2F%2Fpypi.org%2Fproject%2Flocust)
5
5
  [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
6
6
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
7
7
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](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 requests to ``/hello``, and then ``/world``, again and again. For a full explanation and a more realistic example see :ref:`writing-a-locustfile`.
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://*:8089
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 user,
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
- self.client.get("/hello")
75
- self.client.get("/world")
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 during its wait time (in this case between 1 and 5 seconds).
86
- After its wait time it'll pick a new task and keep repeating that.
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.24.2.dev24'
16
- __version_tuple__ = version_tuple = (2, 24, 2, 'dev24')
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 = 5
310
- """Parameter passed to FastHttpSession. Default 5, meaning 4 redirects."""
309
+ max_redirects: int = 30
310
+ """Parameter passed to FastHttpSession."""
311
311
 
312
- max_retries: int = 1
313
- """Parameter passed to FastHttpSession. Default 1, meaning zero retries."""
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
- # Normalize the weights so that the smallest weight will be equal to "target_min_weight".
370
- # The value "2" was experimentally determined because it gave a better distribution especially
371
- # when dealing with weights which are close to each others, e.g. 1.5, 2, 2.4, etc.
372
- target_min_weight = 2
373
-
374
- # 'Value' here means weight or fixed count
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
- round(target_min_weight * value / min(u[1] for u in users)),
412
+ user[0].__name__,
413
+ normalized_weight // greatest_common_divisor,
379
414
  )
380
- for user, value in users
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 = 1 # max_redirects and max_retries are funny names, because they are actually max attempts
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.24.2.dev24
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.8
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.0.11
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
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
48
- [![PyPI](https://img.shields.io/pypi/pyversions/locust.svg)](https://pypi.org/project/locust/)
47
+ ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flocustio%2Flocust%2Fmaster%2Fpyproject.toml&link=https%3A%2F%2Fpypi.org%2Fproject%2Flocust)
49
48
  [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
50
49
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
51
50
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
@@ -4,7 +4,7 @@ Werkzeug>=2.0.0
4
4
  requests>=2.26.0
5
5
  msgpack>=1.0.0
6
6
  pyzmq>=25.0.0
7
- geventhttpclient>=2.0.11
7
+ geventhttpclient>=2.2.1
8
8
  ConfigArgParse>=1.5.5
9
9
  psutil>=5.9.1
10
10
  Flask-Login>=0.6.3
@@ -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.8"
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.0.11",
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.8"
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
@@ -3,7 +3,7 @@ skipsdist = True
3
3
  envlist =
4
4
  ruff
5
5
  mypy
6
- py{38,39,310,311,312}
6
+ py{39,310,311,312}
7
7
  fail_fast_test_main
8
8
 
9
9
  [testenv]
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