locust 2.24.2.dev11__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/main.py +1 -1
- locust/runners.py +2 -0
- locust/test/test_env.py +40 -0
- locust/test/test_web.py +29 -0
- {locust-2.24.2.dev11.dist-info → locust-2.24.2.dev17.dist-info}/METADATA +1 -1
- {locust-2.24.2.dev11.dist-info → locust-2.24.2.dev17.dist-info}/RECORD +12 -12
- {locust-2.24.2.dev11.dist-info → locust-2.24.2.dev17.dist-info}/LICENSE +0 -0
- {locust-2.24.2.dev11.dist-info → locust-2.24.2.dev17.dist-info}/WHEEL +0 -0
- {locust-2.24.2.dev11.dist-info → locust-2.24.2.dev17.dist-info}/entry_points.txt +0 -0
- {locust-2.24.2.dev11.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/main.py
CHANGED
@@ -394,7 +394,7 @@ See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-numb
|
|
394
394
|
|
395
395
|
environment.update_user_class(user_config)
|
396
396
|
except Exception as e:
|
397
|
-
logger.error(f"The --config-users
|
397
|
+
logger.error(f"The --config-users argument must be in valid JSON string or file: {e}")
|
398
398
|
sys.exit(-1)
|
399
399
|
|
400
400
|
if (
|
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,19 +1,19 @@
|
|
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
|
12
12
|
locust/input_events.py,sha256=QBO6Kb0bmNLZHaIvcBORk57CvCJHAYVB5ILfpV8Lrfc,3292
|
13
13
|
locust/log.py,sha256=2IVp9YL4ZPfWdj3sBFuOHfgneg3g7m7tUGR-sy2s3E8,3155
|
14
|
-
locust/main.py,sha256=
|
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
|