locust 2.47.1.dev31__tar.gz → 2.47.1.dev35__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.47.1.dev31 → locust-2.47.1.dev35}/PKG-INFO +1 -1
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/_version.py +2 -2
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/stats.py +13 -18
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/user/users.py +10 -1
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/.gitignore +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/LICENSE +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/README.md +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/hatch_build.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/__init__.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/__main__.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/argument_parser.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/clients.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/__init__.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/csv_request_logger.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/dns.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/fasthttp.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/milvus.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/mongodb.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/mqtt.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/oai.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/postgres.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/qdrant.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/contrib/socketio.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/debug.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/dispatch.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/env.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/event.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/exception.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/html.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/input_events.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/log.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/main.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/opentelemetry.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/py.typed +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/rpc/__init__.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/rpc/protocol.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/runners.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/shape.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/user/__init__.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/user/inspectuser.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/user/markov_taskset.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/user/sequential_taskset.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/user/task.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/user/wait_time.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/__init__.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/cache.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/date.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/deprecation.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/directory.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/exception_handler.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/load_locustfile.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/rounding.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/timespan.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/util/url.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/web.py +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/favicon-dark.png +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/favicon-light.png +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/graphs-dark.png +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/graphs-light.png +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/src-Cl6CiemE.js +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/terminal.gif +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/testruns-dark.png +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/assets/testruns-light.png +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/auth.html +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/index.html +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/locust/webui/dist/report.html +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/pyproject.toml +0 -0
- {locust-2.47.1.dev31 → locust-2.47.1.dev35}/pytest_locust/plugin.py +0 -0
|
@@ -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.47.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 47, 1, '
|
|
21
|
+
__version__ = version = '2.47.1.dev35'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 47, 1, 'dev35')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -433,23 +433,7 @@ class StatsEntry:
|
|
|
433
433
|
|
|
434
434
|
@property
|
|
435
435
|
def median_response_time(self) -> int:
|
|
436
|
-
|
|
437
|
-
return 0
|
|
438
|
-
median = (
|
|
439
|
-
calculate_response_time_percentile(self.response_times, self.num_requests - self.num_none_requests, 0.5)
|
|
440
|
-
or 0
|
|
441
|
-
)
|
|
442
|
-
|
|
443
|
-
# Since we only use two digits of precision when calculating the median response time
|
|
444
|
-
# while still using the exact values for min and max response times, the following checks
|
|
445
|
-
# makes sure that we don't report a median > max or median < min when a StatsEntry only
|
|
446
|
-
# have one (or very few) really slow requests
|
|
447
|
-
if median > self.max_response_time:
|
|
448
|
-
median = self.max_response_time
|
|
449
|
-
elif self.min_response_time is not None and median < self.min_response_time:
|
|
450
|
-
median = self.min_response_time
|
|
451
|
-
|
|
452
|
-
return median
|
|
436
|
+
return self.get_response_time_percentile(0.5)
|
|
453
437
|
|
|
454
438
|
@property
|
|
455
439
|
def current_rps(self) -> float:
|
|
@@ -609,10 +593,21 @@ class StatsEntry:
|
|
|
609
593
|
"""
|
|
610
594
|
# response_times only holds non-None samples, so None (async) requests
|
|
611
595
|
# must be excluded from the denominator, just like in avg/median
|
|
612
|
-
|
|
596
|
+
percentile = calculate_response_time_percentile(
|
|
613
597
|
self.response_times, self.num_requests - self.num_none_requests, percent
|
|
614
598
|
)
|
|
615
599
|
|
|
600
|
+
# Since we only use two digits of precision when calculating percentiles while still
|
|
601
|
+
# using the exact values for min and max response times, the following checks make sure
|
|
602
|
+
# that we don't report a percentile > max or percentile < min, e.g. a 95th percentile of
|
|
603
|
+
# 1500 when the slowest request took 1460
|
|
604
|
+
if percentile > self.max_response_time:
|
|
605
|
+
percentile = self.max_response_time
|
|
606
|
+
elif self.min_response_time is not None and percentile < self.min_response_time:
|
|
607
|
+
percentile = self.min_response_time
|
|
608
|
+
|
|
609
|
+
return percentile
|
|
610
|
+
|
|
616
611
|
def get_current_response_time_percentile(self, percent: float) -> int | None:
|
|
617
612
|
"""
|
|
618
613
|
Calculate the *current* response time for a certain percentile. We use a sliding
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from locust.clients import HttpSession, RestResponseContextManager
|
|
4
|
-
from locust.exception import
|
|
4
|
+
from locust.exception import (
|
|
5
|
+
CatchResponseError,
|
|
6
|
+
InterruptTaskSet,
|
|
7
|
+
RescheduleTask,
|
|
8
|
+
RescheduleTaskImmediately,
|
|
9
|
+
StopTest,
|
|
10
|
+
StopUser,
|
|
11
|
+
)
|
|
5
12
|
from locust.user.task import (
|
|
6
13
|
LOCUST_STATE_RUNNING,
|
|
7
14
|
LOCUST_STATE_STOPPING,
|
|
@@ -308,6 +315,8 @@ class RestMixin(Generic[RestResponseT]):
|
|
|
308
315
|
else:
|
|
309
316
|
resp.failure("Assertion failed")
|
|
310
317
|
|
|
318
|
+
except (StopUser, StopTest, RescheduleTask, RescheduleTaskImmediately, InterruptTaskSet):
|
|
319
|
+
raise
|
|
311
320
|
except Exception as e:
|
|
312
321
|
error_lines = []
|
|
313
322
|
for l in traceback.format_exc().split("\n"):
|
|
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
|
|
File without changes
|