locust 2.28.1.dev5__py3-none-any.whl → 2.28.1.dev13__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/event.py +2 -2
- locust/runners.py +22 -17
- locust/test/test_runners.py +56 -55
- {locust-2.28.1.dev5.dist-info → locust-2.28.1.dev13.dist-info}/METADATA +1 -1
- {locust-2.28.1.dev5.dist-info → locust-2.28.1.dev13.dist-info}/RECORD +10 -10
- {locust-2.28.1.dev5.dist-info → locust-2.28.1.dev13.dist-info}/LICENSE +0 -0
- {locust-2.28.1.dev5.dist-info → locust-2.28.1.dev13.dist-info}/WHEEL +0 -0
- {locust-2.28.1.dev5.dist-info → locust-2.28.1.dev13.dist-info}/entry_points.txt +0 -0
- {locust-2.28.1.dev5.dist-info → locust-2.28.1.dev13.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.28.1.
|
16
|
-
__version_tuple__ = version_tuple = (2, 28, 1, '
|
15
|
+
__version__ = version = '2.28.1.dev13'
|
16
|
+
__version_tuple__ = version_tuple = (2, 28, 1, 'dev13')
|
locust/event.py
CHANGED
@@ -162,11 +162,11 @@ class Events:
|
|
162
162
|
|
163
163
|
spawning_complete: EventHook
|
164
164
|
"""
|
165
|
-
Fired when all simulated users has been spawned.
|
165
|
+
Fired when all simulated users has been spawned. The event is fired on master first, and then distributed to workers.
|
166
166
|
|
167
167
|
Event arguments:
|
168
168
|
|
169
|
-
:param user_count: Number of users that were spawned
|
169
|
+
:param user_count: Number of users that were spawned (in total, not per-worker)
|
170
170
|
"""
|
171
171
|
|
172
172
|
quitting: EventHook
|
locust/runners.py
CHANGED
@@ -834,7 +834,10 @@ class MasterRunner(DistributedRunner):
|
|
834
834
|
finally:
|
835
835
|
timeout.cancel()
|
836
836
|
|
837
|
-
|
837
|
+
user_count = sum(self.target_user_classes_count.values())
|
838
|
+
self.environment.events.spawning_complete.fire(user_count=user_count)
|
839
|
+
# notify workers so they can fire their own event
|
840
|
+
self.send_message("spawning_complete", data={"user_count": user_count})
|
838
841
|
self.spawning_completed = True
|
839
842
|
|
840
843
|
logger.info(f"{msg_prefix}: {_format_user_classes_count_for_log(self.reported_user_classes_count)}")
|
@@ -1110,6 +1113,7 @@ class MasterRunner(DistributedRunner):
|
|
1110
1113
|
logger.warning(f"Got spawning message from unknown worker {msg.node_id}. Asking worker to quit.")
|
1111
1114
|
self.server.send_to_client(Message("quit", None, msg.node_id))
|
1112
1115
|
elif msg.type == "spawning_complete":
|
1116
|
+
# a worker finished spawning (this happens multiple times during rampup)
|
1113
1117
|
self.clients[msg.node_id].state = STATE_RUNNING
|
1114
1118
|
self.clients[msg.node_id].user_classes_count = msg.data["user_classes_count"]
|
1115
1119
|
elif msg.type == "quit":
|
@@ -1217,20 +1221,6 @@ class WorkerRunner(DistributedRunner):
|
|
1217
1221
|
self.greenlet.spawn(self.heartbeat_timeout_checker).link_exception(greenlet_exception_handler)
|
1218
1222
|
self.greenlet.spawn(self.stats_reporter).link_exception(greenlet_exception_handler)
|
1219
1223
|
|
1220
|
-
# register listener for when all users have spawned, and report it to the master node
|
1221
|
-
def on_spawning_complete(user_count: int) -> None:
|
1222
|
-
assert user_count == sum(self.user_classes_count.values())
|
1223
|
-
self.client.send(
|
1224
|
-
Message(
|
1225
|
-
"spawning_complete",
|
1226
|
-
{"user_classes_count": self.user_classes_count, "user_count": self.user_count},
|
1227
|
-
self.client_id,
|
1228
|
-
)
|
1229
|
-
)
|
1230
|
-
self.worker_state = STATE_RUNNING
|
1231
|
-
|
1232
|
-
self.environment.events.spawning_complete.add_listener(on_spawning_complete)
|
1233
|
-
|
1234
1224
|
# register listener that adds the current number of spawned users to the report that is sent to the master node
|
1235
1225
|
def on_report_to_master(client_id: str, data: dict[str, Any]):
|
1236
1226
|
data["user_classes_count"] = self.user_classes_count
|
@@ -1251,6 +1241,17 @@ class WorkerRunner(DistributedRunner):
|
|
1251
1241
|
|
1252
1242
|
self.environment.events.user_error.add_listener(on_user_error)
|
1253
1243
|
|
1244
|
+
def spawning_complete(self, user_count):
|
1245
|
+
assert user_count == sum(self.user_classes_count.values())
|
1246
|
+
self.client.send(
|
1247
|
+
Message(
|
1248
|
+
"spawning_complete",
|
1249
|
+
{"user_classes_count": self.user_classes_count, "user_count": self.user_count},
|
1250
|
+
self.client_id,
|
1251
|
+
)
|
1252
|
+
)
|
1253
|
+
self.worker_state = STATE_RUNNING
|
1254
|
+
|
1254
1255
|
def start(
|
1255
1256
|
self, user_count: int, spawn_rate: float, wait: bool = False, user_classes: list[type[User]] | None = None
|
1256
1257
|
) -> None:
|
@@ -1282,8 +1283,9 @@ class WorkerRunner(DistributedRunner):
|
|
1282
1283
|
# can be blocking because of the stop_timeout
|
1283
1284
|
self.spawn_users(user_classes_spawn_count)
|
1284
1285
|
self.stop_users(user_classes_stop_count)
|
1285
|
-
|
1286
|
-
self.
|
1286
|
+
self.spawning_complete(sum(self.user_classes_count.values()))
|
1287
|
+
self.update_state(STATE_RUNNING)
|
1288
|
+
self.worker_state = STATE_RUNNING
|
1287
1289
|
|
1288
1290
|
def heartbeat(self) -> NoReturn:
|
1289
1291
|
while True:
|
@@ -1394,6 +1396,9 @@ class WorkerRunner(DistributedRunner):
|
|
1394
1396
|
self.last_heartbeat_timestamp = time.time()
|
1395
1397
|
elif msg.type == "update_user_class":
|
1396
1398
|
self.environment.update_user_class(msg.data)
|
1399
|
+
elif msg.type == "spawning_complete":
|
1400
|
+
# master says we have finished spawning (happens only once during a normal rampup)
|
1401
|
+
self.environment.events.spawning_complete.fire(user_count=msg.data["user_count"])
|
1397
1402
|
elif msg.type in self.custom_messages:
|
1398
1403
|
logger.debug("Received %s message from master" % msg.type)
|
1399
1404
|
listener, concurrent = self.custom_messages[msg.type]
|
locust/test/test_runners.py
CHANGED
@@ -82,6 +82,10 @@ def mocked_rpc(raise_on_close=True):
|
|
82
82
|
def send_to_client(self, message):
|
83
83
|
self.outbox.append((message.node_id, message))
|
84
84
|
|
85
|
+
@classmethod
|
86
|
+
def get_messages(cls, message_type=None) -> list:
|
87
|
+
return [message[1] for message in cls.outbox if message_type is None or message[1].type == message_type]
|
88
|
+
|
85
89
|
def recv_from_client(self):
|
86
90
|
results = self.queue.get()
|
87
91
|
msg = Message.unserialize(results)
|
@@ -1157,7 +1161,7 @@ class TestMasterWorkerRunners(LocustTestCase):
|
|
1157
1161
|
self.assertEqual(master_env.runner.stats.total.max_response_time, 42)
|
1158
1162
|
self.assertEqual(master_env.runner.stats.get("cool-string", "GET").avg_response_time, 42)
|
1159
1163
|
|
1160
|
-
def
|
1164
|
+
def test_spawning_complete_and_test_stop_event(self):
|
1161
1165
|
class TestUser(User):
|
1162
1166
|
wait_time = constant(0.1)
|
1163
1167
|
|
@@ -1169,11 +1173,16 @@ class TestMasterWorkerRunners(LocustTestCase):
|
|
1169
1173
|
# start a Master runner
|
1170
1174
|
master_env = Environment(user_classes=[TestUser])
|
1171
1175
|
test_stop_count = {"master": 0, "worker": 0}
|
1176
|
+
spawning_complete_count = {"master": 0, "worker": 0}
|
1172
1177
|
|
1173
1178
|
@master_env.events.test_stop.add_listener
|
1174
1179
|
def _(*args, **kwargs):
|
1175
1180
|
test_stop_count["master"] += 1
|
1176
1181
|
|
1182
|
+
@master_env.events.spawning_complete.add_listener
|
1183
|
+
def _(*args, **kwargs):
|
1184
|
+
spawning_complete_count["master"] += 1
|
1185
|
+
|
1177
1186
|
master = master_env.create_master_runner("*", 0)
|
1178
1187
|
sleep(0)
|
1179
1188
|
# start a Worker runner
|
@@ -1183,15 +1192,19 @@ class TestMasterWorkerRunners(LocustTestCase):
|
|
1183
1192
|
def _(*args, **kwargs):
|
1184
1193
|
test_stop_count["worker"] += 1
|
1185
1194
|
|
1195
|
+
@worker_env.events.spawning_complete.add_listener
|
1196
|
+
def _(*args, **kwargs):
|
1197
|
+
spawning_complete_count["worker"] += 1
|
1198
|
+
|
1186
1199
|
worker = worker_env.create_worker_runner("127.0.0.1", master.server.port)
|
1187
1200
|
|
1188
1201
|
# give worker time to connect
|
1189
1202
|
sleep(0.1)
|
1190
1203
|
# issue start command that should trigger TestUsers to be spawned in the Workers
|
1191
|
-
master.start(
|
1192
|
-
sleep(
|
1204
|
+
master.start(3, spawn_rate=1)
|
1205
|
+
sleep(3)
|
1193
1206
|
# check that worker nodes have started locusts
|
1194
|
-
self.assertEqual(
|
1207
|
+
self.assertEqual(3, worker.user_count)
|
1195
1208
|
# give time for users to generate stats, and stats to be sent to master
|
1196
1209
|
sleep(0.1)
|
1197
1210
|
master_env.events.quitting.fire(environment=master_env, reverse=True)
|
@@ -1200,7 +1213,7 @@ class TestMasterWorkerRunners(LocustTestCase):
|
|
1200
1213
|
# make sure users are killed
|
1201
1214
|
self.assertEqual(0, worker.user_count)
|
1202
1215
|
|
1203
|
-
# check the test_stop
|
1216
|
+
# check the spwaning_complete and test_stop events were called one time in master and one time in worker
|
1204
1217
|
self.assertEqual(
|
1205
1218
|
1,
|
1206
1219
|
test_stop_count["master"],
|
@@ -1211,6 +1224,16 @@ class TestMasterWorkerRunners(LocustTestCase):
|
|
1211
1224
|
test_stop_count["worker"],
|
1212
1225
|
"The test_stop event was not called exactly one time in the worker node",
|
1213
1226
|
)
|
1227
|
+
self.assertEqual(
|
1228
|
+
1,
|
1229
|
+
spawning_complete_count["master"],
|
1230
|
+
"The spawning_complete event was not called exactly one time in the master node",
|
1231
|
+
)
|
1232
|
+
self.assertEqual(
|
1233
|
+
1,
|
1234
|
+
spawning_complete_count["worker"],
|
1235
|
+
"The spawning_complete event was not called exactly one time in the worker node",
|
1236
|
+
)
|
1214
1237
|
|
1215
1238
|
def test_distributed_shape(self):
|
1216
1239
|
"""
|
@@ -2565,11 +2588,10 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2565
2588
|
)
|
2566
2589
|
|
2567
2590
|
master.start(100, 20)
|
2568
|
-
self.assertEqual(
|
2569
|
-
|
2570
|
-
for i,
|
2591
|
+
self.assertEqual(7, len(server.get_messages()))
|
2592
|
+
spawn_messages = server.get_messages("spawn")
|
2593
|
+
for i, msg in enumerate(server.get_messages("spawn")):
|
2571
2594
|
self.assertDictEqual({"TestUser": int((i + 1) * 20)}, msg.data["user_classes_count"])
|
2572
|
-
server.outbox.pop()
|
2573
2595
|
|
2574
2596
|
# Normally, this attribute would be updated when the
|
2575
2597
|
# master receives the report from the worker.
|
@@ -2579,11 +2601,9 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2579
2601
|
server.mocked_send(Message("client_ready", __version__, "zeh_fake_client2"))
|
2580
2602
|
self.assertEqual(2, len(master.clients))
|
2581
2603
|
sleep(0.1) # give time for messages to be sent to clients
|
2582
|
-
|
2583
|
-
|
2584
|
-
self.assertEqual({"TestUser": 50},
|
2585
|
-
client_id, msg = server.outbox.pop()
|
2586
|
-
self.assertEqual({"TestUser": 50}, msg.data["user_classes_count"])
|
2604
|
+
spawn_messages = [message for message in server.outbox if message[1].type == "spawn"]
|
2605
|
+
self.assertEqual({"TestUser": 50}, spawn_messages[-1][1].data["user_classes_count"])
|
2606
|
+
self.assertEqual({"TestUser": 50}, spawn_messages[-2][1].data["user_classes_count"])
|
2587
2607
|
|
2588
2608
|
def test_sends_spawn_data_to_ready_running_spawning_workers(self):
|
2589
2609
|
"""Sends spawn job to running, ready, or spawning workers"""
|
@@ -2602,8 +2622,8 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2602
2622
|
master.clients[2].state = STATE_SPAWNING
|
2603
2623
|
master.clients[3].state = STATE_RUNNING
|
2604
2624
|
master.start(user_count=5, spawn_rate=5)
|
2605
|
-
|
2606
|
-
self.assertEqual(3, len(server.
|
2625
|
+
self.assertEqual(3, len(server.get_messages("spawn")))
|
2626
|
+
self.assertEqual(3, len(server.get_messages("spawning_complete")))
|
2607
2627
|
|
2608
2628
|
def test_start_event(self):
|
2609
2629
|
"""
|
@@ -2628,7 +2648,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2628
2648
|
server.mocked_send(Message("client_ready", __version__, "fake_client%i" % i))
|
2629
2649
|
|
2630
2650
|
master.start(7, 7)
|
2631
|
-
self.assertEqual(
|
2651
|
+
self.assertEqual(15, len(server.outbox))
|
2632
2652
|
self.assertEqual(1, run_count[0])
|
2633
2653
|
|
2634
2654
|
# change number of users and check that test_start isn't fired again
|
@@ -2667,7 +2687,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2667
2687
|
server.mocked_send(Message("client_ready", __version__, "fake_client%i" % i))
|
2668
2688
|
|
2669
2689
|
master.start(7, 7)
|
2670
|
-
self.assertEqual(
|
2690
|
+
self.assertEqual(15, len(server.outbox))
|
2671
2691
|
master.stop()
|
2672
2692
|
self.assertTrue(self.runner_stopping)
|
2673
2693
|
self.assertTrue(self.runner_stopped)
|
@@ -2706,7 +2726,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2706
2726
|
server.mocked_send(Message("client_ready", __version__, "fake_client%i" % i))
|
2707
2727
|
|
2708
2728
|
master.start(7, 7)
|
2709
|
-
self.assertEqual(
|
2729
|
+
self.assertEqual(15, len(server.outbox))
|
2710
2730
|
master.quit()
|
2711
2731
|
self.assertTrue(self.runner_stopping)
|
2712
2732
|
self.assertTrue(self.runner_stopped)
|
@@ -2753,13 +2773,10 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2753
2773
|
server.mocked_send(Message("client_ready", __version__, "fake_client%i" % i))
|
2754
2774
|
|
2755
2775
|
master.start(7, 7)
|
2756
|
-
self.assertEqual(
|
2757
|
-
|
2758
|
-
num_users = sum(
|
2759
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2760
|
-
)
|
2776
|
+
self.assertEqual(15, len(server.outbox))
|
2761
2777
|
|
2762
|
-
|
2778
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2779
|
+
self.assertEqual(7, num_users)
|
2763
2780
|
|
2764
2781
|
def test_spawn_fewer_locusts_than_workers(self):
|
2765
2782
|
class TestUser(User):
|
@@ -2774,11 +2791,9 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2774
2791
|
server.mocked_send(Message("client_ready", __version__, "fake_client%i" % i))
|
2775
2792
|
|
2776
2793
|
master.start(2, 2)
|
2777
|
-
self.assertEqual(
|
2794
|
+
self.assertEqual(15, len(server.outbox))
|
2778
2795
|
|
2779
|
-
num_users = sum(
|
2780
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2781
|
-
)
|
2796
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2782
2797
|
|
2783
2798
|
self.assertEqual(2, num_users, "Total number of locusts that would have been spawned is not 2")
|
2784
2799
|
|
@@ -2801,7 +2816,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2801
2816
|
server.mocked_send(Message("client_ready", __version__, "fake_client%i" % i))
|
2802
2817
|
|
2803
2818
|
master.start(USERS_COUNT, USERS_COUNT)
|
2804
|
-
self.assertEqual(USERS_COUNT *
|
2819
|
+
self.assertEqual(USERS_COUNT * 3, len(server.outbox))
|
2805
2820
|
|
2806
2821
|
indexes = []
|
2807
2822
|
for _, msg in server.outbox:
|
@@ -2845,27 +2860,21 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2845
2860
|
|
2846
2861
|
# Wait for shape_worker to update user_count
|
2847
2862
|
sleep(0.5)
|
2848
|
-
num_users = sum(
|
2849
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2850
|
-
)
|
2863
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2851
2864
|
self.assertEqual(
|
2852
2865
|
1, num_users, "Total number of users in first stage of shape test is not 1: %i" % num_users
|
2853
2866
|
)
|
2854
2867
|
|
2855
2868
|
# Wait for shape_worker to update user_count again
|
2856
2869
|
sleep(1.5)
|
2857
|
-
num_users = sum(
|
2858
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2859
|
-
)
|
2870
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2860
2871
|
self.assertEqual(
|
2861
2872
|
1, num_users, "Total number of users in second stage of shape test is not 1: %i" % num_users
|
2862
2873
|
)
|
2863
2874
|
|
2864
2875
|
# Wait for shape_worker to update user_count few times but not reach the end yet
|
2865
2876
|
sleep(2.5)
|
2866
|
-
num_users = sum(
|
2867
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2868
|
-
)
|
2877
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2869
2878
|
self.assertEqual(
|
2870
2879
|
3, num_users, "Total number of users in second stage of shape test is not 3: %i" % num_users
|
2871
2880
|
)
|
@@ -2903,18 +2912,14 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2903
2912
|
sleep(0.5)
|
2904
2913
|
|
2905
2914
|
# Wait for shape_worker to update user_count
|
2906
|
-
num_users = sum(
|
2907
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2908
|
-
)
|
2915
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2909
2916
|
self.assertEqual(
|
2910
2917
|
1, num_users, "Total number of users in first stage of shape test is not 1: %i" % num_users
|
2911
2918
|
)
|
2912
2919
|
|
2913
2920
|
# Wait for shape_worker to update user_count again
|
2914
2921
|
sleep(2)
|
2915
|
-
num_users = sum(
|
2916
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2917
|
-
)
|
2922
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2918
2923
|
self.assertEqual(
|
2919
2924
|
3, num_users, "Total number of users in second stage of shape test is not 3: %i" % num_users
|
2920
2925
|
)
|
@@ -2952,9 +2957,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2952
2957
|
sleep(0.5)
|
2953
2958
|
|
2954
2959
|
# Wait for shape_worker to update user_count
|
2955
|
-
num_users = sum(
|
2956
|
-
sum(msg.data["user_classes_count"].values()) for _, msg in server.outbox if msg.type != "ack"
|
2957
|
-
)
|
2960
|
+
num_users = sum(sum(msg.data["user_classes_count"].values()) for msg in server.get_messages("spawn"))
|
2958
2961
|
self.assertEqual(
|
2959
2962
|
5, num_users, "Total number of users in first stage of shape test is not 5: %i" % num_users
|
2960
2963
|
)
|
@@ -2962,9 +2965,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
2962
2965
|
# Wait for shape_worker to update user_count again
|
2963
2966
|
sleep(2)
|
2964
2967
|
msgs = defaultdict(dict)
|
2965
|
-
for
|
2966
|
-
if msg.type == "ack":
|
2967
|
-
continue
|
2968
|
+
for msg in server.get_messages("spawn"):
|
2968
2969
|
msgs[msg.node_id][msg.data["timestamp"]] = sum(msg.data["user_classes_count"].values())
|
2969
2970
|
# Count users for the last received messages
|
2970
2971
|
num_users = sum(v[max(v.keys())] for v in msgs.values())
|
@@ -3223,11 +3224,11 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
3223
3224
|
master.start(10, 10)
|
3224
3225
|
sleep(0.1)
|
3225
3226
|
server.mocked_send(Message("stats", BAD_MESSAGE, "zeh_fake_client1"))
|
3226
|
-
self.assertEqual(
|
3227
|
+
self.assertEqual(5, len(server.outbox))
|
3227
3228
|
|
3228
3229
|
# Expected message order in outbox: ack, spawn, reconnect, ack
|
3229
3230
|
self.assertEqual(
|
3230
|
-
"reconnect", server.outbox[
|
3231
|
+
"reconnect", server.outbox[3][1].type, "Master didn't send worker reconnect message when expected."
|
3231
3232
|
)
|
3232
3233
|
|
3233
3234
|
def test_worker_sends_unrecognized_message_to_master(self):
|
@@ -3251,7 +3252,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
3251
3252
|
master.start(10, 10)
|
3252
3253
|
sleep(0.1)
|
3253
3254
|
server.mocked_send(Message("stats", UNRECOGNIZED_MESSAGE, "zeh_fake_client1"))
|
3254
|
-
self.assertEqual(
|
3255
|
+
self.assertEqual(3, len(server.outbox))
|
3255
3256
|
|
3256
3257
|
def test_unknown_host_sends_message_to_master(self):
|
3257
3258
|
"""
|
@@ -3274,7 +3275,7 @@ class TestMasterRunner(LocustRunnerTestCase):
|
|
3274
3275
|
master.start(10, 10)
|
3275
3276
|
sleep(0.1)
|
3276
3277
|
server.mocked_send(Message("stats", UNRECOGNIZED_HOST_MESSAGE, "unknown_host"))
|
3277
|
-
self.assertEqual(
|
3278
|
+
self.assertEqual(3, len(server.outbox))
|
3278
3279
|
|
3279
3280
|
|
3280
3281
|
class TestWorkerRunner(LocustTestCase):
|
@@ -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=Q1TWGd4oNv3QSU1p6QqsAkYKTrQr8ThKLvEBRf3l2H0,428
|
4
4
|
locust/argument_parser.py,sha256=VVhInNMKaisjiywQ7H43ooONpHe1Ve1JmftHgnQnRfY,28715
|
5
5
|
locust/clients.py,sha256=YKuAyMAbxs8_-w7XJw0hc67KFBNNLxibsw6FwiS01Q8,14781
|
6
6
|
locust/debug.py,sha256=We6Z9W0btkKSc7PxWmrZx-xMynvOOsKhG6jmDgQin0g,5134
|
7
7
|
locust/dispatch.py,sha256=vYh0QEDFgJ3hY0HgSk-EiNO7IP9ffzXF_Et8wB9JvsI,16995
|
8
8
|
locust/env.py,sha256=SLtUQCYaiv_oq_Nz1xaB0OD8RkTdESt2b71vz_qohpo,12452
|
9
|
-
locust/event.py,sha256=
|
9
|
+
locust/event.py,sha256=m-egSPfOEd1Q6HEXx5lB0LlXOuEdzeS7B1XSFIDgRy0,7836
|
10
10
|
locust/exception.py,sha256=jGgJ32ubuf4pWdlaVOkbh2Y0LlG0_DHi-lv3ib8ppOE,1791
|
11
11
|
locust/html.py,sha256=C-RvShjgRRqzzYGdOGCelobm_SlEGjp8TutvHou1er0,4050
|
12
12
|
locust/input_events.py,sha256=ZIyePyAMuA_YFYWg18g_pE4kwuQV3RbEB250MzXRwjY,3314
|
13
13
|
locust/log.py,sha256=cqLt7nnxnQuM4vWFB5EpJpNUTxGBVEkUJuaJPI1S7_Y,3186
|
14
14
|
locust/main.py,sha256=NGjL5QqakU5aeyUzwu2Fh00xVZfC3eoBE3DtfOmRtcM,27854
|
15
15
|
locust/py.typed,sha256=gkWLl8yD4mIZnNYYAIRM8g9VarLvWmTAFeUfEbxJLBw,65
|
16
|
-
locust/runners.py,sha256=
|
16
|
+
locust/runners.py,sha256=Xc_cyRig7nL5Rtuk4hfH029JoQZP4U_yXGGK7t-h-SE,68406
|
17
17
|
locust/shape.py,sha256=t-lwBS8LOjWcKXNL7j2U3zroIXJ1b0fazUwpRYQOKXw,1973
|
18
18
|
locust/stats.py,sha256=IXhOtYJ_B863kyrHysNQmuFHv2Vd57vE3Rnerwp3bzs,45859
|
19
19
|
locust/web.py,sha256=5Zj8nTa3Kr0aLhC1bXjZ5bissSOddYFQnIw8NOFUdPI,26976
|
@@ -39,7 +39,7 @@ locust/test/test_log.py,sha256=YPY6vgTAy1KaNU2qoVvQrTH5x_mzRrljEHrkSBy3yxs,7553
|
|
39
39
|
locust/test/test_main.py,sha256=7OuH2-7noD_rbeoKJD9hIZsylSugu7ze3XFIrU1u0HI,85016
|
40
40
|
locust/test/test_old_wait_api.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
41
|
locust/test/test_parser.py,sha256=-2VO5Dopg-VoWvIgXrmr7GN40cqrnjUoctBHmVlyewg,17826
|
42
|
-
locust/test/test_runners.py,sha256=
|
42
|
+
locust/test/test_runners.py,sha256=pUqxY9IvlDXbYlkEZGX3PZIo25upBdPsDwt3g1dPqbA,160681
|
43
43
|
locust/test/test_sequential_taskset.py,sha256=QjVMWWfGHn9hU5AvPxRDU7Vo5DcVW1VkMVfDA0k9OPE,3398
|
44
44
|
locust/test/test_stats.py,sha256=F51VkL3k3y4OhYBlRyV6vWzisenSAOmSWKy2IPVrnWM,33929
|
45
45
|
locust/test/test_tags.py,sha256=mzhGLPMizSnSItTHLHizYvloxDfuIDAOgelwInyrf28,13138
|
@@ -70,9 +70,9 @@ locust/webui/dist/report.html,sha256=sOdZZVgZbqgu86BBCSQf3uQUYXgmgSnXF32JpnyAII8
|
|
70
70
|
locust/webui/dist/assets/favicon.ico,sha256=IUl-rYqfpHdV38e-s0bkmFIeLS-n3Ug0DQxk-h202hI,8348
|
71
71
|
locust/webui/dist/assets/index-e569e7ff.js,sha256=Oq8fMAMNzgRmzBEFzrQTarNoTm5AENM0lIegSwnYMUM,1645744
|
72
72
|
locust/webui/dist/assets/logo.png,sha256=EIVPqr6wE_yqguHaqFHIsH0ZACLSrvNWyYO7PbyIj4w,19299
|
73
|
-
locust-2.28.1.
|
74
|
-
locust-2.28.1.
|
75
|
-
locust-2.28.1.
|
76
|
-
locust-2.28.1.
|
77
|
-
locust-2.28.1.
|
78
|
-
locust-2.28.1.
|
73
|
+
locust-2.28.1.dev13.dist-info/LICENSE,sha256=78XGpIn3fHVBfaxlPNUfjVufSN7QsdhpJMRJHv2AFpo,1095
|
74
|
+
locust-2.28.1.dev13.dist-info/METADATA,sha256=S2zcEtf4B_NZB4HbybXzfoV78kEtowsCzcsDnqfhegM,7264
|
75
|
+
locust-2.28.1.dev13.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
76
|
+
locust-2.28.1.dev13.dist-info/entry_points.txt,sha256=RAdt8Ku-56m7bFjmdj-MBhbF6h4NX7tVODR9QNnOg0E,44
|
77
|
+
locust-2.28.1.dev13.dist-info/top_level.txt,sha256=XSsjgPA8Ggf9TqKVbkwSqZFuPlZ085X13M9orDycE20,7
|
78
|
+
locust-2.28.1.dev13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|