locust 2.24.2.dev13__py3-none-any.whl → 2.24.2.dev17__py3-none-any.whl
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/_version.py +2 -2
- locust/env.py +3 -0
- locust/runners.py +2 -0
- locust/test/test_env.py +40 -0
- locust/test/test_web.py +29 -0
- {locust-2.24.2.dev13.dist-info → locust-2.24.2.dev17.dist-info}/METADATA +1 -1
- {locust-2.24.2.dev13.dist-info → locust-2.24.2.dev17.dist-info}/RECORD +11 -11
- {locust-2.24.2.dev13.dist-info → locust-2.24.2.dev17.dist-info}/LICENSE +0 -0
- {locust-2.24.2.dev13.dist-info → locust-2.24.2.dev17.dist-info}/WHEEL +0 -0
- {locust-2.24.2.dev13.dist-info → locust-2.24.2.dev17.dist-info}/entry_points.txt +0 -0
- {locust-2.24.2.dev13.dist-info → locust-2.24.2.dev17.dist-info}/top_level.txt +0 -0
locust/_version.py
CHANGED
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '2.24.2.
|
16
|
-
__version_tuple__ = version_tuple = (2, 24, 2, '
|
15
|
+
__version__ = version = '2.24.2.dev17'
|
16
|
+
__version_tuple__ = version_tuple = (2, 24, 2, 'dev17')
|
locust/env.py
CHANGED
@@ -198,6 +198,9 @@ class Environment:
|
|
198
198
|
return self.web_ui
|
199
199
|
|
200
200
|
def update_user_class(self, user_settings):
|
201
|
+
if isinstance(self.runner, MasterRunner):
|
202
|
+
self.runner.send_message("update_user_class", user_settings)
|
203
|
+
|
201
204
|
user_class_name = user_settings.get("user_class_name")
|
202
205
|
user_class = self.available_user_classes[user_class_name]
|
203
206
|
user_tasks = self.available_user_tasks[user_class_name]
|
locust/runners.py
CHANGED
@@ -1395,6 +1395,8 @@ class WorkerRunner(DistributedRunner):
|
|
1395
1395
|
self.reset_connection()
|
1396
1396
|
elif msg.type == "heartbeat":
|
1397
1397
|
self.last_heartbeat_timestamp = time.time()
|
1398
|
+
elif msg.type == "update_user_class":
|
1399
|
+
self.environment.update_user_class(msg.data)
|
1398
1400
|
elif msg.type in self.custom_messages:
|
1399
1401
|
logger.debug("Received %s message from master" % msg.type)
|
1400
1402
|
listener, concurrent = self.custom_messages[msg.type]
|
locust/test/test_env.py
CHANGED
@@ -241,3 +241,43 @@ class TestEnvironment(LocustTestCase):
|
|
241
241
|
environment.available_user_classes["User1"].json(),
|
242
242
|
{"host": "http://localhost", "tasks": ["my_task_2"], "fixed_count": 0, "weight": 1},
|
243
243
|
)
|
244
|
+
|
245
|
+
def test_distributed_update_user_class(self):
|
246
|
+
class MyUser1(User):
|
247
|
+
@task
|
248
|
+
def my_task(self):
|
249
|
+
pass
|
250
|
+
|
251
|
+
@task
|
252
|
+
def my_task_2(self):
|
253
|
+
pass
|
254
|
+
|
255
|
+
class MyUser2(User):
|
256
|
+
@task
|
257
|
+
def my_task(self):
|
258
|
+
pass
|
259
|
+
|
260
|
+
master_env = Environment(
|
261
|
+
user_classes=[MyUser1, MyUser2],
|
262
|
+
available_user_classes={"User1": MyUser1, "User2": MyUser2},
|
263
|
+
available_user_tasks={"User1": MyUser1.tasks, "User2": MyUser2.tasks},
|
264
|
+
)
|
265
|
+
master = master_env.create_master_runner("*", 0)
|
266
|
+
|
267
|
+
worker_env = Environment(
|
268
|
+
user_classes=[MyUser1, MyUser2],
|
269
|
+
available_user_classes={"User1": MyUser1, "User2": MyUser2},
|
270
|
+
available_user_tasks={"User1": MyUser1.tasks, "User2": MyUser2.tasks},
|
271
|
+
)
|
272
|
+
worker = worker_env.create_worker_runner("127.0.0.1", master.server.port)
|
273
|
+
|
274
|
+
master_env.update_user_class({"user_class_name": "User1", "host": "http://localhost", "tasks": ["my_task_2"]})
|
275
|
+
|
276
|
+
self.assertEqual(
|
277
|
+
master_env.available_user_classes["User1"].json(),
|
278
|
+
{"host": "http://localhost", "tasks": ["my_task_2"], "fixed_count": 0, "weight": 1},
|
279
|
+
)
|
280
|
+
self.assertEqual(
|
281
|
+
worker_env.available_user_classes["User1"].json(),
|
282
|
+
{"host": "http://localhost", "tasks": ["my_task_2"], "fixed_count": 0, "weight": 1},
|
283
|
+
)
|
locust/test/test_web.py
CHANGED
@@ -1351,3 +1351,32 @@ class TestModernWebUI(LocustTestCase, _HeaderCheckMixin):
|
|
1351
1351
|
self.assertTrue(d("#root"))
|
1352
1352
|
self.assertIn('"locustfile": "locust.py"', str(d))
|
1353
1353
|
self.assertIn('"host": "http://localhost"', str(d))
|
1354
|
+
|
1355
|
+
def test_update_user(self):
|
1356
|
+
class MyUser1(User):
|
1357
|
+
@task
|
1358
|
+
def my_task(self):
|
1359
|
+
pass
|
1360
|
+
|
1361
|
+
@task
|
1362
|
+
def my_task_2(self):
|
1363
|
+
pass
|
1364
|
+
|
1365
|
+
class MyUser2(User):
|
1366
|
+
@task
|
1367
|
+
def my_task(self):
|
1368
|
+
pass
|
1369
|
+
|
1370
|
+
self.environment.user_classes = [MyUser1, MyUser2]
|
1371
|
+
self.environment.available_user_classes = {"User1": MyUser1, "User2": MyUser2}
|
1372
|
+
self.environment.available_user_tasks = {"User1": MyUser1.tasks, "User2": MyUser2.tasks}
|
1373
|
+
|
1374
|
+
requests.post(
|
1375
|
+
"http://127.0.0.1:%i/user" % self.web_port,
|
1376
|
+
json={"user_class_name": "User1", "host": "http://localhost", "tasks": ["my_task_2"]},
|
1377
|
+
)
|
1378
|
+
|
1379
|
+
self.assertEqual(
|
1380
|
+
self.environment.available_user_classes["User1"].json(),
|
1381
|
+
{"host": "http://localhost", "tasks": ["my_task_2"], "fixed_count": 0, "weight": 1},
|
1382
|
+
)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
locust/__init__.py,sha256=g6oA-Ba_hs3gLWVf5MKJ1mvfltI8MFnDWG8qslqm8yg,1402
|
2
2
|
locust/__main__.py,sha256=vBQ82334kX06ImDbFlPFgiBRiLIinwNk3z8Khs6hd74,31
|
3
|
-
locust/_version.py,sha256=
|
3
|
+
locust/_version.py,sha256=QjY-GOLQpFd5XTa969X4xHKVYbNvx_gSpn2DycI6R8M,428
|
4
4
|
locust/argument_parser.py,sha256=iDnCJNs9ySKOrIn6xZjZXN3YIelOPC1FSR2MK5nEHP4,31973
|
5
5
|
locust/clients.py,sha256=o3G9welWb-zhgDUM5TKnMVFMJckr_m0FI8Dxn3OtBUA,14810
|
6
6
|
locust/debug.py,sha256=We6Z9W0btkKSc7PxWmrZx-xMynvOOsKhG6jmDgQin0g,5134
|
7
7
|
locust/dispatch.py,sha256=mn-xVqjLUzRtN91hEqWE2VnVvieQNo97fTVSdMwCDV8,18605
|
8
|
-
locust/env.py,sha256=
|
8
|
+
locust/env.py,sha256=nd6ui1bv6n-kkLkP3r61ZkskDY627dsKOAkYHhtOW7o,12472
|
9
9
|
locust/event.py,sha256=Dip3aRKyd4MhAkfd5nPYmWcGKtQEX8NH1mHT74INZT4,7713
|
10
10
|
locust/exception.py,sha256=jGgJ32ubuf4pWdlaVOkbh2Y0LlG0_DHi-lv3ib8ppOE,1791
|
11
11
|
locust/html.py,sha256=S2vucumZbGADt0PKv__Aow_kt-MpbCCxBqMO9QiRcUg,5718
|
@@ -13,7 +13,7 @@ locust/input_events.py,sha256=QBO6Kb0bmNLZHaIvcBORk57CvCJHAYVB5ILfpV8Lrfc,3292
|
|
13
13
|
locust/log.py,sha256=2IVp9YL4ZPfWdj3sBFuOHfgneg3g7m7tUGR-sy2s3E8,3155
|
14
14
|
locust/main.py,sha256=_WMSjeLyEnZVYKsc-ziMYUcv_Axig93kiNiZ2NIrL9Y,28866
|
15
15
|
locust/py.typed,sha256=gkWLl8yD4mIZnNYYAIRM8g9VarLvWmTAFeUfEbxJLBw,65
|
16
|
-
locust/runners.py,sha256=
|
16
|
+
locust/runners.py,sha256=8z-axnOs3yLWjOoc91rQzQH6hp6qu3ZpkBQ_IGZeFE0,67978
|
17
17
|
locust/shape.py,sha256=t-lwBS8LOjWcKXNL7j2U3zroIXJ1b0fazUwpRYQOKXw,1973
|
18
18
|
locust/stats.py,sha256=BXvAybKiqI6QF5THdnk-fWkL-FiZKwrAm2W8KzkTchg,46118
|
19
19
|
locust/web.py,sha256=DVcx53VXApAc6kFfG7so2_kB_qqcw7ojKpBd-dJoijU,28267
|
@@ -54,7 +54,7 @@ locust/test/mock_locustfile.py,sha256=N9sGjW-BmJ-J_x-5bEOR82VQ0DhR1hki313BHPOWq4
|
|
54
54
|
locust/test/mock_logging.py,sha256=dvfXaY2eb0ZHx7Bjn7R69BarnRq9uu0z4HD8hCiRNmU,819
|
55
55
|
locust/test/test_debugging.py,sha256=w5Lx6h101novinKjTJJDg5AqqY28U2Wg1W4hgCk6Sx8,1069
|
56
56
|
locust/test/test_dispatch.py,sha256=SdnPFdyW0eRj7Bp4mAI8JRkmcwah6Z_b6oaZ_D98QPE,166009
|
57
|
-
locust/test/test_env.py,sha256=
|
57
|
+
locust/test/test_env.py,sha256=ggyx7ZbS7sZPae2wb6JzrvA0p0H7c9HhcBVJn7u1HTw,8956
|
58
58
|
locust/test/test_fasthttp.py,sha256=-UyGdz2Po1wOjcSHs2xPqBtMoJWMaaVrqbx6SaQNAac,30864
|
59
59
|
locust/test/test_http.py,sha256=R23BWBNLjU3OOWCAgIAW8F9H5kqtBx43gPaXC-hhM2g,12570
|
60
60
|
locust/test/test_interruptable_task.py,sha256=HqStHxtdZPT7WtytBiqTpKeNPg9upXzV7UI4QgFdUoU,1408
|
@@ -72,7 +72,7 @@ locust/test/test_taskratio.py,sha256=SQ-sBqeFm2GhkfCD_57-fPzQrk1ilSw3DRb0_nwyxAI
|
|
72
72
|
locust/test/test_users.py,sha256=lp6yAKGK9_MIs9F7s1Vc3561P4oRavhpeVo2y9w3SUU,2135
|
73
73
|
locust/test/test_util.py,sha256=DmFTgNSWWx8zrsx9_ZGO6MsySmBV1H_GzNIVzzyapCM,1229
|
74
74
|
locust/test/test_wait_time.py,sha256=3evSEp6amMWFrzmSYs71MCeIsu7Rtarldb_HnwgSrU0,2353
|
75
|
-
locust/test/test_web.py,sha256=
|
75
|
+
locust/test/test_web.py,sha256=kvdOewTXbNAwwNjO7ise60zE_Vj_eu6dRPVnvj5y1sQ,52702
|
76
76
|
locust/test/test_zmqrpc.py,sha256=kONaZ11hwnneLwaVn7lIDVV7KHpEP2nkxuKhfb9ba3o,2173
|
77
77
|
locust/test/testcases.py,sha256=N4l0gFd8HKg-0bfIjq9nW5o0aNpv0YRTfOtwrtsPpUw,6979
|
78
78
|
locust/test/util.py,sha256=98HXLClkycNTxLiuy1d3W_tM6dBU9bA-p5ZXMfncaWE,2754
|
@@ -95,9 +95,9 @@ locust/webui/dist/report.html,sha256=sOdZZVgZbqgu86BBCSQf3uQUYXgmgSnXF32JpnyAII8
|
|
95
95
|
locust/webui/dist/assets/favicon.ico,sha256=IUl-rYqfpHdV38e-s0bkmFIeLS-n3Ug0DQxk-h202hI,8348
|
96
96
|
locust/webui/dist/assets/index-941b6e82.js,sha256=G3n5R81Svt0HzbWaV3AV20jLWGLr4X50UZ-Adu2KcxU,1645614
|
97
97
|
locust/webui/dist/assets/logo.png,sha256=EIVPqr6wE_yqguHaqFHIsH0ZACLSrvNWyYO7PbyIj4w,19299
|
98
|
-
locust-2.24.2.
|
99
|
-
locust-2.24.2.
|
100
|
-
locust-2.24.2.
|
101
|
-
locust-2.24.2.
|
102
|
-
locust-2.24.2.
|
103
|
-
locust-2.24.2.
|
98
|
+
locust-2.24.2.dev17.dist-info/LICENSE,sha256=78XGpIn3fHVBfaxlPNUfjVufSN7QsdhpJMRJHv2AFpo,1095
|
99
|
+
locust-2.24.2.dev17.dist-info/METADATA,sha256=FvfeNI3eKUOZNLmFy8TlXKVdetXSvWQaqpmxR7jtGrI,7212
|
100
|
+
locust-2.24.2.dev17.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
101
|
+
locust-2.24.2.dev17.dist-info/entry_points.txt,sha256=RAdt8Ku-56m7bFjmdj-MBhbF6h4NX7tVODR9QNnOg0E,44
|
102
|
+
locust-2.24.2.dev17.dist-info/top_level.txt,sha256=XSsjgPA8Ggf9TqKVbkwSqZFuPlZ085X13M9orDycE20,7
|
103
|
+
locust-2.24.2.dev17.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|