locust 2.25.1.dev17__tar.gz → 2.26.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 (352) hide show
  1. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.github/workflows/tests.yml +2 -2
  2. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.pre-commit-config.yaml +1 -1
  3. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/CHANGELOG.md +12 -0
  4. {locust-2.25.1.dev17/locust.egg-info → locust-2.26.1.dev7}/PKG-INFO +3 -3
  5. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/README.md +1 -1
  6. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/benchmarks/dispatch.py +4 -4
  7. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/changelog.rst +6 -0
  8. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/developing-locust.rst +4 -4
  9. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/_version.py +2 -2
  10. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/argument_parser.py +1 -1
  11. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/dispatch.py +2 -4
  12. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/rpc/protocol.py +1 -1
  13. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/runners.py +3 -3
  14. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/mock_locustfile.py +0 -2
  15. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/mock_logging.py +1 -2
  16. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_dispatch.py +8 -34
  17. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_env.py +3 -3
  18. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_fasthttp.py +9 -9
  19. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_http.py +7 -7
  20. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_locust_class.py +4 -4
  21. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_main.py +2 -2
  22. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_parser.py +9 -8
  23. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_runners.py +0 -1
  24. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_web.py +2 -6
  25. {locust-2.25.1.dev17 → locust-2.26.1.dev7/locust.egg-info}/PKG-INFO +3 -3
  26. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust.egg-info/requires.txt +1 -1
  27. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/pyproject.toml +1 -2
  28. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/tox.ini +2 -1
  29. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.coveragerc +0 -0
  30. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.dockerignore +0 -0
  31. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.git-blame-ignore-revs +0 -0
  32. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.gitattributes +0 -0
  33. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.github/CONTRIBUTING.md +0 -0
  34. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  35. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  36. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  37. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.github/workflows/stale.yml +0 -0
  38. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.gitignore +0 -0
  39. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.readthedocs.yaml +0 -0
  40. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.vscode/extensions.json +0 -0
  41. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.vscode/launch.json +0 -0
  42. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.vscode/launch_locust.json +0 -0
  43. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/.vscode/settings.json +0 -0
  44. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/Dockerfile +0 -0
  45. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/LICENSE +0 -0
  46. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/MANIFEST.in +0 -0
  47. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/Makefile +0 -0
  48. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/README +0 -0
  49. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/SECURITY.md +0 -0
  50. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/Vagrantfile +0 -0
  51. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/_static/theme-overrides.css +0 -0
  52. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/api.rst +0 -0
  53. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/conf.py +0 -0
  54. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/configuration.rst +0 -0
  55. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/custom-load-shape.rst +0 -0
  56. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/extending-locust.rst +0 -0
  57. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/further-reading.rst +0 -0
  58. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/history.rst +0 -0
  59. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/extend_modern_web_ui_cache_stats.png +0 -0
  60. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/locust_workers.png +0 -0
  61. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/number_of_users.png +0 -0
  62. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/response_times.png +0 -0
  63. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/total_requests_per_second.png +0 -0
  64. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/userclass_picker_example.png +0 -0
  65. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/webui-running-statistics.png +0 -0
  66. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/images/webui-splash-screenshot.png +0 -0
  67. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/increase-performance.rst +0 -0
  68. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/index.rst +0 -0
  69. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/installation.rst +0 -0
  70. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/logging.rst +0 -0
  71. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/quickstart.rst +0 -0
  72. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/requirements.txt +0 -0
  73. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/retrieving-stats.rst +0 -0
  74. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/running-cloud-integration.rst +0 -0
  75. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/running-distributed.rst +0 -0
  76. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/running-in-debugger.rst +0 -0
  77. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/running-in-docker.rst +0 -0
  78. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/running-without-web-ui.rst +0 -0
  79. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/tasksets.rst +0 -0
  80. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/testing-other-systems.rst +0 -0
  81. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/use-as-lib.rst +0 -0
  82. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/what-is-locust.rst +0 -0
  83. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/docs/writing-a-locustfile.rst +0 -0
  84. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/add_command_line_argument.py +0 -0
  85. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/basic.py +0 -0
  86. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/browse_docs_sequence_test.py +0 -0
  87. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/browse_docs_test.py +0 -0
  88. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_messages.py +0 -0
  89. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_shape/double_wave.py +0 -0
  90. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_shape/stages.py +0 -0
  91. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_shape/staging_user_classes.py +0 -0
  92. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_shape/step_load.py +0 -0
  93. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_shape/wait_user_count.py +0 -0
  94. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_wait_function.py +0 -0
  95. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_xmlrpc_client/server.py +0 -0
  96. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
  97. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/debugging.py +0 -0
  98. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/debugging_advanced.py +0 -0
  99. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/docker-compose/docker-compose.yml +0 -0
  100. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/dynamic_user_credentials.py +0 -0
  101. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/events.py +0 -0
  102. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/extend_modern_web_ui.py +0 -0
  103. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/extend_web_ui/extend.py +0 -0
  104. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
  105. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/extend_web_ui/static/extend.js +0 -0
  106. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/extend_web_ui/templates/extend.html +0 -0
  107. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/fast_http_locust.py +0 -0
  108. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/grpc/grpc_user.py +0 -0
  109. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/grpc/hello.proto +0 -0
  110. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/grpc/hello_pb2.py +0 -0
  111. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/grpc/hello_pb2_grpc.py +0 -0
  112. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/grpc/hello_server.py +0 -0
  113. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/grpc/locustfile.py +0 -0
  114. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/locustfile.py +0 -0
  115. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/manual_stats_reporting.py +0 -0
  116. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/multiple_hosts.py +0 -0
  117. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/nested_inline_tasksets.py +0 -0
  118. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/rest.py +0 -0
  119. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
  120. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/semaphore_wait.py +0 -0
  121. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/stop_on_threshold.py +0 -0
  122. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/terraform/aws/README.md +0 -0
  123. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/terraform/aws/data_subnet.tf +0 -0
  124. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/terraform/aws/main.tf +0 -0
  125. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/terraform/aws/output.tf +0 -0
  126. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/terraform/aws/plan/basic.py +0 -0
  127. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/terraform/aws/provisioner.tf +0 -0
  128. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/terraform/aws/variables.tf +0 -0
  129. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/test_data_management.py +0 -0
  130. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/use_as_lib.py +0 -0
  131. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/vagrant/README.md +0 -0
  132. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/vagrant/supervisord.conf +0 -0
  133. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/web_ui_auth.py +0 -0
  134. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/web_ui_cache_stats.py +0 -0
  135. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/examples/worker_index.py +0 -0
  136. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/generate_changelog.py +0 -0
  137. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/__init__.py +0 -0
  138. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/__main__.py +0 -0
  139. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/clients.py +0 -0
  140. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/contrib/__init__.py +0 -0
  141. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/contrib/fasthttp.py +0 -0
  142. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/debug.py +0 -0
  143. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/env.py +0 -0
  144. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/event.py +0 -0
  145. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/exception.py +0 -0
  146. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/html.py +0 -0
  147. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/input_events.py +0 -0
  148. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/log.py +0 -0
  149. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/main.py +0 -0
  150. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/py.typed +0 -0
  151. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/rpc/__init__.py +0 -0
  152. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/rpc/zmqrpc.py +0 -0
  153. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/shape.py +0 -0
  154. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/chart.js +0 -0
  155. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/css/application.css +0 -0
  156. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/css/application.css.map +0 -0
  157. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/css/tables.css +0 -0
  158. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/css/tables.css.map +0 -0
  159. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/echarts.common.min.js +0 -0
  160. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/img/favicon.ico +0 -0
  161. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/img/logo.png +0 -0
  162. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/img/ui-screenshot-charts.png +0 -0
  163. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/img/ui-screenshot-start-test.png +0 -0
  164. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/img/ui-screenshot-stats.png +0 -0
  165. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/img/ui-screenshot-workers.png +0 -0
  166. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/jquery-1.11.3.min.js +0 -0
  167. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/jquery.jqote2.min.js +0 -0
  168. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/jquery.tools.min.js +0 -0
  169. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/locust.js +0 -0
  170. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/sass/_base.sass +0 -0
  171. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/sass/_mixins.sass +0 -0
  172. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/sass/application.sass +0 -0
  173. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/sass/tables.sass +0 -0
  174. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/tasks.js +0 -0
  175. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/static/vintage.js +0 -0
  176. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/stats.py +0 -0
  177. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/templates/index.html +0 -0
  178. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/templates/report.html +0 -0
  179. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/templates/stats_data.html +0 -0
  180. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/__init__.py +0 -0
  181. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/fake_module1_for_env_test.py +0 -0
  182. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/fake_module2_for_env_test.py +0 -0
  183. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_debugging.py +0 -0
  184. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_interruptable_task.py +0 -0
  185. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_load_locustfile.py +0 -0
  186. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_log.py +0 -0
  187. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_old_wait_api.py +0 -0
  188. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_sequential_taskset.py +0 -0
  189. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_stats.py +0 -0
  190. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_tags.py +0 -0
  191. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_taskratio.py +0 -0
  192. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_users.py +0 -0
  193. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_util.py +0 -0
  194. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_wait_time.py +0 -0
  195. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/test_zmqrpc.py +0 -0
  196. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/testcases.py +0 -0
  197. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/test/util.py +0 -0
  198. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/user/__init__.py +0 -0
  199. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/user/inspectuser.py +0 -0
  200. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/user/sequential_taskset.py +0 -0
  201. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/user/task.py +0 -0
  202. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/user/users.py +0 -0
  203. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/user/wait_time.py +0 -0
  204. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/util/__init__.py +0 -0
  205. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/util/cache.py +0 -0
  206. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/util/deprecation.py +0 -0
  207. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/util/exception_handler.py +0 -0
  208. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/util/load_locustfile.py +0 -0
  209. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/util/rounding.py +0 -0
  210. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/util/timespan.py +0 -0
  211. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/web.py +0 -0
  212. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/.eslintrc +0 -0
  213. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/.gitignore +0 -0
  214. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/.prettierrc +0 -0
  215. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/auth.html +0 -0
  216. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/dev.html +0 -0
  217. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/dist/assets/favicon.ico +0 -0
  218. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/dist/assets/index-941b6e82.js +0 -0
  219. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/dist/assets/logo.png +0 -0
  220. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/dist/auth.html +0 -0
  221. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/dist/index.html +0 -0
  222. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/dist/report.html +0 -0
  223. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/index.html +0 -0
  224. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/package.json +0 -0
  225. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/public/assets/favicon.ico +0 -0
  226. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/public/assets/logo.png +0 -0
  227. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/public/report.html +0 -0
  228. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/App.test.tsx +0 -0
  229. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/App.tsx +0 -0
  230. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
  231. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
  232. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
  233. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
  234. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/FallbackRender/FallbackRender.test.tsx +0 -0
  235. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/FallbackRender/FallbackRender.tsx +0 -0
  236. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Form/Form.tsx +0 -0
  237. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Form/Select.tsx +0 -0
  238. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
  239. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
  240. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
  241. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
  242. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Layout/Layout.tsx +0 -0
  243. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
  244. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
  245. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
  246. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
  247. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
  248. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
  249. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
  250. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
  251. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
  252. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
  253. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Modal/Modal.tsx +0 -0
  254. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
  255. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Reports/Reports.tsx +0 -0
  256. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
  257. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
  258. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
  259. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
  260. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
  261. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
  262. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
  263. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
  264. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
  265. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
  266. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
  267. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
  268. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
  269. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
  270. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
  271. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
  272. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
  273. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
  274. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
  275. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
  276. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
  277. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
  278. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Table/Table.test.tsx +0 -0
  279. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Table/Table.tsx +0 -0
  280. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
  281. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
  282. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
  283. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
  284. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
  285. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
  286. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/constants/auth.ts +0 -0
  287. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/constants/swarm.ts +0 -0
  288. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/constants/theme.ts +0 -0
  289. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/global.d.ts +0 -0
  290. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
  291. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
  292. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
  293. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
  294. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/useInterval.ts +0 -0
  295. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/useNotifications.ts +0 -0
  296. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
  297. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/useSortByField.ts +0 -0
  298. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
  299. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/index.tsx +0 -0
  300. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/pages/Auth.tsx +0 -0
  301. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/pages/Dashboard.tsx +0 -0
  302. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/pages/HtmlReport.tsx +0 -0
  303. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/pages/tests/Auth.test.tsx +0 -0
  304. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/pages/tests/Dashboard.test.tsx +0 -0
  305. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/pages/tests/HtmlReport.test.tsx +0 -0
  306. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/api/swarm.ts +0 -0
  307. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/hooks.ts +0 -0
  308. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
  309. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
  310. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/root.slice.ts +0 -0
  311. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
  312. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
  313. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
  314. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
  315. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/slice/url.slice.ts +0 -0
  316. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/store.ts +0 -0
  317. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/redux/utils.ts +0 -0
  318. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/styles/theme.ts +0 -0
  319. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/test/constants.ts +0 -0
  320. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
  321. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
  322. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/test/setup.ts +0 -0
  323. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/test/testUtils.tsx +0 -0
  324. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/types/auth.types.ts +0 -0
  325. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/types/swarm.types.ts +0 -0
  326. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/types/tab.types.ts +0 -0
  327. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/types/table.types.ts +0 -0
  328. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/types/ui.types.ts +0 -0
  329. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/number.ts +0 -0
  330. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/object.ts +0 -0
  331. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/string.ts +0 -0
  332. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/tests/number.test.ts +0 -0
  333. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/tests/object.test.ts +0 -0
  334. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/tests/string.test.ts +0 -0
  335. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/tests/url.test.ts +0 -0
  336. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/src/utils/url.ts +0 -0
  337. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/tsconfig.json +0 -0
  338. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/vite.config.ts +0 -0
  339. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/vitest.config.ts +0 -0
  340. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust/webui/yarn.lock +0 -0
  341. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust.egg-info/SOURCES.txt +0 -0
  342. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust.egg-info/dependency_links.txt +0 -0
  343. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust.egg-info/entry_points.txt +0 -0
  344. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust.egg-info/not-zip-safe +0 -0
  345. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/locust.egg-info/top_level.txt +0 -0
  346. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/package.json +0 -0
  347. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/scripts/locustfile.py +0 -0
  348. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/scripts/run-disributed-headless.sh +0 -0
  349. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/scripts/run-disributed-web.sh +0 -0
  350. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/scripts/run-local-headless.sh +0 -0
  351. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/scripts/run-local-web.sh +0 -0
  352. {locust-2.25.1.dev17 → locust-2.26.1.dev7}/setup.cfg +0 -0
