locust 2.20.2.dev104__tar.gz → 2.21.1.dev7__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 (349) hide show
  1. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.github/workflows/tests.yml +1 -1
  2. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/CHANGELOG.md +38 -1
  3. {locust-2.20.2.dev104/locust.egg-info → locust-2.21.1.dev7}/PKG-INFO +1 -1
  4. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/changelog.rst +9 -0
  5. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/developing-locust.rst +1 -25
  6. locust-2.21.1.dev7/docs/images/number_of_users.png +0 -0
  7. locust-2.21.1.dev7/docs/images/response_times.png +0 -0
  8. locust-2.21.1.dev7/docs/images/total_requests_per_second.png +0 -0
  9. locust-2.21.1.dev7/docs/images/userclass_picker_example.png +0 -0
  10. locust-2.21.1.dev7/docs/images/webui-running-statistics.png +0 -0
  11. locust-2.21.1.dev7/docs/images/webui-splash-screenshot.png +0 -0
  12. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/quickstart.rst +3 -7
  13. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/what-is-locust.rst +1 -1
  14. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/_version.py +2 -2
  15. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/argument_parser.py +4 -4
  16. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/input_events.py +9 -5
  17. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/main.py +3 -3
  18. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_main.py +38 -8
  19. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_web.py +1 -2
  20. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/web.py +1 -1
  21. {locust-2.20.2.dev104 → locust-2.21.1.dev7/locust.egg-info}/PKG-INFO +1 -1
  22. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust.egg-info/SOURCES.txt +0 -1
  23. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/tox.ini +4 -4
  24. locust-2.20.2.dev104/docs/images/modern-webui-splash-screenshot.png +0 -0
  25. locust-2.20.2.dev104/docs/images/number_of_users.png +0 -0
  26. locust-2.20.2.dev104/docs/images/response_times.png +0 -0
  27. locust-2.20.2.dev104/docs/images/total_requests_per_second.png +0 -0
  28. locust-2.20.2.dev104/docs/images/userclass_picker_example.png +0 -0
  29. locust-2.20.2.dev104/docs/images/webui-running-statistics.png +0 -0
  30. locust-2.20.2.dev104/docs/images/webui-splash-screenshot.png +0 -0
  31. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.coveragerc +0 -0
  32. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.dockerignore +0 -0
  33. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.git-blame-ignore-revs +0 -0
  34. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.gitattributes +0 -0
  35. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.github/CONTRIBUTING.md +0 -0
  36. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  37. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  38. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  39. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.github/workflows/stale.yml +0 -0
  40. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.gitignore +0 -0
  41. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.readthedocs.yaml +0 -0
  42. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.vscode/extensions.json +0 -0
  43. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.vscode/launch.json +0 -0
  44. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.vscode/launch_locust.json +0 -0
  45. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/.vscode/settings.json +0 -0
  46. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/Dockerfile +0 -0
  47. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/LICENSE +0 -0
  48. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/MANIFEST.in +0 -0
  49. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/Makefile +0 -0
  50. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/README +0 -0
  51. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/README.md +0 -0
  52. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/SECURITY.md +0 -0
  53. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/Vagrantfile +0 -0
  54. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/benchmarks/dispatch.py +0 -0
  55. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/_static/theme-overrides.css +0 -0
  56. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/api.rst +0 -0
  57. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/conf.py +0 -0
  58. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/configuration.rst +0 -0
  59. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/custom-load-shape.rst +0 -0
  60. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/extending-locust.rst +0 -0
  61. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/further-reading.rst +0 -0
  62. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/history.rst +0 -0
  63. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/increase-performance.rst +0 -0
  64. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/index.rst +0 -0
  65. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/installation.rst +0 -0
  66. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/logging.rst +0 -0
  67. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/requirements.txt +0 -0
  68. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/retrieving-stats.rst +0 -0
  69. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/running-cloud-integration.rst +0 -0
  70. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/running-distributed.rst +0 -0
  71. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/running-in-debugger.rst +0 -0
  72. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/running-in-docker.rst +0 -0
  73. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/running-without-web-ui.rst +0 -0
  74. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/tasksets.rst +0 -0
  75. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/testing-other-systems.rst +0 -0
  76. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/use-as-lib.rst +0 -0
  77. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/docs/writing-a-locustfile.rst +0 -0
  78. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/add_command_line_argument.py +0 -0
  79. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/basic.py +0 -0
  80. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/browse_docs_sequence_test.py +0 -0
  81. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/browse_docs_test.py +0 -0
  82. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_messages.py +0 -0
  83. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_shape/double_wave.py +0 -0
  84. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_shape/stages.py +0 -0
  85. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_shape/staging_user_classes.py +0 -0
  86. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_shape/step_load.py +0 -0
  87. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_shape/wait_user_count.py +0 -0
  88. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_wait_function.py +0 -0
  89. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_xmlrpc_client/server.py +0 -0
  90. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
  91. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/debugging.py +0 -0
  92. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/debugging_advanced.py +0 -0
  93. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/docker-compose/docker-compose.yml +0 -0
  94. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/dynamic_user_credentials.py +0 -0
  95. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/events.py +0 -0
  96. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/extend_modern_web_ui.py +0 -0
  97. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/extend_web_ui/extend.py +0 -0
  98. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
  99. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/extend_web_ui/static/extend.js +0 -0
  100. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/extend_web_ui/templates/extend.html +0 -0
  101. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/fast_http_locust.py +0 -0
  102. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/grpc/grpc_user.py +0 -0
  103. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/grpc/hello.proto +0 -0
  104. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/grpc/hello_pb2.py +0 -0
  105. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/grpc/hello_pb2_grpc.py +0 -0
  106. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/grpc/hello_server.py +0 -0
  107. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/grpc/locustfile.py +0 -0
  108. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/locustfile.py +0 -0
  109. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/manual_stats_reporting.py +0 -0
  110. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/multiple_hosts.py +0 -0
  111. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/nested_inline_tasksets.py +0 -0
  112. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/rest.py +0 -0
  113. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
  114. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/semaphore_wait.py +0 -0
  115. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/stop_on_threshold.py +0 -0
  116. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/terraform/aws/README.md +0 -0
  117. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/terraform/aws/data_subnet.tf +0 -0
  118. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/terraform/aws/main.tf +0 -0
  119. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/terraform/aws/output.tf +0 -0
  120. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/terraform/aws/plan/basic.py +0 -0
  121. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/terraform/aws/provisioner.tf +0 -0
  122. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/terraform/aws/variables.tf +0 -0
  123. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/test_data_management.py +0 -0
  124. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/use_as_lib.py +0 -0
  125. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/vagrant/README.md +0 -0
  126. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/vagrant/supervisord.conf +0 -0
  127. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/web_ui_auth.py +0 -0
  128. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/examples/worker_index.py +0 -0
  129. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/generate_changelog.py +0 -0
  130. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/__init__.py +0 -0
  131. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/__main__.py +0 -0
  132. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/clients.py +0 -0
  133. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/contrib/__init__.py +0 -0
  134. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/contrib/fasthttp.py +0 -0
  135. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/debug.py +0 -0
  136. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/dispatch.py +0 -0
  137. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/env.py +0 -0
  138. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/event.py +0 -0
  139. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/exception.py +0 -0
  140. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/html.py +0 -0
  141. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/log.py +0 -0
  142. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/py.typed +0 -0
  143. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/rpc/__init__.py +0 -0
  144. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/rpc/protocol.py +0 -0
  145. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/rpc/zmqrpc.py +0 -0
  146. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/runners.py +0 -0
  147. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/shape.py +0 -0
  148. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/chart.js +0 -0
  149. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/css/application.css +0 -0
  150. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/css/application.css.map +0 -0
  151. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/css/tables.css +0 -0
  152. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/css/tables.css.map +0 -0
  153. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/echarts.common.min.js +0 -0
  154. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/img/favicon.ico +0 -0
  155. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/img/logo.png +0 -0
  156. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/img/ui-screenshot-charts.png +0 -0
  157. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/img/ui-screenshot-start-test.png +0 -0
  158. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/img/ui-screenshot-stats.png +0 -0
  159. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/img/ui-screenshot-workers.png +0 -0
  160. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/jquery-1.11.3.min.js +0 -0
  161. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/jquery.jqote2.min.js +0 -0
  162. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/jquery.tools.min.js +0 -0
  163. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/locust.js +0 -0
  164. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/sass/_base.sass +0 -0
  165. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/sass/_mixins.sass +0 -0
  166. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/sass/application.sass +0 -0
  167. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/sass/tables.sass +0 -0
  168. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/tasks.js +0 -0
  169. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/static/vintage.js +0 -0
  170. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/stats.py +0 -0
  171. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/templates/index.html +0 -0
  172. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/templates/report.html +0 -0
  173. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/templates/stats_data.html +0 -0
  174. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/__init__.py +0 -0
  175. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/fake_module1_for_env_test.py +0 -0
  176. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/fake_module2_for_env_test.py +0 -0
  177. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/mock_locustfile.py +0 -0
  178. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/mock_logging.py +0 -0
  179. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_debugging.py +0 -0
  180. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_dispatch.py +0 -0
  181. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_env.py +0 -0
  182. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_fasthttp.py +0 -0
  183. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_http.py +0 -0
  184. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_interruptable_task.py +0 -0
  185. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_load_locustfile.py +0 -0
  186. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_locust_class.py +0 -0
  187. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_log.py +0 -0
  188. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_old_wait_api.py +0 -0
  189. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_parser.py +0 -0
  190. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_runners.py +0 -0
  191. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_sequential_taskset.py +0 -0
  192. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_stats.py +0 -0
  193. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_tags.py +0 -0
  194. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_taskratio.py +0 -0
  195. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_users.py +0 -0
  196. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_util.py +0 -0
  197. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_wait_time.py +0 -0
  198. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/test_zmqrpc.py +0 -0
  199. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/testcases.py +0 -0
  200. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/test/util.py +0 -0
  201. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/user/__init__.py +0 -0
  202. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/user/inspectuser.py +0 -0
  203. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/user/sequential_taskset.py +0 -0
  204. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/user/task.py +0 -0
  205. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/user/users.py +0 -0
  206. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/user/wait_time.py +0 -0
  207. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/util/__init__.py +0 -0
  208. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/util/cache.py +0 -0
  209. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/util/deprecation.py +0 -0
  210. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/util/exception_handler.py +0 -0
  211. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/util/load_locustfile.py +0 -0
  212. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/util/rounding.py +0 -0
  213. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/util/timespan.py +0 -0
  214. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/.eslintrc +0 -0
  215. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/.gitignore +0 -0
  216. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/.prettierrc +0 -0
  217. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/auth.html +0 -0
  218. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dev.html +0 -0
  219. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/assets/auth-5e21717c.js.map +0 -0
  220. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/assets/favicon.ico +0 -0
  221. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/assets/index-a83a5dd9.js +0 -0
  222. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/assets/index-a83a5dd9.js.map +0 -0
  223. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/assets/logo.png +0 -0
  224. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/auth.html +0 -0
  225. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/index.html +0 -0
  226. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/dist/report.html +0 -0
  227. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/index.html +0 -0
  228. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/package.json +0 -0
  229. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/public/assets/favicon.ico +0 -0
  230. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/public/assets/logo.png +0 -0
  231. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/public/report.html +0 -0
  232. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/App.tsx +0 -0
  233. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/Report.tsx +0 -0
  234. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/auth.tsx +0 -0
  235. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
  236. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
  237. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
  238. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
  239. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Form/Form.tsx +0 -0
  240. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Form/Select.tsx +0 -0
  241. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
  242. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
  243. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
  244. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
  245. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Layout/Layout.tsx +0 -0
  246. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
  247. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
  248. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
  249. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
  250. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
  251. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
  252. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
  253. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
  254. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
  255. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
  256. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Modal/Modal.tsx +0 -0
  257. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
  258. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Reports/Reports.tsx +0 -0
  259. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
  260. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
  261. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
  262. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
  263. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
  264. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
  265. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
  266. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
  267. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
  268. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
  269. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
  270. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
  271. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
  272. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
  273. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
  274. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
  275. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
  276. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
  277. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
  278. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
  279. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
  280. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
  281. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Table/Table.test.tsx +0 -0
  282. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Table/Table.tsx +0 -0
  283. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
  284. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
  285. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
  286. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
  287. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
  288. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
  289. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/constants/swarm.tsx +0 -0
  290. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/constants/theme.ts +0 -0
  291. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/global.d.ts +0 -0
  292. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
  293. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
  294. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
  295. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
  296. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/useInterval.ts +0 -0
  297. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/useNotifications.ts +0 -0
  298. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
  299. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/useSortByField.ts +0 -0
  300. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
  301. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/index.tsx +0 -0
  302. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/api/swarm.ts +0 -0
  303. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/hooks.ts +0 -0
  304. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
  305. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
  306. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/root.slice.ts +0 -0
  307. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
  308. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
  309. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
  310. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
  311. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/slice/url.slice.ts +0 -0
  312. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/store.ts +0 -0
  313. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/redux/utils.ts +0 -0
  314. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/styles/theme.ts +0 -0
  315. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/test/constants.ts +0 -0
  316. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
  317. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
  318. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/test/setup.ts +0 -0
  319. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/test/testUtils.tsx +0 -0
  320. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/types/auth.types.ts +0 -0
  321. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/types/swarm.types.ts +0 -0
  322. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/types/tab.types.ts +0 -0
  323. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/types/table.types.ts +0 -0
  324. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/types/ui.types.ts +0 -0
  325. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/number.ts +0 -0
  326. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/object.ts +0 -0
  327. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/string.ts +0 -0
  328. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/tests/number.test.ts +0 -0
  329. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/tests/object.test.ts +0 -0
  330. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/tests/string.test.ts +0 -0
  331. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/tests/url.test.ts +0 -0
  332. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/src/utils/url.ts +0 -0
  333. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/tsconfig.json +0 -0
  334. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/vite.config.ts +0 -0
  335. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/vitest.config.ts +0 -0
  336. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust/webui/yarn.lock +0 -0
  337. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust.egg-info/dependency_links.txt +0 -0
  338. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust.egg-info/entry_points.txt +0 -0
  339. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust.egg-info/not-zip-safe +0 -0
  340. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust.egg-info/requires.txt +0 -0
  341. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/locust.egg-info/top_level.txt +0 -0
  342. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/package.json +0 -0
  343. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/pyproject.toml +0 -0
  344. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/scripts/locustfile.py +0 -0
  345. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/scripts/run-disributed-headless.sh +0 -0
  346. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/scripts/run-disributed-web.sh +0 -0
  347. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/scripts/run-local-headless.sh +0 -0
  348. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/scripts/run-local-web.sh +0 -0
  349. {locust-2.20.2.dev104 → locust-2.21.1.dev7}/setup.cfg +0 -0
