locust 2.40.2.dev8__tar.gz → 2.40.2.dev16__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 (65) hide show
  1. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/PKG-INFO +1 -1
  2. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/_version.py +2 -2
  3. locust-2.40.2.dev16/locust/contrib/socketio.py +99 -0
  4. locust-2.40.2.dev8/locust/contrib/socketio.py +0 -95
  5. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/.gitignore +0 -0
  6. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/LICENSE +0 -0
  7. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/README.md +0 -0
  8. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/hatch_build.py +0 -0
  9. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/__init__.py +0 -0
  10. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/__main__.py +0 -0
  11. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/argument_parser.py +0 -0
  12. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/clients.py +0 -0
  13. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/contrib/__init__.py +0 -0
  14. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/contrib/fasthttp.py +0 -0
  15. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/contrib/milvus.py +0 -0
  16. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/contrib/mongodb.py +0 -0
  17. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/contrib/oai.py +0 -0
  18. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/contrib/postgres.py +0 -0
  19. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/debug.py +0 -0
  20. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/dispatch.py +0 -0
  21. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/env.py +0 -0
  22. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/event.py +0 -0
  23. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/exception.py +0 -0
  24. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/html.py +0 -0
  25. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/input_events.py +0 -0
  26. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/log.py +0 -0
  27. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/main.py +0 -0
  28. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/py.typed +0 -0
  29. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/rpc/__init__.py +0 -0
  30. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/rpc/protocol.py +0 -0
  31. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/rpc/zmqrpc.py +0 -0
  32. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/runners.py +0 -0
  33. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/shape.py +0 -0
  34. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/stats.py +0 -0
  35. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/user/__init__.py +0 -0
  36. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/user/inspectuser.py +0 -0
  37. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/user/markov_taskset.py +0 -0
  38. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/user/sequential_taskset.py +0 -0
  39. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/user/task.py +0 -0
  40. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/user/users.py +0 -0
  41. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/user/wait_time.py +0 -0
  42. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/__init__.py +0 -0
  43. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/cache.py +0 -0
  44. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/date.py +0 -0
  45. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/deprecation.py +0 -0
  46. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/directory.py +0 -0
  47. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/exception_handler.py +0 -0
  48. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/load_locustfile.py +0 -0
  49. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/rounding.py +0 -0
  50. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/timespan.py +0 -0
  51. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/util/url.py +0 -0
  52. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/web.py +0 -0
  53. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/favicon-dark.png +0 -0
  54. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/favicon-light.png +0 -0
  55. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/graphs-dark.png +0 -0
  56. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/graphs-light.png +0 -0
  57. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/index-BjqxSg7R.js +0 -0
  58. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/terminal.gif +0 -0
  59. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/testruns-dark.png +0 -0
  60. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/assets/testruns-light.png +0 -0
  61. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/auth.html +0 -0
  62. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/index.html +0 -0
  63. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/locust/webui/dist/report.html +0 -0
  64. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/pyproject.toml +0 -0
  65. {locust-2.40.2.dev8 → locust-2.40.2.dev16}/pytest_locust/plugin.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: locust
3
- Version: 2.40.2.dev8
3
+ Version: 2.40.2.dev16
4
4
  Summary: Developer-friendly load testing framework
5
5
  Project-URL: homepage, https://locust.io/
