locust 2.19.2.dev66__tar.gz → 2.20.1__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 (329) hide show
  1. {locust-2.19.2.dev66 → locust-2.20.1}/.github/workflows/tests.yml +6 -6
  2. {locust-2.19.2.dev66 → locust-2.20.1}/.gitignore +2 -1
  3. {locust-2.19.2.dev66 → locust-2.20.1}/CHANGELOG.md +34 -0
  4. {locust-2.19.2.dev66 → locust-2.20.1}/PKG-INFO +8 -4
  5. {locust-2.19.2.dev66 → locust-2.20.1}/README.md +6 -2
  6. {locust-2.19.2.dev66 → locust-2.20.1}/docs/api.rst +1 -0
  7. {locust-2.19.2.dev66 → locust-2.20.1}/docs/changelog.rst +13 -0
  8. {locust-2.19.2.dev66 → locust-2.20.1}/docs/running-distributed.rst +5 -5
  9. {locust-2.19.2.dev66 → locust-2.20.1}/docs/what-is-locust.rst +3 -3
  10. {locust-2.19.2.dev66 → locust-2.20.1}/locust/_version.py +2 -2
  11. {locust-2.19.2.dev66 → locust-2.20.1}/locust/argument_parser.py +1 -1
  12. {locust-2.19.2.dev66 → locust-2.20.1}/locust/debug.py +7 -3
  13. {locust-2.19.2.dev66 → locust-2.20.1}/locust/event.py +9 -2
  14. {locust-2.19.2.dev66 → locust-2.20.1}/locust/main.py +3 -1
  15. {locust-2.19.2.dev66 → locust-2.20.1}/locust/rpc/zmqrpc.py +1 -0
  16. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_debugging.py +5 -2
  17. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_zmqrpc.py +6 -4
  18. {locust-2.19.2.dev66 → locust-2.20.1}/locust/user/task.py +1 -1
  19. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/package.json +1 -1
  20. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/yarn.lock +15 -15
  21. {locust-2.19.2.dev66 → locust-2.20.1}/locust.egg-info/PKG-INFO +8 -4
  22. {locust-2.19.2.dev66 → locust-2.20.1}/locust.egg-info/requires.txt +1 -1
  23. {locust-2.19.2.dev66 → locust-2.20.1}/pyproject.toml +1 -1
  24. {locust-2.19.2.dev66 → locust-2.20.1}/.coveragerc +0 -0
  25. {locust-2.19.2.dev66 → locust-2.20.1}/.dockerignore +0 -0
  26. {locust-2.19.2.dev66 → locust-2.20.1}/.git-blame-ignore-revs +0 -0
  27. {locust-2.19.2.dev66 → locust-2.20.1}/.gitattributes +0 -0
  28. {locust-2.19.2.dev66 → locust-2.20.1}/.github/CONTRIBUTING.md +0 -0
  29. {locust-2.19.2.dev66 → locust-2.20.1}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  30. {locust-2.19.2.dev66 → locust-2.20.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  31. {locust-2.19.2.dev66 → locust-2.20.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  32. {locust-2.19.2.dev66 → locust-2.20.1}/.github/workflows/stale.yml +0 -0
  33. {locust-2.19.2.dev66 → locust-2.20.1}/.readthedocs.yaml +0 -0
  34. {locust-2.19.2.dev66 → locust-2.20.1}/.vscode/launch.json +0 -0
  35. {locust-2.19.2.dev66 → locust-2.20.1}/.vscode/launch_locust.json +0 -0
  36. {locust-2.19.2.dev66 → locust-2.20.1}/.vscode/settings.json +0 -0
  37. {locust-2.19.2.dev66 → locust-2.20.1}/Dockerfile +0 -0
  38. {locust-2.19.2.dev66 → locust-2.20.1}/LICENSE +0 -0
  39. {locust-2.19.2.dev66 → locust-2.20.1}/MANIFEST.in +0 -0
  40. {locust-2.19.2.dev66 → locust-2.20.1}/Makefile +0 -0
  41. {locust-2.19.2.dev66 → locust-2.20.1}/README +0 -0
  42. {locust-2.19.2.dev66 → locust-2.20.1}/SECURITY.md +0 -0
  43. {locust-2.19.2.dev66 → locust-2.20.1}/Vagrantfile +0 -0
  44. {locust-2.19.2.dev66 → locust-2.20.1}/benchmarks/dispatch.py +0 -0
  45. {locust-2.19.2.dev66 → locust-2.20.1}/docs/_static/theme-overrides.css +0 -0
  46. {locust-2.19.2.dev66 → locust-2.20.1}/docs/conf.py +0 -0
  47. {locust-2.19.2.dev66 → locust-2.20.1}/docs/configuration.rst +0 -0
  48. {locust-2.19.2.dev66 → locust-2.20.1}/docs/custom-load-shape.rst +0 -0
  49. {locust-2.19.2.dev66 → locust-2.20.1}/docs/developing-locust.rst +0 -0
  50. {locust-2.19.2.dev66 → locust-2.20.1}/docs/extending-locust.rst +0 -0
  51. {locust-2.19.2.dev66 → locust-2.20.1}/docs/further-reading.rst +0 -0
  52. {locust-2.19.2.dev66 → locust-2.20.1}/docs/history.rst +0 -0
  53. {locust-2.19.2.dev66 → locust-2.20.1}/docs/images/modern-webui-splash-screenshot.png +0 -0
  54. {locust-2.19.2.dev66 → locust-2.20.1}/docs/images/number_of_users.png +0 -0
  55. {locust-2.19.2.dev66 → locust-2.20.1}/docs/images/response_times.png +0 -0
  56. {locust-2.19.2.dev66 → locust-2.20.1}/docs/images/total_requests_per_second.png +0 -0
  57. {locust-2.19.2.dev66 → locust-2.20.1}/docs/images/userclass_picker_example.png +0 -0
  58. {locust-2.19.2.dev66 → locust-2.20.1}/docs/images/webui-running-statistics.png +0 -0
  59. {locust-2.19.2.dev66 → locust-2.20.1}/docs/images/webui-splash-screenshot.png +0 -0
  60. {locust-2.19.2.dev66 → locust-2.20.1}/docs/increase-performance.rst +0 -0
  61. {locust-2.19.2.dev66 → locust-2.20.1}/docs/index.rst +0 -0
  62. {locust-2.19.2.dev66 → locust-2.20.1}/docs/installation.rst +0 -0
  63. {locust-2.19.2.dev66 → locust-2.20.1}/docs/logging.rst +0 -0
  64. {locust-2.19.2.dev66 → locust-2.20.1}/docs/quickstart.rst +0 -0
  65. {locust-2.19.2.dev66 → locust-2.20.1}/docs/requirements.txt +0 -0
  66. {locust-2.19.2.dev66 → locust-2.20.1}/docs/retrieving-stats.rst +0 -0
  67. {locust-2.19.2.dev66 → locust-2.20.1}/docs/running-cloud-integration.rst +0 -0
  68. {locust-2.19.2.dev66 → locust-2.20.1}/docs/running-in-debugger.rst +0 -0
  69. {locust-2.19.2.dev66 → locust-2.20.1}/docs/running-in-docker.rst +0 -0
  70. {locust-2.19.2.dev66 → locust-2.20.1}/docs/running-without-web-ui.rst +0 -0
  71. {locust-2.19.2.dev66 → locust-2.20.1}/docs/tasksets.rst +0 -0
  72. {locust-2.19.2.dev66 → locust-2.20.1}/docs/testing-other-systems.rst +0 -0
  73. {locust-2.19.2.dev66 → locust-2.20.1}/docs/use-as-lib.rst +0 -0
  74. {locust-2.19.2.dev66 → locust-2.20.1}/docs/writing-a-locustfile.rst +0 -0
  75. {locust-2.19.2.dev66 → locust-2.20.1}/examples/add_command_line_argument.py +0 -0
  76. {locust-2.19.2.dev66 → locust-2.20.1}/examples/basic.py +0 -0
  77. {locust-2.19.2.dev66 → locust-2.20.1}/examples/browse_docs_sequence_test.py +0 -0
  78. {locust-2.19.2.dev66 → locust-2.20.1}/examples/browse_docs_test.py +0 -0
  79. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_messages.py +0 -0
  80. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_shape/double_wave.py +0 -0
  81. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_shape/stages.py +0 -0
  82. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_shape/staging_user_classes.py +0 -0
  83. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_shape/step_load.py +0 -0
  84. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_shape/wait_user_count.py +0 -0
  85. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_wait_function.py +0 -0
  86. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_xmlrpc_client/server.py +0 -0
  87. {locust-2.19.2.dev66 → locust-2.20.1}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
  88. {locust-2.19.2.dev66 → locust-2.20.1}/examples/debugging.py +0 -0
  89. {locust-2.19.2.dev66 → locust-2.20.1}/examples/debugging_advanced.py +0 -0
  90. {locust-2.19.2.dev66 → locust-2.20.1}/examples/docker-compose/docker-compose.yml +0 -0
  91. {locust-2.19.2.dev66 → locust-2.20.1}/examples/dynamic_user_credentials.py +0 -0
  92. {locust-2.19.2.dev66 → locust-2.20.1}/examples/events.py +0 -0
  93. {locust-2.19.2.dev66 → locust-2.20.1}/examples/extend_modern_web_ui.py +0 -0
  94. {locust-2.19.2.dev66 → locust-2.20.1}/examples/extend_web_ui/extend.py +0 -0
  95. {locust-2.19.2.dev66 → locust-2.20.1}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
  96. {locust-2.19.2.dev66 → locust-2.20.1}/examples/extend_web_ui/static/extend.js +0 -0
  97. {locust-2.19.2.dev66 → locust-2.20.1}/examples/extend_web_ui/templates/extend.html +0 -0
  98. {locust-2.19.2.dev66 → locust-2.20.1}/examples/fast_http_locust.py +0 -0
  99. {locust-2.19.2.dev66 → locust-2.20.1}/examples/grpc/grpc_user.py +0 -0
  100. {locust-2.19.2.dev66 → locust-2.20.1}/examples/grpc/hello.proto +0 -0
  101. {locust-2.19.2.dev66 → locust-2.20.1}/examples/grpc/hello_pb2.py +0 -0
  102. {locust-2.19.2.dev66 → locust-2.20.1}/examples/grpc/hello_pb2_grpc.py +0 -0
  103. {locust-2.19.2.dev66 → locust-2.20.1}/examples/grpc/hello_server.py +0 -0
  104. {locust-2.19.2.dev66 → locust-2.20.1}/examples/grpc/locustfile.py +0 -0
  105. {locust-2.19.2.dev66 → locust-2.20.1}/examples/locustfile.py +0 -0
  106. {locust-2.19.2.dev66 → locust-2.20.1}/examples/manual_stats_reporting.py +0 -0
  107. {locust-2.19.2.dev66 → locust-2.20.1}/examples/multiple_hosts.py +0 -0
  108. {locust-2.19.2.dev66 → locust-2.20.1}/examples/nested_inline_tasksets.py +0 -0
  109. {locust-2.19.2.dev66 → locust-2.20.1}/examples/rest.py +0 -0
  110. {locust-2.19.2.dev66 → locust-2.20.1}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
  111. {locust-2.19.2.dev66 → locust-2.20.1}/examples/semaphore_wait.py +0 -0
  112. {locust-2.19.2.dev66 → locust-2.20.1}/examples/stop_on_threshold.py +0 -0
  113. {locust-2.19.2.dev66 → locust-2.20.1}/examples/terraform/aws/README.md +0 -0
  114. {locust-2.19.2.dev66 → locust-2.20.1}/examples/terraform/aws/data_subnet.tf +0 -0
  115. {locust-2.19.2.dev66 → locust-2.20.1}/examples/terraform/aws/main.tf +0 -0
  116. {locust-2.19.2.dev66 → locust-2.20.1}/examples/terraform/aws/output.tf +0 -0
  117. {locust-2.19.2.dev66 → locust-2.20.1}/examples/terraform/aws/plan/basic.py +0 -0
  118. {locust-2.19.2.dev66 → locust-2.20.1}/examples/terraform/aws/provisioner.tf +0 -0
  119. {locust-2.19.2.dev66 → locust-2.20.1}/examples/terraform/aws/variables.tf +0 -0
  120. {locust-2.19.2.dev66 → locust-2.20.1}/examples/test_data_management.py +0 -0
  121. {locust-2.19.2.dev66 → locust-2.20.1}/examples/use_as_lib.py +0 -0
  122. {locust-2.19.2.dev66 → locust-2.20.1}/examples/vagrant/README.md +0 -0
  123. {locust-2.19.2.dev66 → locust-2.20.1}/examples/vagrant/supervisord.conf +0 -0
  124. {locust-2.19.2.dev66 → locust-2.20.1}/examples/worker_index.py +0 -0
  125. {locust-2.19.2.dev66 → locust-2.20.1}/generate_changelog.py +0 -0
  126. {locust-2.19.2.dev66 → locust-2.20.1}/locust/__init__.py +0 -0
  127. {locust-2.19.2.dev66 → locust-2.20.1}/locust/__main__.py +0 -0
  128. {locust-2.19.2.dev66 → locust-2.20.1}/locust/clients.py +0 -0
  129. {locust-2.19.2.dev66 → locust-2.20.1}/locust/contrib/__init__.py +0 -0
  130. {locust-2.19.2.dev66 → locust-2.20.1}/locust/contrib/fasthttp.py +0 -0
  131. {locust-2.19.2.dev66 → locust-2.20.1}/locust/dispatch.py +0 -0
  132. {locust-2.19.2.dev66 → locust-2.20.1}/locust/env.py +0 -0
  133. {locust-2.19.2.dev66 → locust-2.20.1}/locust/exception.py +0 -0
  134. {locust-2.19.2.dev66 → locust-2.20.1}/locust/html.py +0 -0
  135. {locust-2.19.2.dev66 → locust-2.20.1}/locust/input_events.py +0 -0
  136. {locust-2.19.2.dev66 → locust-2.20.1}/locust/log.py +0 -0
  137. {locust-2.19.2.dev66 → locust-2.20.1}/locust/py.typed +0 -0
  138. {locust-2.19.2.dev66 → locust-2.20.1}/locust/rpc/__init__.py +0 -0
  139. {locust-2.19.2.dev66 → locust-2.20.1}/locust/rpc/protocol.py +0 -0
  140. {locust-2.19.2.dev66 → locust-2.20.1}/locust/runners.py +0 -0
  141. {locust-2.19.2.dev66 → locust-2.20.1}/locust/shape.py +0 -0
  142. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/chart.js +0 -0
  143. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/css/application.css +0 -0
  144. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/css/application.css.map +0 -0
  145. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/css/tables.css +0 -0
  146. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/css/tables.css.map +0 -0
  147. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/echarts.common.min.js +0 -0
  148. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/img/favicon.ico +0 -0
  149. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/img/logo.png +0 -0
  150. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/img/ui-screenshot-charts.png +0 -0
  151. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/img/ui-screenshot-start-test.png +0 -0
  152. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/img/ui-screenshot-stats.png +0 -0
  153. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/img/ui-screenshot-workers.png +0 -0
  154. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/jquery-1.11.3.min.js +0 -0
  155. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/jquery.jqote2.min.js +0 -0
  156. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/jquery.tools.min.js +0 -0
  157. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/locust.js +0 -0
  158. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/sass/_base.sass +0 -0
  159. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/sass/_mixins.sass +0 -0
  160. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/sass/application.sass +0 -0
  161. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/sass/tables.sass +0 -0
  162. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/tasks.js +0 -0
  163. {locust-2.19.2.dev66 → locust-2.20.1}/locust/static/vintage.js +0 -0
  164. {locust-2.19.2.dev66 → locust-2.20.1}/locust/stats.py +0 -0
  165. {locust-2.19.2.dev66 → locust-2.20.1}/locust/templates/index.html +0 -0
  166. {locust-2.19.2.dev66 → locust-2.20.1}/locust/templates/report.html +0 -0
  167. {locust-2.19.2.dev66 → locust-2.20.1}/locust/templates/stats_data.html +0 -0
  168. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/__init__.py +0 -0
  169. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/fake_module1_for_env_test.py +0 -0
  170. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/fake_module2_for_env_test.py +0 -0
  171. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/mock_locustfile.py +0 -0
  172. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/mock_logging.py +0 -0
  173. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_dispatch.py +0 -0
  174. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_env.py +0 -0
  175. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_fasthttp.py +0 -0
  176. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_http.py +0 -0
  177. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_interruptable_task.py +0 -0
  178. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_load_locustfile.py +0 -0
  179. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_locust_class.py +0 -0
  180. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_log.py +0 -0
  181. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_main.py +0 -0
  182. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_old_wait_api.py +0 -0
  183. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_parser.py +0 -0
  184. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_runners.py +0 -0
  185. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_sequential_taskset.py +0 -0
  186. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_stats.py +0 -0
  187. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_tags.py +0 -0
  188. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_taskratio.py +0 -0
  189. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_users.py +0 -0
  190. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_util.py +0 -0
  191. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_wait_time.py +0 -0
  192. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/test_web.py +0 -0
  193. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/testcases.py +0 -0
  194. {locust-2.19.2.dev66 → locust-2.20.1}/locust/test/util.py +0 -0
  195. {locust-2.19.2.dev66 → locust-2.20.1}/locust/user/__init__.py +0 -0
  196. {locust-2.19.2.dev66 → locust-2.20.1}/locust/user/inspectuser.py +0 -0
  197. {locust-2.19.2.dev66 → locust-2.20.1}/locust/user/sequential_taskset.py +0 -0
  198. {locust-2.19.2.dev66 → locust-2.20.1}/locust/user/users.py +0 -0
  199. {locust-2.19.2.dev66 → locust-2.20.1}/locust/user/wait_time.py +0 -0
  200. {locust-2.19.2.dev66 → locust-2.20.1}/locust/util/__init__.py +0 -0
  201. {locust-2.19.2.dev66 → locust-2.20.1}/locust/util/cache.py +0 -0
  202. {locust-2.19.2.dev66 → locust-2.20.1}/locust/util/deprecation.py +0 -0
  203. {locust-2.19.2.dev66 → locust-2.20.1}/locust/util/exception_handler.py +0 -0
  204. {locust-2.19.2.dev66 → locust-2.20.1}/locust/util/load_locustfile.py +0 -0
  205. {locust-2.19.2.dev66 → locust-2.20.1}/locust/util/rounding.py +0 -0
  206. {locust-2.19.2.dev66 → locust-2.20.1}/locust/util/timespan.py +0 -0
  207. {locust-2.19.2.dev66 → locust-2.20.1}/locust/web.py +0 -0
  208. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/.eslintrc +0 -0
  209. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/.gitignore +0 -0
  210. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/.prettierrc +0 -0
  211. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/dev.html +0 -0
  212. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/dist/assets/favicon.ico +0 -0
  213. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/dist/assets/index-01afe4fa.js +0 -0
  214. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/dist/assets/logo.png +0 -0
  215. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/dist/index.html +0 -0
  216. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/dist/report.html +0 -0
  217. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/index.html +0 -0
  218. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/public/assets/favicon.ico +0 -0
  219. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/public/assets/logo.png +0 -0
  220. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/public/report.html +0 -0
  221. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/App.tsx +0 -0
  222. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/Report.tsx +0 -0
  223. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
  224. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
  225. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
  226. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
  227. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Form/Form.tsx +0 -0
  228. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Form/Select.tsx +0 -0
  229. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
  230. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
  231. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
  232. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
  233. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Layout/Layout.tsx +0 -0
  234. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
  235. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
  236. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
  237. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
  238. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
  239. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
  240. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
  241. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
  242. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
  243. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
  244. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Modal/Modal.tsx +0 -0
  245. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
  246. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Reports/Reports.tsx +0 -0
  247. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
  248. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
  249. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
  250. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
  251. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
  252. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
  253. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
  254. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
  255. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
  256. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
  257. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
  258. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
  259. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
  260. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
  261. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
  262. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
  263. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
  264. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
  265. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
  266. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
  267. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Table/Table.test.tsx +0 -0
  268. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Table/Table.tsx +0 -0
  269. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
  270. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
  271. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
  272. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
  273. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/constants/swarm.tsx +0 -0
  274. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/constants/theme.ts +0 -0
  275. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/global.d.ts +0 -0
  276. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
  277. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
  278. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
  279. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/hooks/useInterval.ts +0 -0
  280. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/hooks/useNotifications.ts +0 -0
  281. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/hooks/useSortByField.ts +0 -0
  282. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
  283. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/index.tsx +0 -0
  284. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/api/swarm.ts +0 -0
  285. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/hooks.ts +0 -0
  286. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
  287. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
  288. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/root.slice.ts +0 -0
  289. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
  290. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
  291. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
  292. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
  293. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/slice/url.slice.ts +0 -0
  294. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/store.ts +0 -0
  295. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/redux/utils.ts +0 -0
  296. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/styles/theme.ts +0 -0
  297. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/test/constants.ts +0 -0
  298. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
  299. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
  300. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/test/setup.ts +0 -0
  301. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/test/testUtils.tsx +0 -0
  302. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/types/swarm.types.ts +0 -0
  303. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/types/tab.types.ts +0 -0
  304. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/types/table.types.ts +0 -0
  305. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/types/ui.types.ts +0 -0
  306. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/number.ts +0 -0
  307. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/object.ts +0 -0
  308. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/string.ts +0 -0
  309. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/tests/number.test.ts +0 -0
  310. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/tests/object.test.ts +0 -0
  311. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/tests/string.test.ts +0 -0
  312. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/tests/url.test.ts +0 -0
  313. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/src/utils/url.ts +0 -0
  314. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/tsconfig.json +0 -0
  315. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/vite.config.ts +0 -0
  316. {locust-2.19.2.dev66 → locust-2.20.1}/locust/webui/vitest.config.ts +0 -0
  317. {locust-2.19.2.dev66 → locust-2.20.1}/locust.egg-info/SOURCES.txt +0 -0
  318. {locust-2.19.2.dev66 → locust-2.20.1}/locust.egg-info/dependency_links.txt +0 -0
  319. {locust-2.19.2.dev66 → locust-2.20.1}/locust.egg-info/entry_points.txt +0 -0
  320. {locust-2.19.2.dev66 → locust-2.20.1}/locust.egg-info/not-zip-safe +0 -0
  321. {locust-2.19.2.dev66 → locust-2.20.1}/locust.egg-info/top_level.txt +0 -0
  322. {locust-2.19.2.dev66 → locust-2.20.1}/package.json +0 -0
  323. {locust-2.19.2.dev66 → locust-2.20.1}/scripts/locustfile.py +0 -0
  324. {locust-2.19.2.dev66 → locust-2.20.1}/scripts/run-disributed-headless.sh +0 -0
  325. {locust-2.19.2.dev66 → locust-2.20.1}/scripts/run-disributed-web.sh +0 -0
  326. {locust-2.19.2.dev66 → locust-2.20.1}/scripts/run-local-headless.sh +0 -0
  327. {locust-2.19.2.dev66 → locust-2.20.1}/scripts/run-local-web.sh +0 -0
  328. {locust-2.19.2.dev66 → locust-2.20.1}/setup.cfg +0 -0
  329. {locust-2.19.2.dev66 → locust-2.20.1}/tox.ini +0 -0
@@ -86,12 +86,12 @@ jobs:
86
86
  username: locustbuild
87
87
  password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
88
88
  - name: Set up QEMU
89
- uses: docker/setup-qemu-action@v1
89
+ uses: docker/setup-qemu-action@v3
90
90
  - name: Set up Docker Buildx
91
- uses: docker/setup-buildx-action@v1
91
+ uses: docker/setup-buildx-action@v3
92
92
  - name: build and publish image
93
93
  id: docker_build
94
- uses: docker/build-push-action@v2
94
+ uses: docker/build-push-action@v5
95
95
  with:
96
96
  build-args: |
97
97
  BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
@@ -117,12 +117,12 @@ jobs:
117
117
  username: locustbuild
118
118
  password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
119
119
  - name: Set up QEMU
120
- uses: docker/setup-qemu-action@v1
120
+ uses: docker/setup-qemu-action@v3
121
121
  - name: Set up Docker Buildx
122
- uses: docker/setup-buildx-action@v1
122
+ uses: docker/setup-buildx-action@v3
123
123
  - name: build and publish image
124
124
  id: docker_build
125
- uses: docker/build-push-action@v2
125
+ uses: docker/build-push-action@v5
126
126
  with:
127
127
  build-args: |
128
128
  BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
@@ -25,4 +25,5 @@ docs/env-options.rst
25
25
  __pycache__
26
26
  .pytest_cache
27
27
  .sass-cache/
28
- .env
28
+ .env
29
+ yarn-error.log
@@ -1,6 +1,40 @@
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.20.0](https://github.com/locustio/locust/tree/2.20.0) (2023-12-13)
5
+
6
+ [Full Changelog](https://github.com/locustio/locust/compare/2.19.1...2.20.0)
7
+
8
+ **Fixed bugs:**
9
+
10
+ - har2locust KeyError: '\_resourceType' [\#2503](https://github.com/locustio/locust/issues/2503)
11
+ - FastHTTPUser determines StatusCode 304 as Failed [\#2500](https://github.com/locustio/locust/issues/2500)
12
+ - FastHttpUser is stricter than HttpUser about the host attribute [\#2492](https://github.com/locustio/locust/issues/2492)
13
+ - Unable to modify custom parameters from UI using modern UI [\#2489](https://github.com/locustio/locust/issues/2489)
14
+ - Exception 'LookupError: unknown encoding:' when response contains `content-type` not handled by requests.utils.get\_encoding\_from\_headers [\#2482](https://github.com/locustio/locust/issues/2482)
15
+
16
+ **Merged pull requests:**
17
+
18
+ - Fix useSwarmUi Test with Mock Timers [\#2514](https://github.com/locustio/locust/pull/2514) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
19
+ - Custom messages: Throw an exception if someone tries to register twice for the same event [\#2513](https://github.com/locustio/locust/pull/2513) ([cyberw](https://github.com/cyberw))
20
+ - Fixed response failure for unsupported encoding [\#2512](https://github.com/locustio/locust/pull/2512) ([prince-melvin](https://github.com/prince-melvin))
21
+ - Add event.measure context manager for simpler firing of request event [\#2511](https://github.com/locustio/locust/pull/2511) ([cyberw](https://github.com/cyberw))
22
+ - Update Web UI About box [\#2510](https://github.com/locustio/locust/pull/2510) ([cyberw](https://github.com/cyberw))
23
+ - Chart Average Response Time in Modern UI [\#2509](https://github.com/locustio/locust/pull/2509) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
24
+ - Update the About Section [\#2508](https://github.com/locustio/locust/pull/2508) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
25
+ - Allow Boolean and Null Values to be Set from the Web UI [\#2507](https://github.com/locustio/locust/pull/2507) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
26
+ - custom messages: Support sending datetimes and bson.ObjectId [\#2504](https://github.com/locustio/locust/pull/2504) ([cyberw](https://github.com/cyberw))
27
+ - Add Notifications for Log Viewer [\#2502](https://github.com/locustio/locust/pull/2502) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
28
+ - FastHttpUser: Treat response code 304 as OK [\#2501](https://github.com/locustio/locust/pull/2501) ([cyberw](https://github.com/cyberw))
29
+ - Fix Warnings from the Web UI Tests [\#2499](https://github.com/locustio/locust/pull/2499) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
30
+ - Adjust "Starting web interface at"-output [\#2498](https://github.com/locustio/locust/pull/2498) ([cyberw](https://github.com/cyberw))
31
+ - Update mypy, some type hints, and some tiny updates to Runner classes [\#2497](https://github.com/locustio/locust/pull/2497) ([cyberw](https://github.com/cyberw))
32
+ - Remove Typecheck from Web UI Build Process and Update Github Actions [\#2496](https://github.com/locustio/locust/pull/2496) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
33
+ - Replace Vitest canvas mock library [\#2495](https://github.com/locustio/locust/pull/2495) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
34
+ - Implement Modern Web UI Tests [\#2494](https://github.com/locustio/locust/pull/2494) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
35
+ - Further relax FastHttpUser's host checking to match HttpUser's [\#2493](https://github.com/locustio/locust/pull/2493) ([pjenvey](https://github.com/pjenvey))
36
+ - Unable to modify custom parameters from the modern UI [\#2491](https://github.com/locustio/locust/pull/2491) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
37
+
4
38
  ## [2.19.1](https://github.com/locustio/locust/tree/2.19.1) (2023-11-27)
5
39
 
6
40
  [Full Changelog](https://github.com/locustio/locust/compare/2.19.0...2.19.1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.19.2.dev66
3
+ Version: 2.20.1
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://locust.io/
@@ -30,7 +30,7 @@ License-File: LICENSE
30
30
  Requires-Dist: gevent>=22.10.2
31
31
  Requires-Dist: flask>=2.0.0
32
32
  Requires-Dist: Werkzeug>=2.0.0
33
- Requires-Dist: requests>=2.23.0
33
+ Requires-Dist: requests>=2.26.0
34
34
  Requires-Dist: msgpack>=1.0.0
35
35
  Requires-Dist: pyzmq>=25.0.0
36
36
  Requires-Dist: geventhttpclient>=2.0.11
@@ -45,12 +45,16 @@ Requires-Dist: pywin32; platform_system == "Windows"
45
45
 
46
46
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
47
47
  [![PyPI](https://img.shields.io/pypi/pyversions/locust.svg)](https://pypi.org/project/locust/)
48
+ [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
48
49
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
49
- [![license](https://img.shields.io/github/license/locustio/locust.svg)](https://github.com/locustio/locust/blob/master/LICENSE)
50
50
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
51
51
  [![Support Ukraine Badge](https://bit.ly/support-ukraine-now)](https://github.com/support-ukraine/support-ukraine)
52
52
 
53
- Locust is an easy to use, scriptable and scalable performance testing tool. You define your load test in regular Python code, instead of being constrained by a UI or domain specific language that only pretends to be real code. This makes Locust infinitely expandable and very developer friendly.
53
+ Locust is an open source performance/load testing tool for HTTP and other protocols. Its developer friendly approach lets you to define your tests in regular Python code.
54
+
55
+ Locust tests can be run from command line or using its web-based UI. Throughput, response times and errors can be viewed in real time and/or exported for later analysis.
56
+
57
+ You can import regular Python libraries into your tests, and with Locust's pluggable architecture it is infinitely expandable. Unlike when using most other tools, your test design will never be limited by a GUI or domain-specific language.
54
58
 
55
59
  To get started right away, head over to the [documentation](http://docs.locust.io/en/stable/installation.html).
56
60
 
@@ -2,12 +2,16 @@
2
2
 
3
3
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
4
4
  [![PyPI](https://img.shields.io/pypi/pyversions/locust.svg)](https://pypi.org/project/locust/)
5
+ [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
5
6
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
6
- [![license](https://img.shields.io/github/license/locustio/locust.svg)](https://github.com/locustio/locust/blob/master/LICENSE)
7
7
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
8
8
  [![Support Ukraine Badge](https://bit.ly/support-ukraine-now)](https://github.com/support-ukraine/support-ukraine)
9
9
 
10
- Locust is an easy to use, scriptable and scalable performance testing tool. You define your load test in regular Python code, instead of being constrained by a UI or domain specific language that only pretends to be real code. This makes Locust infinitely expandable and very developer friendly.
10
+ Locust is an open source performance/load testing tool for HTTP and other protocols. Its developer friendly approach lets you to define your tests in regular Python code.
11
+
12
+ Locust tests can be run from command line or using its web-based UI. Throughput, response times and errors can be viewed in real time and/or exported for later analysis.
13
+
14
+ You can import regular Python libraries into your tests, and with Locust's pluggable architecture it is infinitely expandable. Unlike when using most other tools, your test design will never be limited by a GUI or domain-specific language.
11
15
 
12
16
  To get started right away, head over to the [documentation](http://docs.locust.io/en/stable/installation.html).
13
17
 
@@ -120,6 +120,7 @@ EventHook class
120
120
  The event hooks are instances of the **locust.events.EventHook** class:
121
121
 
122
122
  .. autoclass:: locust.event.EventHook
123
+ :members:
123
124
 
124
125
  .. note::
125
126
 
@@ -4,6 +4,19 @@ 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.20.1
8
+ ======
9
+ * run_single_user improvements https://github.com/locustio/locust/pull/2519
10
+ * Support IPv6 for zmq connection between master and worker https://github.com/locustio/locust/pull/2521
11
+ * Modern UI: Update Vite to 4.5.1 https://github.com/locustio/locust/pull/2530
12
+ * Other tiny fixes
13
+
14
+ 2.20.0
15
+ ======
16
+ * Add event.measure context manager for simpler firing of request event (experimental) https://github.com/locustio/locust/pull/2511
17
+ * Various improvements to modern UI https://github.com/locustio/locust/pull/2491
18
+ * Various tiny fixes
19
+
7
20
  2.19.1
8
21
  ======
9
22
  * Create any directories as part of the CSV Prefix https://github.com/locustio/locust/pull/2481
@@ -53,30 +53,30 @@ Options
53
53
  =======
54
54
 
55
55
  ``--master-host <hostname or ip>``
56
- -------------------------
56
+ ----------------------------------
57
57
 
58
58
  Optionally used together with ``--worker`` to set the hostname/IP of the master node (defaults
59
59
  to localhost)
60
60
 
61
61
  ``--master-port <port number>``
62
- ----------------------
62
+ -------------------------------
63
63
 
64
64
  Optionally used together with ``--worker`` to set the port number of the master node (defaults to 5557).
65
65
 
66
66
  ``--master-bind-host <ip>``
67
- ------------------------------
67
+ ---------------------------
68
68
 
69
69
  Optionally used together with ``--master``. Determines which network interface the master node
70
70
  will bind to. Defaults to * (all available interfaces).
71
71
 
72
72
  ``--master-bind-port <port number>``
73
- ------------------------------
73
+ ------------------------------------
74
74
 
75
75
  Optionally used together with ``--master``. Determines what network ports that the master node will
76
76
  listen to. Defaults to 5557.
77
77
 
78
78
  ``--expect-workers <number of workers>``
79
- ----------------------
79
+ ----------------------------------------
80
80
 
81
81
  Used when starting the master node with ``--headless``. The master node will then wait until X worker
82
82
  nodes has connected before the test is started.
@@ -2,11 +2,11 @@
2
2
  What is Locust?
3
3
  ===============================
4
4
 
5
- Locust is an easy to use, scriptable and scalable performance testing tool.
5
+ Locust is an open source performance/load testing tool for HTTP and other protocols. Its developer friendly approach lets you to define your tests in regular Python code.
6
6
 
7
- You define the behaviour of your users in regular Python code, instead of being stuck in a UI or restrictive domain specific language.
7
+ Locust tests can be run from command line or using its web-based UI. Throughput, response times and errors can be viewed in real time and/or exported for later analysis.
8
8
 
9
- This makes Locust infinitely expandable and very developer friendly.
9
+ You can import regular Python libraries into your tests, and with Locust's pluggable architecture it is infinitely expandable. Unlike when using most other tools, your test design will never be limited by a GUI or domain-specific language.
10
10
 
11
11
  To start using Locust, go to :ref:`installation`
12
12
 
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.19.2.dev66'
16
- __version_tuple__ = version_tuple = (2, 19, 2, 'dev66')
15
+ __version__ = version = '2.20.1'
16
+ __version_tuple__ = version_tuple = (2, 20, 1)
@@ -355,7 +355,7 @@ def setup_parser_arguments(parser):
355
355
  dest="web_auth",
356
356
  metavar="<username:password>",
357
357
  default=None,
358
- help="DEPRECATED Turn on Basic Auth for the web interface. Should be supplied in the following format: username:password",
358
+ help="DEPRECATED. See https://github.com/locustio/locust/issues/2517 Turn on Basic Auth for the web interface. Should be supplied in the following format: username:password ",
359
359
  env_var="LOCUST_WEB_AUTH",
360
360
  )
361
361
  web_ui_group.add_argument(
@@ -2,6 +2,7 @@ from datetime import datetime, timezone
2
2
  import os
3
3
  import inspect
4
4
  import locust
5
+ import locust.log
5
6
  from locust import User, argument_parser
6
7
  from typing import Type, Optional
7
8
  from locust.env import Environment
@@ -102,7 +103,7 @@ def run_single_user(
102
103
  include_time=False,
103
104
  include_context=False,
104
105
  include_payload=False,
105
- loglevel=None,
106
+ loglevel: Optional[str] = "WARNING",
106
107
  ):
107
108
  """
108
109
  Runs a single User. Useful when you want to run a debugger.
@@ -113,8 +114,8 @@ def run_single_user(
113
114
 
114
115
  It prints some info about every request to stdout, and you can get additional info using the `include_*` flags
115
116
 
116
- By default, it does not set up locusts logging system (because it could interfere with the printing of requests),
117
- but you can change that by passing a log level (e.g. *loglevel="INFO"*)
117
+ It also initiates logging on WARNING level (not INFO, because it could interfere with the printing of requests),
118
+ but you can change that by passing a log level (or disabling logging entirely by passing None)
118
119
  """
119
120
  global _env
120
121
 
@@ -141,6 +142,9 @@ def run_single_user(
141
142
  )
142
143
  # fire various events (quit and test_stop will never get called, sorry about that)
143
144
  _env.events.init.fire(environment=_env, runner=None, web_ui=None)
145
+ # uncaught events will be suppressed, so check if that happened
146
+ if locust.log.unhandled_greenlet_exception:
147
+ raise Exception("Unhandled exception in init")
144
148
 
145
149
  # do the things that the Runner usually does
146
150
  _env.user_classes = [user_class]
@@ -55,7 +55,12 @@ class EventHook:
55
55
  ) -> Generator[Dict[str, Any], None, None]:
56
56
  """Convenience method for firing the event with automatically calculated response time and automatically marking the request as failed if an exception is raised (this is really only useful for the *request* event)
57
57
 
58
- Other attributes in the event can be added/updated inside your with block if you use the "with ... as request_meta:" syntax.
58
+ Example usage (in a task):
59
+
60
+ with self.environment.events.request.measure("myrequestType", "myRequestName") as request_meta:
61
+ # do the stuff you want to measure
62
+
63
+ You can optionally add/overwrite entries in the request_meta dict and they will be passed to the request event.
59
64
 
60
65
  Experimental.
61
66
  """
@@ -91,7 +96,7 @@ class DeprecatedEventHook(EventHook):
91
96
  class Events:
92
97
  request: EventHook
93
98
  """
94
- Fired when a request in completed, successful or unsuccessful. This event is typically used to report requests when writing custom clients for locust.
99
+ Fired when a request in completed.
95
100
 
96
101
  Event arguments:
97
102
 
@@ -102,6 +107,8 @@ class Events:
102
107
  :param response: Response object (e.g. a :py:class:`requests.Response`)
103
108
  :param context: :ref:`User/request context <request_context>`
104
109
  :param exception: Exception instance that was thrown. None if request was successful.
110
+
111
+ If you want to simplify a custom client, you can have Locust measure the time for you by using :meth:`measure() <locust.event.EventHook.measure>`
105
112
  """
106
113
 
107
114
  user_error: EventHook
@@ -428,7 +428,9 @@ See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-numb
428
428
  else:
429
429
  logger.info(f"Starting web interface at {protocol}://0.0.0.0:{options.web_port}")
430
430
  if options.web_auth:
431
- logging.info("BasicAuth support is deprecated, it will be removed in a future release.")
431
+ logging.warning(
432
+ "BasicAuth support is deprecated, it will be removed in a future release, unless someone reimplements it in a more modern way! See https://github.com/locustio/locust/issues/2517"
433
+ )
432
434
  web_ui = environment.create_web_ui(
433
435
  host=web_host,
434
436
  port=options.web_port,
@@ -13,6 +13,7 @@ class BaseSocket:
13
13
 
14
14
  self.socket.setsockopt(zmq.TCP_KEEPALIVE, 1)
15
15
  self.socket.setsockopt(zmq.TCP_KEEPALIVE_IDLE, 30)
16
+ self.socket.setsockopt(zmq.IPV6, 1)
16
17
 
17
18
  @retry()
18
19
  def send(self, msg):
@@ -23,7 +23,7 @@ class TestDebugging(DebugTestCase):
23
23
 
24
24
  class MyUser1(HttpUser):
25
25
  @task
26
- def my_task():
26
+ def my_task(self):
27
27
  pass
28
28
 
29
29
  def _stop_user():
@@ -34,4 +34,7 @@ class TestDebugging(DebugTestCase):
34
34
  t = Timer(1, _stop_user)
35
35
  t.start()
36
36
 
37
- debug.run_single_user(MyUser1)
37
+ debug.run_single_user(
38
+ MyUser1,
39
+ loglevel=None, # another log setup might mess with other tests...
40
+ )
@@ -8,7 +8,7 @@ from locust.exception import RPCError, RPCSendError, RPCReceiveError
8
8
  class ZMQRPC_tests(LocustTestCase):
9
9
  def setUp(self):
10
10
  super().setUp()
11
- self.server = zmqrpc.Server("127.0.0.1", 0)
11
+ self.server = zmqrpc.Server("*", 0)
12
12
  self.client = zmqrpc.Client("localhost", self.server.port, "identity")
13
13
 
14
14
  def tearDown(self):
@@ -19,8 +19,10 @@ class ZMQRPC_tests(LocustTestCase):
19
19
  def test_constructor(self):
20
20
  self.assertEqual(self.server.socket.getsockopt(zmq.TCP_KEEPALIVE), 1)
21
21
  self.assertEqual(self.server.socket.getsockopt(zmq.TCP_KEEPALIVE_IDLE), 30)
22
+ self.assertEqual(self.server.socket.getsockopt(zmq.IPV6), 1)
22
23
  self.assertEqual(self.client.socket.getsockopt(zmq.TCP_KEEPALIVE), 1)
23
24
  self.assertEqual(self.client.socket.getsockopt(zmq.TCP_KEEPALIVE_IDLE), 30)
25
+ self.assertEqual(self.client.socket.getsockopt(zmq.IPV6), 1)
24
26
 
25
27
  def test_client_send(self):
26
28
  self.client.send(Message("test", "message", "identity"))
@@ -40,15 +42,15 @@ class ZMQRPC_tests(LocustTestCase):
40
42
  self.assertEqual(msg.node_id, "identity")
41
43
 
42
44
  def test_client_retry(self):
43
- server = zmqrpc.Server("127.0.0.1", 0)
45
+ server = zmqrpc.Server("*", 0)
44
46
  server.socket.close()
45
47
  with self.assertRaises(RPCError):
46
48
  server.recv_from_client()
47
49
 
48
50
  def test_rpc_error(self):
49
- server = zmqrpc.Server("127.0.0.1", 0)
51
+ server = zmqrpc.Server("*", 0)
50
52
  with self.assertRaises(RPCError):
51
- server = zmqrpc.Server("127.0.0.1", server.port)
53
+ server = zmqrpc.Server("*", server.port)
52
54
  server.close()
53
55
  with self.assertRaises(RPCSendError):
54
56
  server.send_to_client(Message("test", "message", "identity"))
@@ -88,7 +88,7 @@ def task(weight: TaskT | int = 1) -> TaskT | Callable[[TaskT], TaskT]:
88
88
  Check if task was used without parentheses (not called), like this::
89
89
 
90
90
  @task
91
- def my_task()
91
+ def my_task(self)
92
92
  pass
93
93
  """
94
94
  if callable(weight):
@@ -24,7 +24,7 @@
24
24
  "react-dom": "^18.2.0",
25
25
  "react-markdown": "^9.0.0",
26
26
  "react-redux": "^8.0.5",
27
- "vite": "^4.4.9",
27
+ "vite": "^4.5.1",
28
28
  "vite-plugin-checker": "^0.6.2",
29
29
  "vite-tsconfig-paths": "^4.2.1"
30
30
  },
@@ -3337,10 +3337,10 @@ mute-stream@0.0.8:
3337
3337
  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
3338
3338
  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
3339
3339
 
3340
- nanoid@^3.3.6:
3341
- version "3.3.6"
3342
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
3343
- integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
3340
+ nanoid@^3.3.7:
3341
+ version "3.3.7"
3342
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
3343
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
3344
3344
 
3345
3345
  natural-compare@^1.4.0:
3346
3346
  version "1.4.0"
@@ -3634,11 +3634,11 @@ pkg-types@^1.0.3:
3634
3634
  pathe "^1.1.0"
3635
3635
 
3636
3636
  postcss@^8.4.27:
3637
- version "8.4.30"
3638
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7"
3639
- integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==
3637
+ version "8.4.32"
3638
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
3639
+ integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
3640
3640
  dependencies:
3641
- nanoid "^3.3.6"
3641
+ nanoid "^3.3.7"
3642
3642
  picocolors "^1.0.0"
3643
3643
  source-map-js "^1.0.2"
3644
3644
 
@@ -3919,9 +3919,9 @@ rimraf@^3.0.2:
3919
3919
  glob "^7.1.3"
3920
3920
 
3921
3921
  rollup@^3.27.1:
3922
- version "3.29.2"
3923
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740"
3924
- integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==
3922
+ version "3.29.4"
3923
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
3924
+ integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
3925
3925
  optionalDependencies:
3926
3926
  fsevents "~2.3.2"
3927
3927
 
@@ -4609,10 +4609,10 @@ vite-tsconfig-paths@^4.2.1:
4609
4609
  optionalDependencies:
4610
4610
  fsevents "~2.3.2"
4611
4611
 
4612
- vite@^4.4.9:
4613
- version "4.4.9"
4614
- resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d"
4615
- integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==
4612
+ vite@^4.5.1:
4613
+ version "4.5.1"
4614
+ resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.1.tgz#3370986e1ed5dbabbf35a6c2e1fb1e18555b968a"
4615
+ integrity sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==
4616
4616
  dependencies:
4617
4617
  esbuild "^0.18.10"
4618
4618
  postcss "^8.4.27"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.19.2.dev66
3
+ Version: 2.20.1
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://locust.io/
@@ -30,7 +30,7 @@ License-File: LICENSE
30
30
  Requires-Dist: gevent>=22.10.2
31
31
  Requires-Dist: flask>=2.0.0
32
32
  Requires-Dist: Werkzeug>=2.0.0
33
- Requires-Dist: requests>=2.23.0
33
+ Requires-Dist: requests>=2.26.0
34
34
  Requires-Dist: msgpack>=1.0.0
35
35
  Requires-Dist: pyzmq>=25.0.0
36
36
  Requires-Dist: geventhttpclient>=2.0.11
@@ -45,12 +45,16 @@ Requires-Dist: pywin32; platform_system == "Windows"
45
45
 
46
46
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
47
47
  [![PyPI](https://img.shields.io/pypi/pyversions/locust.svg)](https://pypi.org/project/locust/)
48
+ [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
48
49
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
49
- [![license](https://img.shields.io/github/license/locustio/locust.svg)](https://github.com/locustio/locust/blob/master/LICENSE)
50
50
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
51
51
  [![Support Ukraine Badge](https://bit.ly/support-ukraine-now)](https://github.com/support-ukraine/support-ukraine)
52
52
 
53
- Locust is an easy to use, scriptable and scalable performance testing tool. You define your load test in regular Python code, instead of being constrained by a UI or domain specific language that only pretends to be real code. This makes Locust infinitely expandable and very developer friendly.
53
+ Locust is an open source performance/load testing tool for HTTP and other protocols. Its developer friendly approach lets you to define your tests in regular Python code.
54
+
55
+ Locust tests can be run from command line or using its web-based UI. Throughput, response times and errors can be viewed in real time and/or exported for later analysis.
56
+
57
+ You can import regular Python libraries into your tests, and with Locust's pluggable architecture it is infinitely expandable. Unlike when using most other tools, your test design will never be limited by a GUI or domain-specific language.
54
58
 
55
59
  To get started right away, head over to the [documentation](http://docs.locust.io/en/stable/installation.html).
56
60
 
@@ -1,7 +1,7 @@
1
1
  gevent>=22.10.2
2
2
  flask>=2.0.0
3
3
  Werkzeug>=2.0.0
4
- requests>=2.23.0
4
+ requests>=2.26.0
5
5
  msgpack>=1.0.0
6
6
  pyzmq>=25.0.0
7
7
  geventhttpclient>=2.0.11
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "gevent >=22.10.2",
13
13
  "flask >=2.0.0",
14
14
  "Werkzeug >=2.0.0",
15
- "requests >=2.23.0",
15
+ "requests >=2.26.0",
16
16
  "msgpack >=1.0.0",
17
17
  "pyzmq >=25.0.0",
18
18
  "geventhttpclient >=2.0.11",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes