locust 2.46.5.dev8__tar.gz → 2.46.6.dev2__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.5.dev8 → locust-2.46.6.dev2}/PKG-INFO +1 -1
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/__init__.py +2 -1
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/_version.py +2 -2
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/user/wait_time.py +27 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/.gitignore +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/LICENSE +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/README.md +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/hatch_build.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/__main__.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/argument_parser.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/clients.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/__init__.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/csv_request_logger.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/dns.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/fasthttp.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/milvus.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/mongodb.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/mqtt.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/oai.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/postgres.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/qdrant.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/contrib/socketio.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/debug.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/dispatch.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/env.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/event.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/exception.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/html.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/input_events.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/log.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/main.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/opentelemetry.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/py.typed +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/rpc/__init__.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/rpc/protocol.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/runners.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/shape.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/stats.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/user/__init__.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/user/inspectuser.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/user/markov_taskset.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/user/sequential_taskset.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/user/task.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/user/users.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/__init__.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/cache.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/date.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/deprecation.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/directory.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/exception_handler.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/load_locustfile.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/rounding.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/timespan.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/util/url.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/web.py +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/favicon-dark.png +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/favicon-light.png +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/graphs-dark.png +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/graphs-light.png +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/src-pSlzKFX1.js +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/terminal.gif +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/testruns-dark.png +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/assets/testruns-light.png +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/auth.html +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/index.html +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/locust/webui/dist/report.html +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/pyproject.toml +0 -0
- {locust-2.46.5.dev8 → locust-2.46.6.dev2}/pytest_locust/plugin.py +0 -0
|
@@ -31,7 +31,7 @@ from .user.markov_taskset import MarkovTaskSet, transition, transitions
|
|
|
31
31
|
from .user.sequential_taskset import SequentialTaskSet
|
|
32
32
|
from .user.task import TaskSet, tag, task
|
|
33
33
|
from .user.users import HttpUser, User
|
|
34
|
-
from .user.wait_time import between, constant, constant_pacing, constant_throughput
|
|
34
|
+
from .user.wait_time import between, constant, constant_pacing, constant_throughput, poisson
|
|
35
35
|
|
|
36
36
|
events = Events()
|
|
37
37
|
|
|
@@ -51,6 +51,7 @@ __all__ = (
|
|
|
51
51
|
"constant",
|
|
52
52
|
"constant_pacing",
|
|
53
53
|
"constant_throughput",
|
|
54
|
+
"poisson",
|
|
54
55
|
"events",
|
|
55
56
|
"LoadTestShape",
|
|
56
57
|
"run_single_user",
|
|
@@ -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.
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 46,
|
|
21
|
+
__version__ = version = '2.46.6.dev2'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 46, 6, 'dev2')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -84,3 +84,30 @@ def constant_throughput(task_runs_per_second: float) -> Callable[["User"], float
|
|
|
84
84
|
the next task.
|
|
85
85
|
"""
|
|
86
86
|
return constant_pacing(1 / task_runs_per_second)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def poisson(rate: float) -> Callable[["User"], float]:
|
|
90
|
+
"""
|
|
91
|
+
Returns a function that will return a random wait time sampled from an exponential
|
|
92
|
+
distribution with mean ``1/rate`` seconds. Tasks will therefore arrive according to a
|
|
93
|
+
Poisson process with mean rate ``rate`` tasks per second, which is a good approximation
|
|
94
|
+
of how real users arrive.
|
|
95
|
+
|
|
96
|
+
The average number of task runs per second will be ``rate``, but unlike
|
|
97
|
+
:py:func:`constant_throughput <locust.wait_time.constant_throughput>` the individual
|
|
98
|
+
intervals vary randomly, so bursts and quiet periods occur naturally.
|
|
99
|
+
|
|
100
|
+
Example::
|
|
101
|
+
|
|
102
|
+
class MyUser(User):
|
|
103
|
+
wait_time = poisson(2) # on average, each user runs 2 tasks per second
|
|
104
|
+
@task
|
|
105
|
+
def my_task(self):
|
|
106
|
+
...
|
|
107
|
+
|
|
108
|
+
If you have multiple requests in a task your RPS will of course be higher than the
|
|
109
|
+
specified throughput.
|
|
110
|
+
"""
|
|
111
|
+
if rate <= 0:
|
|
112
|
+
raise ValueError(f"poisson() requires a positive rate, got: {rate}")
|
|
113
|
+
return lambda instance: random.expovariate(rate)
|
|
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
|