@@ -14,7 +14,7 @@ jobs:
14
14
  fail-fast: false
15
15
  matrix:
16
16
  include:
17
- #- {name: Windows, python: '3.9', os: windows-latest, tox: py39}
17
+ - {name: Windows, python: '3.12', os: windows-latest, tox: fail_fast_test_main}
18
18
  #- {name: Mac, python: '3.9', os: macos-latest, tox: py39}
19
19
  - { name: "ruff", python: "3.11", os: ubuntu-latest, tox: "ruff" }
20
20
  - { name: "mypy", python: "3.10", os: ubuntu-latest, tox: "mypy" }
@@ -1,6 +1,43 @@
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.21.0](https://github.com/locustio/locust/tree/2.21.0) (2024-01-27)
5
+
6
+ [Full Changelog](https://github.com/locustio/locust/compare/2.20.1...2.21.0)
7
+
8
+ **Fixed bugs:**
9
+
10
+ - 95th percentile line chart does not display correctly on the Response Times \(ms\) graph [\#2540](https://github.com/locustio/locust/issues/2540)
11
+ - ValueError: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 152 from C header, got 40 from PyObject [\#2539](https://github.com/locustio/locust/issues/2539)
12
+ - TaskSet missing \_cp\_last\_run attribute [\#2532](https://github.com/locustio/locust/issues/2532)
13
+ - Modern UI "forgets" the selected user count and ramp up rate when starting a new test or editing a running one [\#2531](https://github.com/locustio/locust/issues/2531)
14
+ - Update dependency or remove support for Basic Auth for the Web UI [\#2517](https://github.com/locustio/locust/issues/2517)
15
+
16
+ **Closed issues:**
17
+
18
+ - Unifying percentile displays in Locust's statistics screens [\#2546](https://github.com/locustio/locust/issues/2546)
19
+ - Improve the Class Picker [\#2545](https://github.com/locustio/locust/issues/2545)
20
+ - Add `response.ok` support to `FastHttpUser`'s `FastResponse`, ala `HttpUser`/requests [\#2520](https://github.com/locustio/locust/issues/2520)
21
+
22
+ **Merged pull requests:**
23
+
24
+ - Optimize memory usage when using --processes [\#2564](https://github.com/locustio/locust/pull/2564) ([cyberw](https://github.com/cyberw))
25
+ - docs: update developing-locust.rst \(black, flake8\) -\> ruff [\#2562](https://github.com/locustio/locust/pull/2562) ([tdadela](https://github.com/tdadela))
26
+ - Allow User weight adjustment \(and task selection\) in UI when running with --class-picker, or on command line with --config-users argument [\#2559](https://github.com/locustio/locust/pull/2559) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
27
+ - Ruff enable isort \(with custom sections\) [\#2556](https://github.com/locustio/locust/pull/2556) ([tdadela](https://github.com/tdadela))
28
+ - update readthedocs-sphinx-search [\#2553](https://github.com/locustio/locust/pull/2553) ([cyberw](https://github.com/cyberw))
29
+ - Fix pedantic typo in the index.html template [\#2552](https://github.com/locustio/locust/pull/2552) ([marcelofern](https://github.com/marcelofern))
30
+ - Ruff set python version and enable more rules [\#2551](https://github.com/locustio/locust/pull/2551) ([tdadela](https://github.com/tdadela))
31
+ - Customization Feature for Percentile Display on Statistics Page [\#2550](https://github.com/locustio/locust/pull/2550) ([FooQoo](https://github.com/FooQoo))
32
+ - Use ruff instead of flake8 and black for linting and formatting [\#2549](https://github.com/locustio/locust/pull/2549) ([cyberw](https://github.com/cyberw))
33
+ - Fix mypy configuration & upgrade typing [\#2548](https://github.com/locustio/locust/pull/2548) ([tdadela](https://github.com/tdadela))
34
+ - Fix Web UI Chart History [\#2544](https://github.com/locustio/locust/pull/2544) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
35
+ - Web UI Modern Auth [\#2538](https://github.com/locustio/locust/pull/2538) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
36
+ - Modern UI: Fix Default Values for Edit / Start New Test [\#2537](https://github.com/locustio/locust/pull/2537) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
37
+ - Added response.ok support to FastHttpUser's FastResponse class similar to HttpUser's Response [\#2535](https://github.com/locustio/locust/pull/2535) ([PankajKhanwani](https://github.com/PankajKhanwani))
38
+ - Update shape class' runner when Web UI picker is used [\#2534](https://github.com/locustio/locust/pull/2534) ([wiatrak2](https://github.com/wiatrak2))
39
+ - setting initial \_cp\_last\_run on TaskSet in order to allow constant\_pacing wait time strategy [\#2533](https://github.com/locustio/locust/pull/2533) ([ionutab](https://github.com/ionutab))
40
+
4
41
  ## [2.20.1](https://github.com/locustio/locust/tree/2.20.1) (2024-01-03)
5
42
 
6
43
  [Full Changelog](https://github.com/locustio/locust/compare/2.20.0...2.20.1)
@@ -81,7 +118,7 @@ The most important changes can also be found in [the documentation](https://docs
81
118
  - Update minimum version of various dependencies [\#2476](https://github.com/locustio/locust/pull/2476) ([cyberw](https://github.com/cyberw))
82
119
  - Stop worker from automatically quitting if connected to an older version master that doesnt send heartbeats [\#2475](https://github.com/locustio/locust/pull/2475) ([cyberw](https://github.com/cyberw))
83
120
  - Shut down workers if master goes missing for too long [\#2474](https://github.com/locustio/locust/pull/2474) ([cyberw](https://github.com/cyberw))
84
- - Add --processes parameter to automatically fork subprocesses [\#2472](https://github.com/locustio/locust/pull/2472) ([cyberw](https://github.com/cyberw))
121
+ - Add --processes parameter to automatically fork worker processes [\#2472](https://github.com/locustio/locust/pull/2472) ([cyberw](https://github.com/cyberw))
85
122
 
86
123
  ## [2.18.4](https://github.com/locustio/locust/tree/2.18.4) (2023-11-19)
87
124
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.20.2.dev104
3
+ Version: 2.21.1.dev7
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://locust.io/
@@ -4,6 +4,15 @@ 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.21.0
8
+ ======
9
+ * Switch from flake8 + black to ruff for linting and formatting of code
10
+ * Update shape class' runner when Web UI picker is used by https://github.com/locustio/locust/pull/2534
11
+ * Web UI Modern Auth https://github.com/locustio/locust/pull/2538
12
+ * Customization Feature for Percentile Display on Statistics Page https://github.com/locustio/locust/pull/2550
13
+ * Allow User weight adjustment (and task selection) in UI when running with --class-picker, or on command line with --config-users argument https://github.com/locustio/locust/pull/2559
14
+ * Optimize memory usage when using --processes by @cyberw in https://github.com/locustio/locust/pull/2564
15
+
7
16
  2.20.1
8
17
  ======
9
18
  * run_single_user improvements https://github.com/locustio/locust/pull/2519
@@ -88,30 +88,6 @@ Then the documentation should be build and available at ``docs/_build/index.html
88
88
  Making changes to Locust's Web UI
89
89
  =================================
90
90
 
91
- The CSS styling for Locust's user interface is written in `SASS <https://sass-lang.com/>`_.
92
- In order to make changes to the CSS rules, you need to have SASS `installed <https://sass-lang.com/install>`_
93
- and available on your ``PATH``.
94
-
95
- Once you have SASS installed you can have the command line sass program compile the Locust ``.sass`` files
96
- by running the following in the locust project's root path:
97
-
98
- .. code-block:: console
99
-
100
- $ make sass_build
101
-
102
-
103
- Or you can make sass watch for changes to the ``.sass`` files and automatically generate new CSS files by running:
104
-
105
- .. code-block:: console
106
-
107
- $ make sass_watch
108
-
109
- The CSS files that are generated by SASS should be checked into version control.
110
-
111
-
112
- Making changes to Locust's Modern Web UI
113
- ========================================
114
-
115
91
  The modern Web UI is built using React and Typescript
116
92
 
117
93
  Setup
@@ -160,7 +136,7 @@ Developing
160
136
 
161
137
  To develop the frontend, run ``yarn dev``. This will start the Vite dev server and allow for viewing and editing the frontend, without needing to a run a locust web server
162
138
 
163
- To develop while running a locust instance, run ``yarn dev:watch``. This will output the static files to the ``dist`` directory. Then simply a locust instance using the ``--modern-ui`` flag. Vite will automatically detect any changed files and re-build as needed. Simply refresh the page to view the changes
139
+ To develop while running a locust instance, run ``yarn dev:watch``. This will output the static files to the ``dist`` directory. Vite will automatically detect any changed files and re-build as needed. Simply refresh the page to view the changes
164
140
 
165
141
  To compile the webui, run ``yarn build``
166
142
 
@@ -28,7 +28,7 @@ Change ``/hello`` and ``/world`` to some actual paths on the web site/service yo
28
28
  [2021-07-24 09:58:46,285] .../INFO/locust.main: Starting Locust |version|
29
29
 
30
30
  Locust's web interface
31
- ==============================
31
+ ======================
32
32
 
33
33
  Open http://localhost:8089
34
34
 
@@ -36,7 +36,7 @@ Open http://localhost:8089
36
36
 
37
37
  | Provide the host name of your server and try it out!
38
38
 
39
- The following screenshots show what it might look like when running this test using 40 concurrent users, with a ramp up rate of 0.5 users/s, against a server with somewhat poor performance.
39
+ The following screenshots show what it might look like when running this test using 50 concurrent users, with a ramp up rate of 1 users/s
40
40
 
41
41
  .. image:: images/webui-running-statistics.png
42
42
 
@@ -58,13 +58,9 @@ The following screenshots show what it might look like when running this test us
58
58
 
59
59
  If you need some help digging into server side problems, or you're having trouble generating enough load to saturate your system, have a look at the `Locust FAQ <https://github.com/locustio/locust/wiki/FAQ#increase-my-request-raterps>`_.
60
60
 
61
- There is now a modern version of the Web UI available! Try it out by setting the ``--modern-ui`` flag.
62
-
63
- .. image:: images/modern-webui-splash-screenshot.png
64
-
65
61
  .. note::
66
62
 
67
- This feature is experimental and you may experience breaking changes.
63
+ Things looking a little different? We've updated the U! If for whatever reason you need to use the old version, you can always revert back to it using the ``--legacy-ui`` flag.
68
64
 
69
65
  Direct command line usage / headless
70
66
  ====================================
@@ -42,7 +42,7 @@ Features
42
42
 
43
43
  * **Hackable**
44
44
 
45
- Locust is small and very flexible and we intend to keep it that way. If you want to `send reporting data to that database & graphing system you like <https://github.com/SvenskaSpel/locust-plugins/blob/master/locust_plugins/listeners.py>`_, wrap calls to a REST API to handle the particulars of your system or run a :ref:`totally custom load pattern <custom-load-shape>`, there is nothing stopping you!
45
+ Locust is small and very flexible and we intend to keep it that way. If you want to `send reporting data to that database & graphing system you like <https://github.com/SvenskaSpel/locust-plugins/tree/master/locust_plugins/dashboards>`_, wrap calls to a REST API to handle the particulars of your system or run a :ref:`totally custom load pattern <custom-load-shape>`, there is nothing stopping you!
46
46
 
47
47
  Name & background
48
48
  =================
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.20.2.dev104'
16
- __version_tuple__ = version_tuple = (2, 20, 2, 'dev104')
15
+ __version__ = version = '2.21.1.dev7'
16
+ __version_tuple__ = version_tuple = (2, 21, 1, 'dev7')
@@ -123,7 +123,7 @@ def find_locustfiles(locustfiles: list[str], is_directory: bool) -> list[str]:
123
123
  for root, dirs, files in os.walk(locustdir):
124
124
  for file in files:
125
125
  if not file.startswith("_") and file.lower() != "locust.py" and file.endswith(".py"):
126
- file_path = f"{root}/{file}"
126
+ file_path = os.path.join(root, file)
127
127
  file_paths.append(file_path)
128
128
  else:
129
129
  for file_path in locustfiles:
@@ -397,11 +397,11 @@ def setup_parser_arguments(parser):
397
397
  env_var="LOCUST_USERCLASS_PICKER",
398
398
  )
399
399
  web_ui_group.add_argument(
400
- "--modern-ui",
400
+ "--legacy-ui",
401
401
  default=False,
402
402
  action="store_true",
403
- help="Use the new React-based frontend for the web UI",
404
- env_var="LOCUST_MODERN_UI",
403
+ help="Use the legacy frontend for the web UI",
404
+ env_var="LOCUST_LEGACY_UI",
405
405
  )
406
406
 
407
407
  master_group = parser.add_argument_group(
@@ -8,6 +8,7 @@ from typing import Callable
8
8
  import gevent
9
9
 
10
10
  if os.name == "nt":
11
+ import pywintypes
11
12
  from win32api import STD_INPUT_HANDLE
12
13
  from win32console import (
13
14
  ENABLE_ECHO_INPUT,
@@ -48,11 +49,14 @@ class UnixKeyPoller:
48
49
  class WindowsKeyPoller:
49
50
  def __init__(self):
50
51
  if sys.stdin.isatty():
51
- self.read_handle = GetStdHandle(STD_INPUT_HANDLE)
52
- self.read_handle.SetConsoleMode(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT)
53
- self.cur_event_length = 0
54
- self.cur_keys_length = 0
55
- self.captured_chars = []
52
+ try:
53
+ self.read_handle = GetStdHandle(STD_INPUT_HANDLE)
54
+ self.read_handle.SetConsoleMode(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT)
55
+ self.cur_event_length = 0
56
+ self.cur_keys_length = 0
57
+ self.captured_chars = []
58
+ except pywintypes.error:
59
+ raise InitError("Terminal says its a tty but we couldnt enable line input. Keyboard input disabled.")
56
60
  else:
57
61
  raise InitError("Terminal was not a tty. Keyboard input disabled")
58
62
 
@@ -491,7 +491,7 @@ See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-numb
491
491
  stats_csv_writer=stats_csv_writer,
492
492
  delayed_start=True,
493
493
  userclass_picker_is_active=options.class_picker,
494
- modern_ui=options.modern_ui,
494
+ modern_ui=not options.legacy_ui,
495
495
  )
496
496
  else:
497
497
  web_ui = None
@@ -682,10 +682,10 @@ See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-numb
682
682
 
683
683
  main_greenlet.join()
684
684
  if options.html_file:
685
- save_html_report(options.modern_ui)
685
+ save_html_report(not options.legacy_ui)
686
686
  except KeyboardInterrupt:
687
687
  if options.html_file:
688
- save_html_report(options.modern_ui)
688
+ save_html_report(not options.legacy_ui)
689
689
  except Exception:
690
690
  raise
691
691
  shutdown()
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import json
4
4
  import os
5
5
  import platform
6
- import pty
7
6
  import signal
8
7
  import socket
9
8
  import subprocess
@@ -17,6 +16,7 @@ from unittest import TestCase
17
16
  import gevent
18
17
  import psutil
19
18
  import requests
19
+ from pyquery import PyQuery as pq
20
20
 
21
21
  from .mock_locustfile import MOCK_LOCUSTFILE_CONTENT, mock_locustfile
22
22
  from .util import get_free_tcp_port, patch_env, temporary_file
@@ -79,6 +79,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
79
79
  self.assertIn("Logging options:", output)
80
80
  self.assertIn("--skip-log-setup Disable Locust's logging setup.", output)
81
81
 
82
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
82
83
  def test_custom_arguments(self):
83
84
  port = get_free_tcp_port()
84
85
  with temporary_file(
@@ -120,6 +121,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
120
121
  self.assertNotIn("command_line_value", stdout)
121
122
  self.assertIn("web_form_value", stdout)
122
123
 
124
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
123
125
  def test_custom_arguments_in_file(self):
124
126
  with temporary_file(
125
127
  content=textwrap.dedent(
@@ -155,6 +157,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
155
157
  self.assertIn("Starting Locust", stderr)
156
158
  self.assertIn("config_file_value", stdout)
157
159
 
160
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
158
161
  def test_custom_exit_code(self):
159
162
  with temporary_file(
160
163
  content=textwrap.dedent(
@@ -184,6 +187,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
184
187
  self.assertIn("Exit code in quit event 42", stdout)
185
188
  self.assertEqual(42, proc.returncode)
186
189
 
190
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
187
191
  def test_webserver(self):
188
192
  with temporary_file(
189
193
  content=textwrap.dedent(
@@ -251,7 +255,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
251
255
  )
252
256
  ) as file_path:
253
257
  proc = subprocess.Popen(
254
- ["locust", "-f", file_path, "--web-port", str(port), "--autostart", "--modern-ui"],
258
+ ["locust", "-f", file_path, "--web-port", str(port), "--autostart"],
255
259
  stdout=PIPE,
256
260
  stderr=PIPE,
257
261
  text=True,
@@ -284,6 +288,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
284
288
  self.assertIn("parameter need to be float and value between. 0 < percentile < 1 Eg 0.95", stderr)
285
289
  self.assertEqual(1, proc.returncode)
286
290
 
291
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
287
292
  def test_webserver_multiple_locustfiles(self):
288
293
  with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_A) as mocked1:
289
294
  with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_B) as mocked2:
@@ -299,6 +304,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
299
304
  self.assertIn("Shutting down (exit code 0)", stderr)
300
305
  self.assertEqual(0, proc.returncode)
301
306
 
307
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
302
308
  def test_webserver_multiple_locustfiles_in_directory(self):
303
309
  with TemporaryDirectory() as temp_dir:
304
310
  with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_A, dir=temp_dir):
@@ -313,6 +319,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
313
319
  self.assertIn("Shutting down (exit code 0)", stderr)
314
320
  self.assertEqual(0, proc.returncode)
315
321
 
322
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
316
323
  def test_webserver_multiple_locustfiles_with_shape(self):
317
324
  content = textwrap.dedent(
318
325
  """
@@ -406,6 +413,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
406
413
  self.assertIn("ERROR/locust.main: Valid --stop-timeout formats are", stderr)
407
414
  self.assertEqual(1, proc.returncode)
408
415
 
416
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
409
417
  def test_headless_spawn_options_wo_run_time(self):
410
418
  with mock_locustfile() as mocked:
411
419
  proc = subprocess.Popen(
@@ -431,6 +439,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
431
439
  self.assertIn("Shutting down (exit code 0)", stderr)
432
440
  self.assertEqual(0, proc.returncode)
433
441
 
442
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
434
443
  def test_run_headless_with_multiple_locustfiles(self):
435
444
  with TemporaryDirectory() as temp_dir:
436
445
  with mock_locustfile(dir=temp_dir):
@@ -582,6 +591,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
582
591
  self.assertIn("Shutting down (exit code 0)", stderr)
583
592
  self.assertEqual(0, proc.returncode)
584
593
 
594
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
585
595
  def test_autostart_wo_run_time(self):
586
596
  port = get_free_tcp_port()
587
597
  with mock_locustfile() as mocked:
@@ -600,7 +610,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
600
610
  )
601
611
  gevent.sleep(1.9)
602
612
  try:
603
- response = requests.get(f"http://0.0.0.0:{port}/")
613
+ response = requests.get(f"http://localhost:{port}/")
604
614
  except Exception:
605
615
  pass
606
616
  self.assertEqual(200, response.status_code)
@@ -611,8 +621,10 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
611
621
  self.assertIn("Shutting down ", stderr)
612
622
  self.assertNotIn("Traceback", stderr)
613
623
  # check response afterwards, because it really isn't as informative as stderr
624
+ d = pq(response.content.decode("utf-8"))
625
+
614
626
  self.assertEqual(200, response.status_code)
615
- self.assertIn('<body class="running">', response.text)
627
+ self.assertIn('"state": "running"', str(d))
616
628
 
617
629
  def test_autostart_w_run_time(self):
618
630
  port = get_free_tcp_port()
@@ -636,7 +648,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
636
648
  )
637
649
  gevent.sleep(1.9)
638
650
  try:
639
- response = requests.get(f"http://0.0.0.0:{port}/")
651
+ response = requests.get(f"http://localhost:{port}/")
640
652
  except Exception:
641
653
  pass
642
654
  _, stderr = proc.communicate(timeout=2)
@@ -645,9 +657,12 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
645
657
  self.assertIn("Shutting down ", stderr)
646
658
  self.assertNotIn("Traceback", stderr)
647
659
  # check response afterwards, because it really isn't as informative as stderr
660
+ d = pq(response.content.decode("utf-8"))
661
+
648
662
  self.assertEqual(200, response.status_code)
649
- self.assertIn('<body class="running">', response.text)
663
+ self.assertIn('"state": "running"', str(d))
650
664
 
665
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
651
666
  def test_run_autostart_with_multiple_locustfiles(self):
652
667
  with TemporaryDirectory() as temp_dir:
653
668
  with mock_locustfile(dir=temp_dir):
@@ -711,6 +726,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
711
726
  "locust",
712
727
  "-f",
713
728
  mocked.file_path,
729
+ "--legacy-ui",
714
730
  "--web-port",
715
731
  str(port),
716
732
  "--autostart",
@@ -722,7 +738,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
722
738
  text=True,
723
739
  )
724
740
  gevent.sleep(1.9)
725
- response = requests.get(f"http://0.0.0.0:{port}/")
741
+ response = requests.get(f"http://localhost:{port}/")
726
742
  try:
727
743
  success = True
728
744
  _, stderr = proc.communicate(timeout=5)
@@ -778,6 +794,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
778
794
  "locust",
779
795
  "-f",
780
796
  f"{mocked1.file_path},{mocked2}",
797
+ "--legacy-ui",
781
798
  "--web-port",
782
799
  str(port),
783
800
  "--autostart",
@@ -789,7 +806,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
789
806
  text=True,
790
807
  )
791
808
  gevent.sleep(1.9)
792
- response = requests.get(f"http://0.0.0.0:{port}/")
809
+ response = requests.get(f"http://localhost:{port}/")
793
810
  try:
794
811
  success = True
795
812
  _, stderr = proc.communicate(timeout=5)
@@ -807,6 +824,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
807
824
  self.assertIn('<body class="spawning">', response.text)
808
825
  self.assertTrue(success, "got timeout and had to kill the process")
809
826
 
827
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
810
828
  def test_web_options(self):
811
829
  port = get_free_tcp_port()
812
830
  if platform.system() == "Darwin":
@@ -842,7 +860,10 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
842
860
  self.assertEqual(200, requests.get("http://127.0.0.1:%i/" % port, timeout=1).status_code)
843
861
  proc.terminate()
844
862
 
863
+ @unittest.skipIf(os.name == "nt", reason="termios doesnt exist on windows, adn thus we cannot import pty")
845
864
  def test_input(self):
865
+ import pty
866
+
846
867
  LOCUSTFILE_CONTENT = textwrap.dedent(
847
868
  """
848
869
  from locust import User, TaskSet, task, between
@@ -1067,6 +1088,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
1067
1088
  "locust",
1068
1089
  "-f",
1069
1090
  mocked.file_path,
1091
+ "--legacy-ui",
1070
1092
  "--host",
1071
1093
  "https://test.com/",
1072
1094
  "--run-time",
@@ -1310,6 +1332,7 @@ class MyUser(HttpUser):
1310
1332
  self.assertIn("No tasks defined on MyUser", stderr)
1311
1333
  self.assertEqual(1, proc.returncode)
1312
1334
 
1335
+ @unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
1313
1336
  def test_graceful_exit_when_keyboard_interrupt(self):
1314
1337
  with temporary_file(
1315
1338
  content=textwrap.dedent(
@@ -1780,6 +1803,7 @@ class AnyUser(HttpUser):
1780
1803
  if found[i] != i:
1781
1804
  raise Exception(f"expected index {i} but got", found[i])
1782
1805
 
1806
+ @unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
1783
1807
  def test_processes(self):
1784
1808
  with mock_locustfile() as mocked:
1785
1809
  command = f"locust -f {mocked.file_path} --processes 4 --headless --run-time 1 --exit-code-on-error 0"
@@ -1799,6 +1823,7 @@ class AnyUser(HttpUser):
1799
1823
  self.assertIn("(index 3) reported as ready", stderr)
1800
1824
  self.assertIn("Shutting down (exit code 0)", stderr)
1801
1825
 
1826
+ @unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
1802
1827
  def test_processes_autodetect(self):
1803
1828
  with mock_locustfile() as mocked:
1804
1829
  command = f"locust -f {mocked.file_path} --processes -1 --headless --run-time 1 --exit-code-on-error 0"
@@ -1818,6 +1843,7 @@ class AnyUser(HttpUser):
1818
1843
  self.assertIn("(index 0) reported as ready", stderr)
1819
1844
  self.assertIn("Shutting down (exit code 0)", stderr)
1820
1845
 
1846
+ @unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
1821
1847
  def test_processes_separate_worker(self):
1822
1848
  with mock_locustfile() as mocked:
1823
1849
  master_proc = subprocess.Popen(
@@ -1862,6 +1888,7 @@ class AnyUser(HttpUser):
1862
1888
  self.assertIn("(index 3) reported as ready", master_stderr)
1863
1889
  self.assertIn("Shutting down (exit code 0)", master_stderr)
1864
1890
 
1891
+ @unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
1865
1892
  def test_processes_ctrl_c(self):
1866
1893
  with mock_locustfile() as mocked:
1867
1894
  proc = psutil.Popen( # use psutil.Popen instead of subprocess.Popen to use extra features
@@ -1901,6 +1928,7 @@ class AnyUser(HttpUser):
1901
1928
  self.assertIn("The last worker quit, stopping test", stderr)
1902
1929
  self.assertIn("Shutting down (exit code 0)", stderr)
1903
1930
 
1931
+ @unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
1904
1932
  def test_workers_shut_down_if_master_is_gone(self):
1905
1933
  content = """
1906
1934
  from locust import HttpUser, task, constant, runners
@@ -1956,6 +1984,7 @@ class AnyUser(HttpUser):
1956
1984
  self.assertNotIn("Traceback", worker_stderr)
1957
1985
  self.assertIn("Didn't get heartbeat from master in over ", worker_stderr)
1958
1986
 
1987
+ @unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
1959
1988
  def test_processes_error_doesnt_blow_up_completely(self):
1960
1989
  with mock_locustfile() as mocked:
1961
1990
  proc = subprocess.Popen(
@@ -1979,6 +2008,7 @@ class AnyUser(HttpUser):
1979
2008
  self.assertEqual(stderr.count("Unknown User(s): UserThatDoesntExist"), 5)
1980
2009
  self.assertNotIn("Traceback", stderr)
1981
2010
 
2011
+ @unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
1982
2012
  def test_processes_workers_quit_unexpected(self):
1983
2013
  content = """
1984
2014
  from locust import runners, events, User
@@ -1130,7 +1130,7 @@ class TestWebUIAuth(LocustTestCase):
1130
1130
  super().setUp()
1131
1131
 
1132
1132
  parser = get_parser(default_config_files=[])
1133
- self.environment.parsed_options = parser.parse_args(["--modern-ui", "--web-login"])
1133
+ self.environment.parsed_options = parser.parse_args(["--web-login"])
1134
1134
 
1135
1135
  self.web_ui = self.environment.create_web_ui("127.0.0.1", 0, modern_ui=True, web_login=True)
1136
1136
 
@@ -1291,7 +1291,6 @@ class TestModernWebUI(LocustTestCase, _HeaderCheckMixin):
1291
1291
  super().setUp()
1292
1292
 
1293
1293
  parser = get_parser(default_config_files=[])
1294
- self.environment.parsed_options = parser.parse_args(["--modern-ui"])
1295
1294
  self.stats = self.environment.stats
1296
1295
 
1297
1296
  self.web_ui = self.environment.create_web_ui("127.0.0.1", 0, modern_ui=True)
@@ -528,7 +528,7 @@ class WebUI:
528
528
  auth_args=self.auth_args,
529
529
  )
530
530
  else:
531
- return "Web Auth is only available on the modern web ui. Enable it with the --modern-ui flag"
531
+ return "Web Auth is only available on the modern web ui."
532
532
 
533
533
  @app.route("/user", methods=["POST"])
534
534
  def update_user():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.20.2.dev104
3
+ Version: 2.21.1.dev7
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://locust.io/
@@ -55,7 +55,6 @@ docs/use-as-lib.rst
55
55
  docs/what-is-locust.rst
56
56
  docs/writing-a-locustfile.rst
57
57
  docs/_static/theme-overrides.css
58
- docs/images/modern-webui-splash-screenshot.png
59
58
  docs/images/number_of_users.png
60
59
  docs/images/response_times.png
61
60
  docs/images/total_requests_per_second.png
@@ -17,8 +17,8 @@ allowlist_externals =
17
17
  timeout
18
18
  grep
19
19
  commands =
20
- python3 -m pip install .
21
- python3 -m unittest discover []
20
+ python -m pip install .
21
+ python -m unittest discover []
22
22
  ; Disable these tests for now, because they are breaking. When someone has time they should be converted into regular unit tests
23
23
  ; bash -ec "PYTHONUNBUFFERED=1 timeout 20s python3 examples/rest.py >{temp_dir}/out.txt 2>/{temp_dir}/err.txt || true"
24
24
  ; grep -qm 1 'my custom error message with response text, response was {"args"' {temp_dir}/out.txt
@@ -28,8 +28,8 @@ commands =
28
28
 
29
29
  [testenv:fail_fast_test_main]
30
30
  commands =
31
- python3 -m pip install .
32
- python3 -m unittest -f locust.test.test_main
31
+ python -m pip install .
32
+ python -m unittest -f locust.test.test_main
33
33
 
34
34
  [testenv:ruff]
35
35
  deps = ruff==0.1.13
File without changes