@@ -151,7 +151,7 @@ jobs:
151
151
  python -m build
152
152
  echo "TAG=${GITHUB_REF#refs/*/}" | tee -a $GITHUB_ENV
153
153
  - name: Publish tagged version to PyPI
154
- uses: pypa/gh-action-pypi-publish@master
154
+ uses: pypa/gh-action-pypi-publish@release/v1
155
155
  with:
156
156
  user: __token__
157
157
  password: ${{ secrets.PYPI_API_TOKEN }}
@@ -190,7 +190,7 @@ jobs:
190
190
  python -m build
191
191
  - name: Publish prerelease version to PyPI
192
192
  if: ${{ env.NOT_MERGE_COMMIT == '' }}
193
- uses: pypa/gh-action-pypi-publish@master
193
+ uses: pypa/gh-action-pypi-publish@release/v1
194
194
  with:
195
195
  user: __token__
196
196
  password: ${{ secrets.PYPI_API_TOKEN }}
@@ -1,7 +1,7 @@
1
1
  repos:
2
2
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
3
  # Ruff version.
4
- rev: v0.3.7
4
+ rev: v0.3.7 # Pin the same version in the tox.ini file.
5
5
  hooks:
6
6
  # Run the linter.
7
7
  - id: ruff
@@ -1,6 +1,18 @@
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.26.0](https://github.com/locustio/locust/tree/2.26.0) (2024-04-18)
5
+
6
+ [Full Changelog](https://github.com/locustio/locust/compare/2.25.0...2.26.0)
7
+
8
+ **Merged pull requests:**
9
+
10
+ - Reformat and lint stuff. And pin gevenhttpclient version [\#2682](https://github.com/locustio/locust/pull/2682) ([cyberw](https://github.com/cyberw))
11
+ - Add ruff pre commit hook [\#2680](https://github.com/locustio/locust/pull/2680) ([cyberw](https://github.com/cyberw))
12
+ - Remove python 3.8 compatibility code [\#2679](https://github.com/locustio/locust/pull/2679) ([cyberw](https://github.com/cyberw))
13
+ - Drop support for Python 3.8 [\#2677](https://github.com/locustio/locust/pull/2677) ([cyberw](https://github.com/cyberw))
14
+ - Update geventhttpclient and adjust FastHttpUser max\_retries / max\_redirects [\#2676](https://github.com/locustio/locust/pull/2676) ([cyberw](https://github.com/cyberw))
15
+
4
16
  ## [2.25.0](https://github.com/locustio/locust/tree/2.25.0) (2024-04-14)
5
17
 
6
18
  [Full Changelog](https://github.com/locustio/locust/compare/2.24.1...2.25.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.25.1.dev17
3
+ Version: 2.26.1.dev7
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/locustio/locust
@@ -32,7 +32,7 @@ Requires-Dist: Werkzeug>=2.0.0
32
32
  Requires-Dist: requests>=2.26.0
33
33
  Requires-Dist: msgpack>=1.0.0
34
34
  Requires-Dist: pyzmq>=25.0.0
35
- Requires-Dist: geventhttpclient>=2.2.1
35
+ Requires-Dist: geventhttpclient==2.2.1
36
36
  Requires-Dist: ConfigArgParse>=1.5.5
37
37
  Requires-Dist: tomli>=1.1.0; python_version < "3.11"
38
38
  Requires-Dist: psutil>=5.9.1
@@ -44,7 +44,7 @@ Requires-Dist: pywin32; platform_system == "Windows"
44
44
  # Locust
45
45
 
46
46
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
47
- ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flocustio%2Flocust%2Fmaster%2Fpyproject.toml&link=https%3A%2F%2Fpypi.org%2Fproject%2Flocust)
47
+ ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flocustio%2Flocust%2Fmaster%2Fpyproject.toml)
48
48
  [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
49
49
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
50
50
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
@@ -1,7 +1,7 @@
1
1
  # Locust
2
2
 
3
3
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
4
- ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flocustio%2Flocust%2Fmaster%2Fpyproject.toml&link=https%3A%2F%2Fpypi.org%2Fproject%2Flocust)
4
+ ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flocustio%2Flocust%2Fmaster%2Fpyproject.toml)
5
5
  [![Downloads](https://pepy.tech/badge/locust/week)](https://pepy.tech/project/locust)
6
6
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
7
7
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
@@ -566,19 +566,19 @@ if __name__ == "__main__":
566
566
  all_dispatched_users_ramp_down = list(users_dispatcher)
567
567
  dispatch_iteration_durations_ramp_down = users_dispatcher.dispatch_iteration_durations[:]
568
568
 
569
- cpu_ramp_up = "{:3.3f}/{:3.3f}/{:3.3f}".format(
569
+ cpu_ramp_up = "{:3.3f}/{:3.3f}/{:3.3f}".format( # noqa: UP032
570
570
  1000 * statistics.mean(dispatch_iteration_durations_ramp_up),
571
571
  1000 * min(dispatch_iteration_durations_ramp_up),
572
572
  1000 * max(dispatch_iteration_durations_ramp_up),
573
- )
574
- cpu_ramp_down = "{:3.3f}/{:3.3f}/{:3.3f}".format(
573
+ ) # noqa: UP032
574
+ cpu_ramp_down = "{:3.3f}/{:3.3f}/{:3.3f}".format( # noqa: UP032
575
575
  1000 * statistics.mean(dispatch_iteration_durations_ramp_down),
576
576
  1000 * min(dispatch_iteration_durations_ramp_down),
577
577
  1000 * max(dispatch_iteration_durations_ramp_down),
578
578
  )
579
579
 
580
580
  print(
581
- "{:04.0f}/{:04.0f} - {:,} workers - {:,} users - {} user classes - {:,} users/s - instantiate: {:.3f}ms - new_dispatch (ramp-up/ramp-down): {:.3f}ms/{:.3f}ms - cpu_ramp_up: {}ms - cpu_ramp_down: {}ms".format(
581
+ "{:04.0f}/{:04.0f} - {:,} workers - {:,} users - {} user classes - {:,} users/s - instantiate: {:.3f}ms - new_dispatch (ramp-up/ramp-down): {:.3f}ms/{:.3f}ms - cpu_ramp_up: {}ms - cpu_ramp_down: {}ms".format( # noqa: UP032
582
582
  case_index + 1,
583
583
  case_count,
584
584
  worker_count,
@@ -4,6 +4,12 @@ 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.26.0
8
+ ======
9
+ * Drop support for Python 3.8
10
+ * Update geventhttpclient and adjust FastHttpUser max_retries / max_redirects (https://github.com/locustio/locust/pull/2676)
11
+ * Pin gevenhttpclient version (https://github.com/locustio/locust/pull/2682)
12
+
7
13
  2.25.0
8
14
  ======
9
15
  * Add functionality to run listener functions for `custom_messages` concurrently (https://github.com/locustio/locust/pull/2650)
@@ -20,7 +20,7 @@ Now the ``locust`` command will run *your* code with no need for reinstalling af
20
20
 
21
21
  To contribute your changes, push to a branch in your repo and then `open a PR on github <https://github.com/locustio/locust/compare>`_.
22
22
 
23
- If you install `pre-commit <https://pre-commit.com/>`_ linting and format checks/fixes will be automatically performed saving you a round trip to GitHub actions.
23
+ If you install `pre-commit <https://pre-commit.com/>`_, linting and format checks/fixes will be automatically performed before each commit.
24
24
 
25
25
  Before you open a pull request, make sure all the tests work. And if you are adding a feature, make sure it is documented (in ``docs/*.rst``).
26
26
 
@@ -34,10 +34,10 @@ We use `tox <https://tox.readthedocs.io/en/stable/>`_ to automate tests across m
34
34
  $ pip3 install tox
35
35
  $ tox
36
36
  ...
37
- py38: install_deps> python -I -m pip install cryptography mock pyquery retry
38
- py38: commands[0]> python3 -m pip install .
37
+ py39: install_deps> python -I -m pip install cryptography mock pyquery retry
38
+ py39: commands[0]> python3 -m pip install .
39
39
  ...
40
- py38: commands[1]> python3 -m unittest discover
40
+ py39: commands[1]> python3 -m unittest discover
41
41
  ...
42
42
 
43
43
  To only run a specific suite or specific test you can call `pytest <https://docs.pytest.org/>`_ directly:
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.25.1.dev17'
16
- __version_tuple__ = version_tuple = (2, 25, 1, 'dev17')
15
+ __version__ = version = '2.26.1.dev7'
16
+ __version_tuple__ = version_tuple = (2, 26, 1, 'dev7')
@@ -666,7 +666,7 @@ Typically ONLY these options (and --locustfile) need to be specified on workers,
666
666
  nargs="*",
667
667
  metavar="<tag>",
668
668
  env_var="LOCUST_TAGS",
669
- help="List of tags to include in the test, so only tasks with any matching tags will be executed",
669
+ help="List of tags to include in the test, so only tasks with at least one matching tag will be executed",
670
670
  )
671
671
  tag_group.add_argument(
672
672
  "-E",
@@ -100,8 +100,7 @@ class UsersDispatcher(Iterator):
100
100
  self._no_user_to_spawn = False
101
101
 
102
102
  def get_current_user_count(self) -> int:
103
- # need to ignore type due to https://github.com/python/mypy/issues/1507
104
- return sum(map(sum, map(dict.values, self._users_on_workers.values()))) # type: ignore
103
+ return sum(map(sum, map(dict.values, self._users_on_workers.values())))
105
104
 
106
105
  @property
107
106
  def dispatch_in_progress(self):
@@ -449,5 +448,4 @@ class UsersDispatcher(Iterator):
449
448
  The implementation was profiled and compared to other implementations such as dict-comprehensions
450
449
  and the one below is the most efficient.
451
450
  """
452
- # type is ignored due to: https://github.com/python/mypy/issues/1507
453
- return dict(zip(users_on_workers.keys(), map(dict.copy, users_on_workers.values()))) # type: ignore
451
+ return dict(zip(users_on_workers.keys(), map(dict.copy, users_on_workers.values())))
@@ -5,7 +5,7 @@ import datetime
5
5
  import msgpack
6
6
 
7
7
  try:
8
- from bson import ObjectId # type: ignore
8
+ from bson import ObjectId
9
9
  except ImportError:
10
10
 
11
11
  class ObjectId: # type: ignore
@@ -345,10 +345,10 @@ class Runner:
345
345
  return
346
346
  elif self.shape_last_tick != current_tick:
347
347
  if len(current_tick) == 2:
348
- user_count, spawn_rate = current_tick # type: ignore
348
+ user_count, spawn_rate = current_tick
349
349
  user_classes = None
350
350
  else:
351
- user_count, spawn_rate, user_classes = current_tick # type: ignore
351
+ user_count, spawn_rate, user_classes = current_tick
352
352
  logger.info("Shape test updating to %d users at %.2f spawn rate" % (user_count, spawn_rate))
353
353
  # TODO: This `self.start()` call is blocking until the ramp-up is completed. This can leads
354
354
  # to unexpected behaviours such as the one in the following example:
@@ -1453,7 +1453,7 @@ class WorkerRunner(DistributedRunner):
1453
1453
 
1454
1454
 
1455
1455
  def _format_user_classes_count_for_log(user_classes_count: dict[str, int]) -> str:
1456
- return "{} ({} total users)".format(
1456
+ return "{} ({} total users)".format( # noqa: UP032
1457
1457
  json.dumps(dict(sorted(user_classes_count.items(), key=itemgetter(0)))),
1458
1458
  sum(user_classes_count.values()),
1459
1459
  )
@@ -1,10 +1,8 @@
1
1
  import os
2
2
  import random
3
3
  import time
4
-
5
4
  from contextlib import contextmanager
6
5
 
7
-
8
6
  MOCK_LOCUSTFILE_CONTENT = '''
9
7
  """This is a mock locust file for unit testing"""
10
8
 
@@ -1,9 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
-
5
- from typing import List, Union, Dict
6
4
  from types import TracebackType
5
+ from typing import Union
7
6
 
8
7
  LogMessage = list[Union[str, dict[str, TracebackType]]]
9
8
 
@@ -2167,9 +2167,7 @@ class TestLargeScale(unittest.TestCase):
2167
2167
  dispatch_iteration_duration <= tol
2168
2168
  for dispatch_iteration_duration in users_dispatcher.dispatch_iteration_durations
2169
2169
  ),
2170
- "One or more dispatch took more than {:.0f}s to compute (max = {}ms)".format(
2171
- tol * 1000, 1000 * max(users_dispatcher.dispatch_iteration_durations)
2172
- ),
2170
+ f"One or more dispatch took more than {tol * 1000:.0f}s to compute (max = {1000 * max(users_dispatcher.dispatch_iteration_durations)}ms)",
2173
2171
  )
2174
2172
 
2175
2173
  self.assertEqual(_user_count(all_dispatched_users[-1]), target_user_count)
@@ -2181,9 +2179,7 @@ class TestLargeScale(unittest.TestCase):
2181
2179
  self.assertLessEqual(
2182
2180
  max(user_count_on_workers) - min(user_count_on_workers),
2183
2181
  1,
2184
- "One or more workers have too much users compared to the other workers when user count is {}".format(
2185
- _user_count(dispatch_users)
2186
- ),
2182
+ f"One or more workers have too much users compared to the other workers when user count is {_user_count(dispatch_users)}",
2187
2183
  )
2188
2184
 
2189
2185
  for i, dispatch_users in enumerate(all_dispatched_users):
@@ -2202,9 +2198,7 @@ class TestLargeScale(unittest.TestCase):
2202
2198
  self.assertLessEqual(
2203
2199
  error_percent,
2204
2200
  tol,
2205
- "Distribution for user class {} is off by more than {}% when user count is {}".format(
2206
- user_class, tol, _user_count(dispatch_users)
2207
- ),
2201
+ f"Distribution for user class {user_class} is off by more than {tol}% when user count is {_user_count(dispatch_users)}",
2208
2202
  )
2209
2203
 
2210
2204
  def test_ramp_down_from_100_000_to_0_users_with_50_user_classes_and_1000_workers_and_5000_spawn_rate(self):
@@ -2236,9 +2230,7 @@ class TestLargeScale(unittest.TestCase):
2236
2230
  dispatch_iteration_duration <= tol
2237
2231
  for dispatch_iteration_duration in users_dispatcher.dispatch_iteration_durations
2238
2232
  ),
2239
- "One or more dispatch took more than {:.0f}ms to compute (max = {}ms)".format(
2240
- tol * 1000, 1000 * max(users_dispatcher.dispatch_iteration_durations)
2241
- ),
2233
+ f"One or more dispatch took more than {tol * 1000:.0f}ms to compute (max = {1000 * max(users_dispatcher.dispatch_iteration_durations)}ms)",
2242
2234
  )
2243
2235
 
2244
2236
  self.assertEqual(_user_count(all_dispatched_users[-1]), 0)
@@ -2250,9 +2242,7 @@ class TestLargeScale(unittest.TestCase):
2250
2242
  self.assertLessEqual(
2251
2243
  max(user_count_on_workers) - min(user_count_on_workers),
2252
2244
  1,
2253
- "One or more workers have too much users compared to the other workers when user count is {}".format(
2254
- _user_count(dispatch_users)
2255
- ),
2245
+ f"One or more workers have too much users compared to the other workers when user count is {_user_count(dispatch_users)}",
2256
2246
  )
2257
2247
 
2258
2248
  for dispatch_users in all_dispatched_users[:-1]:
@@ -2267,9 +2257,7 @@ class TestLargeScale(unittest.TestCase):
2267
2257
  self.assertLessEqual(
2268
2258
  error_percent,
2269
2259
  tol,
2270
- "Distribution for user class {} is off by more than {}% when user count is {}".format(
2271
- user_class, tol, _user_count(dispatch_users)
2272
- ),
2260
+ f"Distribution for user class {user_class} is off by more than {tol}% when user count is {_user_count(dispatch_users)}",
2273
2261
  )
2274
2262
 
2275
2263
 
@@ -3448,9 +3436,7 @@ class TestRampUpUsersFromZeroWithFixed(unittest.TestCase):
3448
3436
  self.target_user_count = target_user_count
3449
3437
 
3450
3438
  def __str__(self):
3451
- return "<RampUpCase fixed_counts={} weights={} target_user_count={}>".format(
3452
- self.fixed_counts, self.weights, self.target_user_count
3453
- )
3439
+ return f"<RampUpCase fixed_counts={self.fixed_counts} weights={self.weights} target_user_count={self.target_user_count}>"
3454
3440
 
3455
3441
  def case_handler(self, cases: list[RampUpCase], expected: list[dict[str, int]], user_classes: list[type[User]]):
3456
3442
  self.assertEqual(len(cases), len(expected))
@@ -3734,8 +3720,6 @@ class TestRampUpDifferentUsers(unittest.TestCase):
3734
3720
 
3735
3721
  worker_node1 = WorkerNode("1")
3736
3722
 
3737
- sleep_time = 0.2
3738
-
3739
3723
  user_dispatcher = UsersDispatcher(worker_nodes=[worker_node1], user_classes=[User1, User2, User3])
3740
3724
 
3741
3725
  user_dispatcher.new_dispatch(target_user_count=3, spawn_rate=3)
@@ -3761,8 +3745,6 @@ class TestRampUpDifferentUsers(unittest.TestCase):
3761
3745
 
3762
3746
  worker_node1 = WorkerNode("1")
3763
3747
 
3764
- sleep_time = 0.2
3765
-
3766
3748
  user_dispatcher = UsersDispatcher(worker_nodes=[worker_node1], user_classes=[User1, User2, User3])
3767
3749
 
3768
3750
  user_dispatcher.new_dispatch(target_user_count=10, spawn_rate=10, user_classes=[User2])
@@ -3780,8 +3762,6 @@ class TestRampUpDifferentUsers(unittest.TestCase):
3780
3762
 
3781
3763
  worker_node1 = WorkerNode("1")
3782
3764
 
3783
- sleep_time = 0.2
3784
-
3785
3765
  user_dispatcher = UsersDispatcher(worker_nodes=[worker_node1], user_classes=[User1, User2, User3])
3786
3766
 
3787
3767
  user_dispatcher.new_dispatch(target_user_count=10, spawn_rate=10, user_classes=[User2])
@@ -3802,8 +3782,6 @@ class TestRampUpDifferentUsers(unittest.TestCase):
3802
3782
 
3803
3783
  worker_node1 = WorkerNode("1")
3804
3784
 
3805
- sleep_time = 0.2
3806
-
3807
3785
  user_dispatcher = UsersDispatcher(worker_nodes=[worker_node1], user_classes=[User1, User2, User3])
3808
3786
 
3809
3787
  user_dispatcher.new_dispatch(target_user_count=10, spawn_rate=10, user_classes=[User2])
@@ -3826,8 +3804,6 @@ class TestRampUpDifferentUsers(unittest.TestCase):
3826
3804
  worker_node2 = WorkerNode("2")
3827
3805
  worker_node3 = WorkerNode("3")
3828
3806
 
3829
- sleep_time = 0.2
3830
-
3831
3807
  user_dispatcher = UsersDispatcher(
3832
3808
  worker_nodes=[worker_node1, worker_node2, worker_node3], user_classes=[User1, User2, User3]
3833
3809
  )
@@ -3886,8 +3862,6 @@ class TestRampUpDifferentUsers(unittest.TestCase):
3886
3862
  worker_node2 = WorkerNode("2")
3887
3863
  worker_node3 = WorkerNode("3")
3888
3864
 
3889
- sleep_time = 0.2
3890
-
3891
3865
  user_dispatcher = UsersDispatcher(
3892
3866
  worker_nodes=[worker_node1, worker_node2, worker_node3], user_classes=[User1, User2, User3]
3893
3867
  )
@@ -4155,7 +4129,7 @@ def _aggregate_dispatched_users(d: dict[str, dict[str, int]]) -> dict[str, int]:
4155
4129
 
4156
4130
 
4157
4131
  def _user_count(d: dict[str, dict[str, int]]) -> int:
4158
- return sum(map(sum, map(dict.values, d.values()))) # type: ignore
4132
+ return sum(map(sum, map(dict.values, d.values())))
4159
4133
 
4160
4134
 
4161
4135
  def _user_count_on_worker(d: dict[str, dict[str, int]], worker_node_id: str) -> int:
@@ -36,7 +36,7 @@ class TestEnvironment(LocustTestCase):
36
36
 
37
37
  def test_user_classes_with_same_name_is_error(self):
38
38
  with self.assertRaises(ValueError) as e:
39
- environment = Environment(user_classes=[MyUserWithSameName1, MyUserWithSameName2])
39
+ Environment(user_classes=[MyUserWithSameName1, MyUserWithSameName2])
40
40
 
41
41
  self.assertEqual(
42
42
  e.exception.args[0],
@@ -186,7 +186,7 @@ class TestEnvironment(LocustTestCase):
186
186
  pass
187
187
 
188
188
  with self.assertRaises(ValueError) as e:
189
- environment = Environment(user_classes=[MyUser1, MyUser2])
189
+ Environment(user_classes=[MyUser1, MyUser2])
190
190
 
191
191
  self.assertEqual(
192
192
  e.exception.args[0],
@@ -269,7 +269,7 @@ class TestEnvironment(LocustTestCase):
269
269
  available_user_classes={"User1": MyUser1, "User2": MyUser2},
270
270
  available_user_tasks={"User1": MyUser1.tasks, "User2": MyUser2.tasks},
271
271
  )
272
- worker = worker_env.create_worker_runner("127.0.0.1", master.server.port)
272
+ worker_env.create_worker_runner("127.0.0.1", master.server.port)
273
273
 
274
274
  master_env.update_user_class({"user_class_name": "User1", "host": "http://localhost", "tasks": ["my_task_2"]})
275
275
 
@@ -96,7 +96,7 @@ class TestFastHttpSession(WebserverTestCase):
96
96
  def test_slow_redirect(self):
97
97
  s = self.get_client()
98
98
  url = "/redirect?url=/redirect&delay=0.5"
99
- r = s.get(url)
99
+ s.get(url)
100
100
  stats = self.runner.stats.get(url, method="GET")
101
101
  self.assertEqual(1, stats.num_requests)
102
102
  self.assertGreater(stats.avg_response_time, 500)
@@ -187,7 +187,7 @@ class TestFastHttpSession(WebserverTestCase):
187
187
  with s.get("/fail", catch_response=True) as r:
188
188
  r.success()
189
189
  raise OtherException("wtf")
190
- except OtherException as e:
190
+ except OtherException:
191
191
  pass
192
192
  else:
193
193
  self.fail("OtherException should have been raised")
@@ -197,14 +197,14 @@ class TestFastHttpSession(WebserverTestCase):
197
197
 
198
198
  def test_catch_response_default_success(self):
199
199
  s = self.get_client()
200
- with s.get("/ultra_fast", catch_response=True) as r:
200
+ with s.get("/ultra_fast", catch_response=True):
201
201
  pass
202
202
  self.assertEqual(1, self.environment.stats.get("/ultra_fast", "GET").num_requests)
203
203
  self.assertEqual(0, self.environment.stats.get("/ultra_fast", "GET").num_failures)
204
204
 
205
205
  def test_catch_response_default_fail(self):
206
206
  s = self.get_client()
207
- with s.get("/fail", catch_response=True) as r:
207
+ with s.get("/fail", catch_response=True):
208
208
  pass
209
209
  self.assertEqual(1, self.environment.stats.total.num_requests)
210
210
  self.assertEqual(1, self.environment.stats.total.num_failures)
@@ -301,7 +301,7 @@ class TestRequestStatsWithWebserver(WebserverTestCase):
301
301
 
302
302
  l = MyUser(self.environment)
303
303
  path = "/no_content_length"
304
- r = l.client.get(path)
304
+ l.client.get(path)
305
305
  self.assertEqual(
306
306
  self.runner.stats.get(path, "GET").avg_content_length,
307
307
  len("This response does not have content-length in the header"),
@@ -313,7 +313,7 @@ class TestRequestStatsWithWebserver(WebserverTestCase):
313
313
 
314
314
  l = MyUser(self.environment)
315
315
  path = "/no_content_length"
316
- r = l.client.get(path, stream=True)
316
+ l.client.get(path, stream=True)
317
317
  self.assertEqual(0, self.runner.stats.get(path, "GET").avg_content_length)
318
318
 
319
319
  def test_request_stats_named_endpoint(self):
@@ -526,7 +526,7 @@ class TestFastHttpUserClass(WebserverTestCase):
526
526
  def test_slow_redirect(self):
527
527
  s = FastHttpSession(self.environment, "http://127.0.0.1:%i" % self.port, user=None)
528
528
  url = "/redirect?url=/redirect&delay=0.5"
529
- r = s.get(url)
529
+ s.get(url)
530
530
  stats = self.runner.stats.get(url, method="GET")
531
531
  self.assertEqual(1, stats.num_requests)
532
532
  self.assertGreater(stats.avg_response_time, 500)
@@ -650,7 +650,7 @@ class TestFastHttpCatchResponse(WebserverTestCase):
650
650
  self.assertEqual(1, self.num_success)
651
651
 
652
652
  def test_catch_response_http_fail(self):
653
- with self.user.client.get("/fail", catch_response=True) as response:
653
+ with self.user.client.get("/fail", catch_response=True):
654
654
  pass
655
655
  self.assertEqual(1, self.num_failures)
656
656
  self.assertEqual(0, self.num_success)
@@ -683,7 +683,7 @@ class TestFastHttpCatchResponse(WebserverTestCase):
683
683
  class MyTaskSet(TaskSet):
684
684
  @task
685
685
  def interrupted_task(self):
686
- with self.client.get("/ultra_fast", catch_response=True) as r:
686
+ with self.client.get("/ultra_fast", catch_response=True):
687
687
  raise InterruptTaskSet()
688
688
 
689
689
  class MyUser(FastHttpUser):
@@ -65,7 +65,7 @@ class TestHttpSession(WebserverTestCase):
65
65
  def test_slow_redirect(self):
66
66
  s = self.get_client()
67
67
  url = "/redirect?url=/redirect&delay=0.5"
68
- r = s.get(url)
68
+ s.get(url)
69
69
  stats = self.runner.stats.get(url, method="GET")
70
70
  self.assertEqual(1, stats.num_requests)
71
71
  self.assertGreater(stats.avg_response_time, 500)
@@ -217,7 +217,7 @@ class TestHttpSession(WebserverTestCase):
217
217
  with s.get("/fail", catch_response=True) as r:
218
218
  r.success()
219
219
  raise OtherException("wtf")
220
- except OtherException as e:
220
+ except OtherException:
221
221
  pass
222
222
  else:
223
223
  self.fail("OtherException should have been raised")
@@ -228,9 +228,9 @@ class TestHttpSession(WebserverTestCase):
228
228
  def test_catch_response_response_error(self):
229
229
  s = self.get_client()
230
230
  try:
231
- with s.get("/fail", catch_response=True) as r:
231
+ with s.get("/fail", catch_response=True):
232
232
  raise ResponseError("response error")
233
- except ResponseError as e:
233
+ except ResponseError:
234
234
  self.fail("ResponseError should not have been raised")
235
235
 
236
236
  self.assertEqual(1, self.environment.stats.total.num_requests)
@@ -238,14 +238,14 @@ class TestHttpSession(WebserverTestCase):
238
238
 
239
239
  def test_catch_response_default_success(self):
240
240
  s = self.get_client()
241
- with s.get("/ultra_fast", catch_response=True) as r:
241
+ with s.get("/ultra_fast", catch_response=True):
242
242
  pass
243
243
  self.assertEqual(1, self.environment.stats.get("/ultra_fast", "GET").num_requests)
244
244
  self.assertEqual(0, self.environment.stats.get("/ultra_fast", "GET").num_failures)
245
245
 
246
246
  def test_catch_response_default_fail(self):
247
247
  s = self.get_client()
248
- with s.get("/fail", catch_response=True) as r:
248
+ with s.get("/fail", catch_response=True):
249
249
  pass
250
250
  self.assertEqual(1, self.environment.stats.total.num_requests)
251
251
  self.assertEqual(1, self.environment.stats.total.num_failures)
@@ -260,7 +260,7 @@ class TestHttpSession(WebserverTestCase):
260
260
 
261
261
  self.environment.events.request.add_listener(on_request)
262
262
 
263
- with s.get("/wrong_url/01", name="replaced_url_name") as r:
263
+ with s.get("/wrong_url/01", name="replaced_url_name"):
264
264
  pass
265
265
 
266
266
  self.assertIn("for url: replaced_url_name", str(kwargs["exception"]))
@@ -748,19 +748,19 @@ class TestCatchResponse(WebserverTestCase):
748
748
  self.assertEqual(1, self.num_failures)
749
749
  self.assertEqual(0, self.num_success)
750
750
 
751
- with self.locust.client.get("/ultra_fast", catch_response=True) as response:
751
+ with self.locust.client.get("/ultra_fast", catch_response=True):
752
752
  pass
753
753
  self.assertEqual(1, self.num_failures)
754
754
  self.assertEqual(1, self.num_success)
755
755
 
756
- with self.locust.client.get("/ultra_fast", catch_response=True) as response:
756
+ with self.locust.client.get("/ultra_fast", catch_response=True):
757
757
  raise ResponseError("Not working")
758
758
 
759
759
  self.assertEqual(2, self.num_failures)
760
760
  self.assertEqual(1, self.num_success)
761
761
 
762
762
  def test_catch_response_http_fail(self):
763
- with self.locust.client.get("/fail", catch_response=True) as response:
763
+ with self.locust.client.get("/fail", catch_response=True):
764
764
  pass
765
765
  self.assertEqual(1, self.num_failures)
766
766
  self.assertEqual(0, self.num_success)
@@ -793,7 +793,7 @@ class TestCatchResponse(WebserverTestCase):
793
793
  class MyTaskSet(TaskSet):
794
794
  @task
795
795
  def interrupted_task(self):
796
- with self.client.get("/ultra_fast", catch_response=True) as r:
796
+ with self.client.get("/ultra_fast", catch_response=True):
797
797
  raise InterruptTaskSet()
798
798
 
799
799
  class MyUser(HttpUser):
@@ -811,7 +811,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
811
811
  try:
812
812
  response = requests.get(f"http://localhost:{port}/")
813
813
  except ConnectionError:
814
- succcess = False
814
+ success = False
815
815
  try:
816
816
  _, stderr = proc.communicate(timeout=5)
817
817
  except subprocess.TimeoutExpired:
@@ -1084,7 +1084,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
1084
1084
  with mock_locustfile() as mocked:
1085
1085
  with temporary_file("", suffix=".html") as html_report_file_path:
1086
1086
  try:
1087
- output = subprocess.check_output(
1087
+ subprocess.check_output(
1088
1088
  [
1089
1089
  "locust",
1090
1090
  "-f",
@@ -69,6 +69,8 @@ class TestParser(unittest.TestCase):
69
69
  web-port = 45787
70
70
  headless = true
71
71
  tags = ["Critical", "Normal"]
72
+ [tool.something_else]
73
+ this = "should be ignored by locust"
72
74
  """
73
75
 
74
76
  file.write(config_data)
@@ -248,7 +250,7 @@ class TestArgumentParser(LocustTestCase):
248
250
  def test_parse_locustfile_empty_directory_error(self):
249
251
  with mock.patch("sys.stderr", new=StringIO()):
250
252
  with self.assertRaises(SystemExit):
251
- locustfiles = parse_locustfile_option(
253
+ parse_locustfile_option(
252
254
  args=[
253
255
  "-f",
254
256
  self.parent_dir.name,
@@ -258,7 +260,7 @@ class TestArgumentParser(LocustTestCase):
258
260
  def test_parse_locustfile_invalid_directory_error(self):
259
261
  with mock.patch("sys.stderr", new=StringIO()):
260
262
  with self.assertRaises(SystemExit):
261
- locustfiles = parse_locustfile_option(
263
+ parse_locustfile_option(
262
264
  args=[
263
265
  "-f",
264
266
  "non_existent_dir",
@@ -401,13 +403,12 @@ class TestFindLocustfiles(LocustTestCase):
401
403
  def test_find_locustfiles_with_multiple_locustfiles(self):
402
404
  with mock_locustfile() as mocked1:
403
405
  with mock_locustfile() as mocked2:
404
- with mock_locustfile() as mocked3:
405
- locustfiles = find_locustfiles([mocked1.file_path, mocked2.file_path], False)
406
+ locustfiles = find_locustfiles([mocked1.file_path, mocked2.file_path], False)
406
407
 
407
- self.assertIn(mocked1.file_path, locustfiles)
408
- self.assertIn(mocked2.file_path, locustfiles)
408
+ self.assertIn(mocked1.file_path, locustfiles)
409
+ self.assertIn(mocked2.file_path, locustfiles)
409
410
 
410
- assert 2 == len(locustfiles)
411
+ assert 2 == len(locustfiles)
411
412
 
412
413
  def test_find_locustfiles_error_for_invalid_file_extension(self):
413
414
  with mock.patch("sys.stderr", new=StringIO()):
@@ -450,7 +451,7 @@ class TestLocustfileIsDirectory(LocustTestCase):
450
451
 
451
452
  def test_locustfile_is_directory_single_locustfile_without_file_extension(self):
452
453
  prefix_name = "foobar"
453
- with NamedTemporaryFile(prefix=prefix_name, suffix=".py") as mocked:
454
+ with NamedTemporaryFile(prefix=prefix_name, suffix=".py"):
454
455
  is_dir = locustfile_is_directory([prefix_name])
455
456
  assert not is_dir
456
457