locust 2.46.7.dev19__tar.gz → 2.46.7.dev22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/PKG-INFO +2 -2
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/_version.py +2 -2
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/clients.py +7 -15
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/fasthttp.py +20 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/pyproject.toml +2 -2
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/.gitignore +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/LICENSE +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/README.md +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/hatch_build.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/__init__.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/__main__.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/argument_parser.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/__init__.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/csv_request_logger.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/dns.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/milvus.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/mongodb.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/mqtt.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/oai.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/postgres.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/qdrant.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/contrib/socketio.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/debug.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/dispatch.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/env.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/event.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/exception.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/html.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/input_events.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/log.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/main.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/opentelemetry.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/py.typed +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/rpc/__init__.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/rpc/protocol.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/runners.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/shape.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/stats.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/user/__init__.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/user/inspectuser.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/user/markov_taskset.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/user/sequential_taskset.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/user/task.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/user/users.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/user/wait_time.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/__init__.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/cache.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/date.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/deprecation.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/directory.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/exception_handler.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/load_locustfile.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/rounding.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/timespan.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/util/url.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/web.py +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/favicon-dark.png +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/favicon-light.png +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/graphs-dark.png +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/graphs-light.png +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/src-pSlzKFX1.js +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/terminal.gif +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/testruns-dark.png +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/assets/testruns-light.png +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/auth.html +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/index.html +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/locust/webui/dist/report.html +0 -0
- {locust-2.46.7.dev19 → locust-2.46.7.dev22}/pytest_locust/plugin.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: locust
|
|
3
|
-
Version: 2.46.7.
|
|
3
|
+
Version: 2.46.7.dev22
|
|
4
4
|
Summary: Developer-friendly load testing framework
|
|
5
5
|
Project-URL: Homepage, https://locust.cloud/
|
|
6
6
|
Project-URL: Repository, https://github.com/locustio/locust
|
|
@@ -38,7 +38,7 @@ Requires-Dist: python-engineio>=4.12.2
|
|
|
38
38
|
Requires-Dist: python-socketio[client]>=5.13.0
|
|
39
39
|
Requires-Dist: pywin32; sys_platform == 'win32'
|
|
40
40
|
Requires-Dist: pyzmq>=25.0.0
|
|
41
|
-
Requires-Dist: requests>=2.
|
|
41
|
+
Requires-Dist: requests>=2.33.1
|
|
42
42
|
Requires-Dist: typing-extensions>=4.6.0; python_version < '3.12'
|
|
43
43
|
Requires-Dist: werkzeug>=2.0.0
|
|
44
44
|
Provides-Extra: dns
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2.46.7.
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 46, 7, '
|
|
21
|
+
__version__ = version = '2.46.7.dev22'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 46, 7, 'dev22')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -11,7 +11,6 @@ from typing import TYPE_CHECKING, cast
|
|
|
11
11
|
from urllib.parse import unquote, urlparse, urlunparse
|
|
12
12
|
|
|
13
13
|
import requests
|
|
14
|
-
from packaging.version import Version
|
|
15
14
|
from requests import Response
|
|
16
15
|
from requests.adapters import HTTPAdapter
|
|
17
16
|
from requests.auth import HTTPBasicAuth
|
|
@@ -28,8 +27,6 @@ if sys.version_info >= (3, 12):
|
|
|
28
27
|
else:
|
|
29
28
|
from typing_extensions import override
|
|
30
29
|
|
|
31
|
-
requests_version = Version(requests.__version__).release
|
|
32
|
-
|
|
33
30
|
if TYPE_CHECKING:
|
|
34
31
|
from collections.abc import Callable, Generator, Iterable, Mapping, MutableMapping
|
|
35
32
|
from typing import Any, TypedDict, Unpack
|
|
@@ -45,7 +42,7 @@ if TYPE_CHECKING:
|
|
|
45
42
|
cookies: RequestsCookieJar | MutableMapping[str, str] | None
|
|
46
43
|
files: Any # simplified signature
|
|
47
44
|
auth: Any # simplified signature
|
|
48
|
-
timeout: float | tuple[float, float
|
|
45
|
+
timeout: float | tuple[float | None, float | None] | None
|
|
49
46
|
allow_redirects: bool
|
|
50
47
|
proxies: MutableMapping[str, str] | None
|
|
51
48
|
hooks: Mapping[str, Iterable[Callable[[Response], Any]] | Callable[[Response], Any]] | None
|
|
@@ -61,9 +58,8 @@ if TYPE_CHECKING:
|
|
|
61
58
|
|
|
62
59
|
absolute_http_url_regexp = re.compile(r"^https?://", re.IGNORECASE)
|
|
63
60
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
_preloaded_ssl_context.load_verify_locations(extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH))
|
|
61
|
+
_preloaded_ssl_context = create_urllib3_context()
|
|
62
|
+
_preloaded_ssl_context.load_verify_locations(extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH))
|
|
67
63
|
|
|
68
64
|
|
|
69
65
|
class HttpSession(requests.Session):
|
|
@@ -488,14 +484,10 @@ class LocustHttpAdapter(HTTPAdapter):
|
|
|
488
484
|
if self.poolmanager is None:
|
|
489
485
|
super().init_poolmanager(*args, **kwargs)
|
|
490
486
|
|
|
491
|
-
#
|
|
492
|
-
#
|
|
493
|
-
#
|
|
494
|
-
# We re-implement this change to increase the performance
|
|
487
|
+
# requests reverted https://github.com/psf/requests/pull/6667 in 2.32.5, so without
|
|
488
|
+
# re-implementing it here the root CA certificates are loaded on every request.
|
|
489
|
+
# We re-implement it to increase performance (see _preloaded_ssl_context above).
|
|
495
490
|
def cert_verify(self, conn, url, verify, cert):
|
|
496
|
-
if requests_version < (2, 32, 5):
|
|
497
|
-
return super().cert_verify(conn, url, verify, cert)
|
|
498
|
-
|
|
499
491
|
if url.lower().startswith("https") and verify:
|
|
500
492
|
conn.cert_reqs = "CERT_REQUIRED"
|
|
501
493
|
|
|
@@ -529,7 +521,7 @@ class LocustHttpAdapter(HTTPAdapter):
|
|
|
529
521
|
def build_connection_pool_key_attributes(self, request, verify, cert=None):
|
|
530
522
|
host_params, pool_kwargs = super().build_connection_pool_key_attributes(request, verify, cert)
|
|
531
523
|
|
|
532
|
-
if
|
|
524
|
+
if verify is True:
|
|
533
525
|
pool_kwargs["ssl_context"] = _preloaded_ssl_context
|
|
534
526
|
|
|
535
527
|
return host_params, pool_kwargs
|
|
@@ -12,6 +12,7 @@ import socket
|
|
|
12
12
|
import time
|
|
13
13
|
import zlib
|
|
14
14
|
from base64 import b64encode
|
|
15
|
+
from contextlib import contextmanager
|
|
15
16
|
from http.cookiejar import CookieJar
|
|
16
17
|
from ssl import SSLError
|
|
17
18
|
from typing import TYPE_CHECKING
|
|
@@ -111,6 +112,11 @@ class FastHttpSession:
|
|
|
111
112
|
self.request_event = request_event
|
|
112
113
|
self.cookiejar = CookieJar()
|
|
113
114
|
self.user = user
|
|
115
|
+
|
|
116
|
+
# Requests can be grouped under a common name by setting request_name, or by using the rename_request context manager
|
|
117
|
+
# This is an alternative to passing in the "name" parameter to the requests function
|
|
118
|
+
self.request_name: str | None = None
|
|
119
|
+
|
|
114
120
|
if not ssl_context_factory:
|
|
115
121
|
if insecure:
|
|
116
122
|
ssl_context_factory = insecure_ssl_context_factory
|
|
@@ -153,6 +159,16 @@ class FastHttpSession:
|
|
|
153
159
|
else:
|
|
154
160
|
return f"{self.base_url}{path}"
|
|
155
161
|
|
|
162
|
+
@contextmanager
|
|
163
|
+
def rename_request(self, name: str) -> Generator[None]:
|
|
164
|
+
"""Group requests using the "with" keyword"""
|
|
165
|
+
|
|
166
|
+
self.request_name = name
|
|
167
|
+
try:
|
|
168
|
+
yield
|
|
169
|
+
finally:
|
|
170
|
+
self.request_name = None
|
|
171
|
+
|
|
156
172
|
def _send_request_safe_mode(self, method: str, url: str, **kwargs) -> FastResponse:
|
|
157
173
|
"""
|
|
158
174
|
Send an HTTP request, and catch any exception that might occur due to either
|
|
@@ -221,6 +237,10 @@ class FastHttpSession:
|
|
|
221
237
|
:return: A :py:class:`FastResponse <locust.contrib.fasthttp.FastResponse>` object if catch_response is False, and
|
|
222
238
|
:py:class:`ResponseContextManager <locust.contrib.fasthttp.ResponseContextManager>` if True.
|
|
223
239
|
"""
|
|
240
|
+
# if group name has been set and no name parameter has been passed in; set the name parameter to group_name
|
|
241
|
+
if self.request_name and not name:
|
|
242
|
+
name = self.request_name
|
|
243
|
+
|
|
224
244
|
# prepend url with hostname unless it's already an absolute URL
|
|
225
245
|
built_url = self._build_url(url)
|
|
226
246
|
|
|
@@ -35,7 +35,7 @@ classifiers = [
|
|
|
35
35
|
dependencies = [
|
|
36
36
|
"flask>=2.0.0",
|
|
37
37
|
"Werkzeug>=2.0.0",
|
|
38
|
-
"requests>=2.
|
|
38
|
+
"requests>=2.33.1",
|
|
39
39
|
"msgpack>=1.0.0",
|
|
40
40
|
"pyzmq>=25.0.0",
|
|
41
41
|
"geventhttpclient>=2.3.1",
|
|
@@ -83,7 +83,7 @@ lint = [
|
|
|
83
83
|
"pre-commit>=4.5.0,<5.0.0",
|
|
84
84
|
"ruff==0.16.8",
|
|
85
85
|
"mypy>=1.13.0,<1.15.0",
|
|
86
|
-
"types-requests==2.
|
|
86
|
+
"types-requests==2.33.0.20260906",
|
|
87
87
|
"typos>=1.50.1"
|
|
88
88
|
]
|
|
89
89
|
release = ["twine>=5.1.1,<6.0.0"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|