6
6
  Project-URL: repository, https://github.com/locustio/locust
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '2.40.2.dev8'
32
- __version_tuple__ = version_tuple = (2, 40, 2, 'dev8')
31
+ __version__ = version = '2.40.2.dev16'
32
+ __version_tuple__ = version_tuple = (2, 40, 2, 'dev16')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -0,0 +1,99 @@
1
+ from locust import User
2
+ from locust.event import EventHook
3
+
4
+ from typing import Any
5
+
6
+ import gevent
7
+ import socketio
8
+
9
+
10
+ class SocketIOClient(socketio.Client):
11
+ def __init__(self, request_event: EventHook, *args, **kwargs):
12
+ super().__init__(*args, **kwargs)
13
+ self.request_event = request_event
14
+
15
+ def connect(self, *args, **kwargs):
16
+ """
17
+ Wraps :meth:`socketio.Client.connect`.
18
+ """
19
+ with self.request_event.measure("WS", "connect") as _:
20
+ super().connect(*args, **kwargs)
21
+
22
+ def send(self, data, namespace=None, callback=None, name="Unnamed") -> None:
23
+ """
24
+ Wraps :meth:`socketio.Client.send`.
25
+ """
26
+ exception = None
27
+ try:
28
+ super().send(data, namespace, callback)
29
+ except Exception as e:
30
+ exception = e
31
+ self.request_event.fire(
32
+ request_type="WSS",
33
+ name=name,
34
+ response_time=0,
35
+ response_length=len(data or []),
36
+ exception=exception,
37
+ context={},
38
+ )
39
+
40
+ def emit(self, event, data=None, namespace=None, callback=None) -> None:
41
+ """
42
+ Wraps :meth:`socketio.Client.emit`.
43
+ """
44
+ exception = None
45
+ try:
46
+ super().emit(event, data, namespace, callback)
47
+ except Exception as e:
48
+ exception = e
49
+ self.request_event.fire(
50
+ request_type="WSE",
51
+ name=str(event),
52
+ response_time=0,
53
+ response_length=len(data or []),
54
+ exception=exception,
55
+ context={},
56
+ )
57
+
58
+ def call(self, event, data=None, *args, **kwargs):
59
+ """
60
+ Wraps :meth:`socketio.Client.call`.
61
+ """
62
+ with self.request_event.measure("WSC", event) as _:
63
+ return super().call(event, data, *args, **kwargs)
64
+
65
+ def on_message(self, event: str, data: str) -> None:
66
+ """
67
+ This is the default handler for events received.
68
+ You can register separate handlers using self.sio.on(event, handler)
69
+
70
+ Measuring response_time isn't obvious for for WebSockets/SocketIO so we set them to 0.
71
+ Sometimes response time can be inferred from the event data (if it contains a timestamp)
72
+ or related to a message that you sent. Override this method in your User class to do that.
73
+ """
74
+ self.request_event.fire(
75
+ request_type="WSR",
76
+ name=event,
77
+ response_time=0,
78
+ response_length=len(data or []),
79
+ exception=None,
80
+ context={},
81
+ )
82
+
83
+
84
+ class SocketIOUser(User):
85
+ """
86
+ SocketIOUser creates an instance of :class:`socketio.Client` to log requests.
87
+ See example in :gh:`examples/socketio/socketio_ex.py`.
88
+ """
89
+
90
+ abstract = True
91
+ options: dict[str, Any] = {}
92
+ """socketio.Client options, e.g. `{"reconnection_attempts": 1, "reconnection_delay": 2, "logger": True, "engineio_logger": True}`"""
93
+ sio: SocketIOClient
94
+
95
+ def __init__(self, *args, **kwargs):
96
+ super().__init__(*args, **kwargs)
97
+ self.sio = SocketIOClient(self.environment.events.request, **self.options)
98
+ self.sio_greenlet = gevent.spawn(self.sio.wait)
99
+ self.sio.on("*", self.sio.on_message)
@@ -1,95 +0,0 @@
1
- from locust import User
2
-
3
- import gevent
4
- import socketio
5
-
6
-
7
- class SocketIOUser(User):
8
- """
9
- SocketIOUser wraps an instance of :class:`socketio.Client` to log requests.
10
- See example in :gh:`examples/socketio/socketio_ex.py`.
11
- """
12
-
13
- abstract = True
14
- options: dict = {}
15
- """socketio.Client options, e.g. `{"reconnection_attempts": 1, "reconnection_delay": 2}`"""
16
- client: socketio.Client
17
- """The underlying :class:`socketio.Client` instance. Can be useful to call directly if you want to skip logging a requests."""
18
-
19
- def __init__(self, *args, **kwargs):
20
- super().__init__(*args, **kwargs)
21
- self.client = socketio.Client(**self.options)
22
- self.ws_greenlet = gevent.spawn(self.client.wait)
23
- self.client.on("*", self.on_message)
24
-
25
- #
26
- def on_message(self, event: str, data: str) -> None:
27
- """
28
- This is the default handler for events. You can override it for custom behavior,
29
- or even register separate handlers using self.client.on(event, handler)
30
-
31
- Measuring response_time isn't obvious for for WebSockets. Sometimes a response time
32
- can be inferred from the event data (if it contains a timestamp) or related to
33
- a message that you sent. Override this method in your User class to do that.
34
- """
35
- self.environment.events.request.fire(
36
- request_type="WSR",
37
- name=event,
38
- response_time=0,
39
- response_length=len(data or []),
40
- exception=None,
41
- context={},
42
- )
43
-
44
- def connect(self, *args, **kwargs):
45
- """
46
- Wraps :meth:`socketio.Client.connect`.
47
- """
48
- with self.environment.events.request.measure("WS", "connect") as _:
49
- self.client.connect(*args, **kwargs)
50
-
51
- def send(self, name, data=None, namespace=None) -> None:
52
- """
53
- Wraps :meth:`socketio.Client.send`.
54
- """
55
- exception = None
56
- try:
57
- self.client.send(data, namespace)
58
- except Exception as e:
59
- exception = e
60
- self.environment.events.request.fire(
61
- request_type="WSS",
62
- name=name,
63
- response_time=0,
64
- response_length=len(data or []),
65
- exception=exception,
66
- context={},
67
- )
68
-
69
- def emit(self, name, data=None, namespace=None, callback=None) -> None:
70
- """
71
- Wraps :meth:`socketio.Client.emit`.
72
- """
73
- exception = None
74
- try:
75
- self.client.emit(name, data, namespace, callback)
76
- except Exception as e:
77
- exception = e
78
- self.environment.events.request.fire(
79
- request_type="WSE",
80
- name=name,
81
- response_time=0,
82
- response_length=len(data or []),
83
- exception=exception,
84
- context={},
85
- )
86
-
87
- def call(self, event, data=None, *args, **kwargs):
88
- """
89
- Wraps :meth:`socketio.Client.call`.
90
- """
91
- with self.environment.events.request.measure("WSC", event) as _:
92
- return self.client.call(event, data, *args, **kwargs)
93
-
94
- def on_stop(self):
95
- self.client.disconnect()
File without changes
File without changes
File without changes