locust 2.20.2.dev104__py3-none-any.whl → 2.21.1.dev7__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/argument_parser.py +4 -4
- locust/input_events.py +9 -5
- locust/main.py +3 -3
- locust/test/test_main.py +38 -8
- locust/test/test_web.py +1 -2
- locust/web.py +1 -1
- {locust-2.20.2.dev104.dist-info → locust-2.21.1.dev7.dist-info}/METADATA +1 -1
- {locust-2.20.2.dev104.dist-info → locust-2.21.1.dev7.dist-info}/RECORD +13 -13
- {locust-2.20.2.dev104.dist-info → locust-2.21.1.dev7.dist-info}/LICENSE +0 -0
- {locust-2.20.2.dev104.dist-info → locust-2.21.1.dev7.dist-info}/WHEEL +0 -0
- {locust-2.20.2.dev104.dist-info → locust-2.21.1.dev7.dist-info}/entry_points.txt +0 -0
- {locust-2.20.2.dev104.dist-info → locust-2.21.1.dev7.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.
|
16
|
-
__version_tuple__ = version_tuple = (2,
|
15
|
+
__version__ = version = '2.21.1.dev7'
|
16
|
+
__version_tuple__ = version_tuple = (2, 21, 1, 'dev7')
|
locust/argument_parser.py
CHANGED
@@ -123,7 +123,7 @@ def find_locustfiles(locustfiles: list[str], is_directory: bool) -> list[str]:
|
|
123
123
|
for root, dirs, files in os.walk(locustdir):
|
124
124
|
for file in files:
|
125
125
|
if not file.startswith("_") and file.lower() != "locust.py" and file.endswith(".py"):
|
126
|
-
file_path =
|
126
|
+
file_path = os.path.join(root, file)
|
127
127
|
file_paths.append(file_path)
|
128
128
|
else:
|
129
129
|
for file_path in locustfiles:
|
@@ -397,11 +397,11 @@ def setup_parser_arguments(parser):
|
|
397
397
|
env_var="LOCUST_USERCLASS_PICKER",
|
398
398
|
)
|
399
399
|
web_ui_group.add_argument(
|
400
|
-
"--
|
400
|
+
"--legacy-ui",
|
401
401
|
default=False,
|
402
402
|
action="store_true",
|
403
|
-
help="Use the
|
404
|
-
env_var="
|
403
|
+
help="Use the legacy frontend for the web UI",
|
404
|
+
env_var="LOCUST_LEGACY_UI",
|
405
405
|
)
|
406
406
|
|
407
407
|
master_group = parser.add_argument_group(
|
locust/input_events.py
CHANGED
@@ -8,6 +8,7 @@ from typing import Callable
|
|
8
8
|
import gevent
|
9
9
|
|
10
10
|
if os.name == "nt":
|
11
|
+
import pywintypes
|
11
12
|
from win32api import STD_INPUT_HANDLE
|
12
13
|
from win32console import (
|
13
14
|
ENABLE_ECHO_INPUT,
|
@@ -48,11 +49,14 @@ class UnixKeyPoller:
|
|
48
49
|
class WindowsKeyPoller:
|
49
50
|
def __init__(self):
|
50
51
|
if sys.stdin.isatty():
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
try:
|
53
|
+
self.read_handle = GetStdHandle(STD_INPUT_HANDLE)
|
54
|
+
self.read_handle.SetConsoleMode(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT)
|
55
|
+
self.cur_event_length = 0
|
56
|
+
self.cur_keys_length = 0
|
57
|
+
self.captured_chars = []
|
58
|
+
except pywintypes.error:
|
59
|
+
raise InitError("Terminal says its a tty but we couldnt enable line input. Keyboard input disabled.")
|
56
60
|
else:
|
57
61
|
raise InitError("Terminal was not a tty. Keyboard input disabled")
|
58
62
|
|
locust/main.py
CHANGED
@@ -491,7 +491,7 @@ See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-numb
|
|
491
491
|
stats_csv_writer=stats_csv_writer,
|
492
492
|
delayed_start=True,
|
493
493
|
userclass_picker_is_active=options.class_picker,
|
494
|
-
modern_ui=options.
|
494
|
+
modern_ui=not options.legacy_ui,
|
495
495
|
)
|
496
496
|
else:
|
497
497
|
web_ui = None
|
@@ -682,10 +682,10 @@ See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-numb
|
|
682
682
|
|
683
683
|
main_greenlet.join()
|
684
684
|
if options.html_file:
|
685
|
-
save_html_report(options.
|
685
|
+
save_html_report(not options.legacy_ui)
|
686
686
|
except KeyboardInterrupt:
|
687
687
|
if options.html_file:
|
688
|
-
save_html_report(options.
|
688
|
+
save_html_report(not options.legacy_ui)
|
689
689
|
except Exception:
|
690
690
|
raise
|
691
691
|
shutdown()
|
locust/test/test_main.py
CHANGED
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
3
3
|
import json
|
4
4
|
import os
|
5
5
|
import platform
|
6
|
-
import pty
|
7
6
|
import signal
|
8
7
|
import socket
|
9
8
|
import subprocess
|
@@ -17,6 +16,7 @@ from unittest import TestCase
|
|
17
16
|
import gevent
|
18
17
|
import psutil
|
19
18
|
import requests
|
19
|
+
from pyquery import PyQuery as pq
|
20
20
|
|
21
21
|
from .mock_locustfile import MOCK_LOCUSTFILE_CONTENT, mock_locustfile
|
22
22
|
from .util import get_free_tcp_port, patch_env, temporary_file
|
@@ -79,6 +79,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
79
79
|
self.assertIn("Logging options:", output)
|
80
80
|
self.assertIn("--skip-log-setup Disable Locust's logging setup.", output)
|
81
81
|
|
82
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
82
83
|
def test_custom_arguments(self):
|
83
84
|
port = get_free_tcp_port()
|
84
85
|
with temporary_file(
|
@@ -120,6 +121,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
120
121
|
self.assertNotIn("command_line_value", stdout)
|
121
122
|
self.assertIn("web_form_value", stdout)
|
122
123
|
|
124
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
123
125
|
def test_custom_arguments_in_file(self):
|
124
126
|
with temporary_file(
|
125
127
|
content=textwrap.dedent(
|
@@ -155,6 +157,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
155
157
|
self.assertIn("Starting Locust", stderr)
|
156
158
|
self.assertIn("config_file_value", stdout)
|
157
159
|
|
160
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
158
161
|
def test_custom_exit_code(self):
|
159
162
|
with temporary_file(
|
160
163
|
content=textwrap.dedent(
|
@@ -184,6 +187,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
184
187
|
self.assertIn("Exit code in quit event 42", stdout)
|
185
188
|
self.assertEqual(42, proc.returncode)
|
186
189
|
|
190
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
187
191
|
def test_webserver(self):
|
188
192
|
with temporary_file(
|
189
193
|
content=textwrap.dedent(
|
@@ -251,7 +255,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
251
255
|
)
|
252
256
|
) as file_path:
|
253
257
|
proc = subprocess.Popen(
|
254
|
-
["locust", "-f", file_path, "--web-port", str(port), "--autostart"
|
258
|
+
["locust", "-f", file_path, "--web-port", str(port), "--autostart"],
|
255
259
|
stdout=PIPE,
|
256
260
|
stderr=PIPE,
|
257
261
|
text=True,
|
@@ -284,6 +288,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
284
288
|
self.assertIn("parameter need to be float and value between. 0 < percentile < 1 Eg 0.95", stderr)
|
285
289
|
self.assertEqual(1, proc.returncode)
|
286
290
|
|
291
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
287
292
|
def test_webserver_multiple_locustfiles(self):
|
288
293
|
with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_A) as mocked1:
|
289
294
|
with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_B) as mocked2:
|
@@ -299,6 +304,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
299
304
|
self.assertIn("Shutting down (exit code 0)", stderr)
|
300
305
|
self.assertEqual(0, proc.returncode)
|
301
306
|
|
307
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
302
308
|
def test_webserver_multiple_locustfiles_in_directory(self):
|
303
309
|
with TemporaryDirectory() as temp_dir:
|
304
310
|
with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_A, dir=temp_dir):
|
@@ -313,6 +319,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
313
319
|
self.assertIn("Shutting down (exit code 0)", stderr)
|
314
320
|
self.assertEqual(0, proc.returncode)
|
315
321
|
|
322
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
316
323
|
def test_webserver_multiple_locustfiles_with_shape(self):
|
317
324
|
content = textwrap.dedent(
|
318
325
|
"""
|
@@ -406,6 +413,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
406
413
|
self.assertIn("ERROR/locust.main: Valid --stop-timeout formats are", stderr)
|
407
414
|
self.assertEqual(1, proc.returncode)
|
408
415
|
|
416
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
409
417
|
def test_headless_spawn_options_wo_run_time(self):
|
410
418
|
with mock_locustfile() as mocked:
|
411
419
|
proc = subprocess.Popen(
|
@@ -431,6 +439,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
431
439
|
self.assertIn("Shutting down (exit code 0)", stderr)
|
432
440
|
self.assertEqual(0, proc.returncode)
|
433
441
|
|
442
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
434
443
|
def test_run_headless_with_multiple_locustfiles(self):
|
435
444
|
with TemporaryDirectory() as temp_dir:
|
436
445
|
with mock_locustfile(dir=temp_dir):
|
@@ -582,6 +591,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
582
591
|
self.assertIn("Shutting down (exit code 0)", stderr)
|
583
592
|
self.assertEqual(0, proc.returncode)
|
584
593
|
|
594
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
585
595
|
def test_autostart_wo_run_time(self):
|
586
596
|
port = get_free_tcp_port()
|
587
597
|
with mock_locustfile() as mocked:
|
@@ -600,7 +610,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
600
610
|
)
|
601
611
|
gevent.sleep(1.9)
|
602
612
|
try:
|
603
|
-
response = requests.get(f"http://
|
613
|
+
response = requests.get(f"http://localhost:{port}/")
|
604
614
|
except Exception:
|
605
615
|
pass
|
606
616
|
self.assertEqual(200, response.status_code)
|
@@ -611,8 +621,10 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
611
621
|
self.assertIn("Shutting down ", stderr)
|
612
622
|
self.assertNotIn("Traceback", stderr)
|
613
623
|
# check response afterwards, because it really isn't as informative as stderr
|
624
|
+
d = pq(response.content.decode("utf-8"))
|
625
|
+
|
614
626
|
self.assertEqual(200, response.status_code)
|
615
|
-
self.assertIn('
|
627
|
+
self.assertIn('"state": "running"', str(d))
|
616
628
|
|
617
629
|
def test_autostart_w_run_time(self):
|
618
630
|
port = get_free_tcp_port()
|
@@ -636,7 +648,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
636
648
|
)
|
637
649
|
gevent.sleep(1.9)
|
638
650
|
try:
|
639
|
-
response = requests.get(f"http://
|
651
|
+
response = requests.get(f"http://localhost:{port}/")
|
640
652
|
except Exception:
|
641
653
|
pass
|
642
654
|
_, stderr = proc.communicate(timeout=2)
|
@@ -645,9 +657,12 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
645
657
|
self.assertIn("Shutting down ", stderr)
|
646
658
|
self.assertNotIn("Traceback", stderr)
|
647
659
|
# check response afterwards, because it really isn't as informative as stderr
|
660
|
+
d = pq(response.content.decode("utf-8"))
|
661
|
+
|
648
662
|
self.assertEqual(200, response.status_code)
|
649
|
-
self.assertIn('
|
663
|
+
self.assertIn('"state": "running"', str(d))
|
650
664
|
|
665
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
651
666
|
def test_run_autostart_with_multiple_locustfiles(self):
|
652
667
|
with TemporaryDirectory() as temp_dir:
|
653
668
|
with mock_locustfile(dir=temp_dir):
|
@@ -711,6 +726,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
711
726
|
"locust",
|
712
727
|
"-f",
|
713
728
|
mocked.file_path,
|
729
|
+
"--legacy-ui",
|
714
730
|
"--web-port",
|
715
731
|
str(port),
|
716
732
|
"--autostart",
|
@@ -722,7 +738,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
722
738
|
text=True,
|
723
739
|
)
|
724
740
|
gevent.sleep(1.9)
|
725
|
-
response = requests.get(f"http://
|
741
|
+
response = requests.get(f"http://localhost:{port}/")
|
726
742
|
try:
|
727
743
|
success = True
|
728
744
|
_, stderr = proc.communicate(timeout=5)
|
@@ -778,6 +794,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
778
794
|
"locust",
|
779
795
|
"-f",
|
780
796
|
f"{mocked1.file_path},{mocked2}",
|
797
|
+
"--legacy-ui",
|
781
798
|
"--web-port",
|
782
799
|
str(port),
|
783
800
|
"--autostart",
|
@@ -789,7 +806,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
789
806
|
text=True,
|
790
807
|
)
|
791
808
|
gevent.sleep(1.9)
|
792
|
-
response = requests.get(f"http://
|
809
|
+
response = requests.get(f"http://localhost:{port}/")
|
793
810
|
try:
|
794
811
|
success = True
|
795
812
|
_, stderr = proc.communicate(timeout=5)
|
@@ -807,6 +824,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
807
824
|
self.assertIn('<body class="spawning">', response.text)
|
808
825
|
self.assertTrue(success, "got timeout and had to kill the process")
|
809
826
|
|
827
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
810
828
|
def test_web_options(self):
|
811
829
|
port = get_free_tcp_port()
|
812
830
|
if platform.system() == "Darwin":
|
@@ -842,7 +860,10 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
842
860
|
self.assertEqual(200, requests.get("http://127.0.0.1:%i/" % port, timeout=1).status_code)
|
843
861
|
proc.terminate()
|
844
862
|
|
863
|
+
@unittest.skipIf(os.name == "nt", reason="termios doesnt exist on windows, adn thus we cannot import pty")
|
845
864
|
def test_input(self):
|
865
|
+
import pty
|
866
|
+
|
846
867
|
LOCUSTFILE_CONTENT = textwrap.dedent(
|
847
868
|
"""
|
848
869
|
from locust import User, TaskSet, task, between
|
@@ -1067,6 +1088,7 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
|
|
1067
1088
|
"locust",
|
1068
1089
|
"-f",
|
1069
1090
|
mocked.file_path,
|
1091
|
+
"--legacy-ui",
|
1070
1092
|
"--host",
|
1071
1093
|
"https://test.com/",
|
1072
1094
|
"--run-time",
|
@@ -1310,6 +1332,7 @@ class MyUser(HttpUser):
|
|
1310
1332
|
self.assertIn("No tasks defined on MyUser", stderr)
|
1311
1333
|
self.assertEqual(1, proc.returncode)
|
1312
1334
|
|
1335
|
+
@unittest.skipIf(os.name == "nt", reason="Signal handling on windows is hard")
|
1313
1336
|
def test_graceful_exit_when_keyboard_interrupt(self):
|
1314
1337
|
with temporary_file(
|
1315
1338
|
content=textwrap.dedent(
|
@@ -1780,6 +1803,7 @@ class AnyUser(HttpUser):
|
|
1780
1803
|
if found[i] != i:
|
1781
1804
|
raise Exception(f"expected index {i} but got", found[i])
|
1782
1805
|
|
1806
|
+
@unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
|
1783
1807
|
def test_processes(self):
|
1784
1808
|
with mock_locustfile() as mocked:
|
1785
1809
|
command = f"locust -f {mocked.file_path} --processes 4 --headless --run-time 1 --exit-code-on-error 0"
|
@@ -1799,6 +1823,7 @@ class AnyUser(HttpUser):
|
|
1799
1823
|
self.assertIn("(index 3) reported as ready", stderr)
|
1800
1824
|
self.assertIn("Shutting down (exit code 0)", stderr)
|
1801
1825
|
|
1826
|
+
@unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
|
1802
1827
|
def test_processes_autodetect(self):
|
1803
1828
|
with mock_locustfile() as mocked:
|
1804
1829
|
command = f"locust -f {mocked.file_path} --processes -1 --headless --run-time 1 --exit-code-on-error 0"
|
@@ -1818,6 +1843,7 @@ class AnyUser(HttpUser):
|
|
1818
1843
|
self.assertIn("(index 0) reported as ready", stderr)
|
1819
1844
|
self.assertIn("Shutting down (exit code 0)", stderr)
|
1820
1845
|
|
1846
|
+
@unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
|
1821
1847
|
def test_processes_separate_worker(self):
|
1822
1848
|
with mock_locustfile() as mocked:
|
1823
1849
|
master_proc = subprocess.Popen(
|
@@ -1862,6 +1888,7 @@ class AnyUser(HttpUser):
|
|
1862
1888
|
self.assertIn("(index 3) reported as ready", master_stderr)
|
1863
1889
|
self.assertIn("Shutting down (exit code 0)", master_stderr)
|
1864
1890
|
|
1891
|
+
@unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
|
1865
1892
|
def test_processes_ctrl_c(self):
|
1866
1893
|
with mock_locustfile() as mocked:
|
1867
1894
|
proc = psutil.Popen( # use psutil.Popen instead of subprocess.Popen to use extra features
|
@@ -1901,6 +1928,7 @@ class AnyUser(HttpUser):
|
|
1901
1928
|
self.assertIn("The last worker quit, stopping test", stderr)
|
1902
1929
|
self.assertIn("Shutting down (exit code 0)", stderr)
|
1903
1930
|
|
1931
|
+
@unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
|
1904
1932
|
def test_workers_shut_down_if_master_is_gone(self):
|
1905
1933
|
content = """
|
1906
1934
|
from locust import HttpUser, task, constant, runners
|
@@ -1956,6 +1984,7 @@ class AnyUser(HttpUser):
|
|
1956
1984
|
self.assertNotIn("Traceback", worker_stderr)
|
1957
1985
|
self.assertIn("Didn't get heartbeat from master in over ", worker_stderr)
|
1958
1986
|
|
1987
|
+
@unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
|
1959
1988
|
def test_processes_error_doesnt_blow_up_completely(self):
|
1960
1989
|
with mock_locustfile() as mocked:
|
1961
1990
|
proc = subprocess.Popen(
|
@@ -1979,6 +2008,7 @@ class AnyUser(HttpUser):
|
|
1979
2008
|
self.assertEqual(stderr.count("Unknown User(s): UserThatDoesntExist"), 5)
|
1980
2009
|
self.assertNotIn("Traceback", stderr)
|
1981
2010
|
|
2011
|
+
@unittest.skipIf(os.name == "nt", reason="--processes doesnt work on windows")
|
1982
2012
|
def test_processes_workers_quit_unexpected(self):
|
1983
2013
|
content = """
|
1984
2014
|
from locust import runners, events, User
|
locust/test/test_web.py
CHANGED
@@ -1130,7 +1130,7 @@ class TestWebUIAuth(LocustTestCase):
|
|
1130
1130
|
super().setUp()
|
1131
1131
|
|
1132
1132
|
parser = get_parser(default_config_files=[])
|
1133
|
-
self.environment.parsed_options = parser.parse_args(["--
|
1133
|
+
self.environment.parsed_options = parser.parse_args(["--web-login"])
|
1134
1134
|
|
1135
1135
|
self.web_ui = self.environment.create_web_ui("127.0.0.1", 0, modern_ui=True, web_login=True)
|
1136
1136
|
|
@@ -1291,7 +1291,6 @@ class TestModernWebUI(LocustTestCase, _HeaderCheckMixin):
|
|
1291
1291
|
super().setUp()
|
1292
1292
|
|
1293
1293
|
parser = get_parser(default_config_files=[])
|
1294
|
-
self.environment.parsed_options = parser.parse_args(["--modern-ui"])
|
1295
1294
|
self.stats = self.environment.stats
|
1296
1295
|
|
1297
1296
|
self.web_ui = self.environment.create_web_ui("127.0.0.1", 0, modern_ui=True)
|
locust/web.py
CHANGED
@@ -528,7 +528,7 @@ class WebUI:
|
|
528
528
|
auth_args=self.auth_args,
|
529
529
|
)
|
530
530
|
else:
|
531
|
-
return "Web Auth is only available on the modern web ui.
|
531
|
+
return "Web Auth is only available on the modern web ui."
|
532
532
|
|
533
533
|
@app.route("/user", methods=["POST"])
|
534
534
|
def update_user():
|
@@ -1,7 +1,7 @@
|
|
1
1
|
locust/__init__.py,sha256=g6oA-Ba_hs3gLWVf5MKJ1mvfltI8MFnDWG8qslqm8yg,1402
|
2
2
|
locust/__main__.py,sha256=vBQ82334kX06ImDbFlPFgiBRiLIinwNk3z8Khs6hd74,31
|
3
|
-
locust/_version.py,sha256=
|
4
|
-
locust/argument_parser.py,sha256=
|
3
|
+
locust/_version.py,sha256=EAwrmz1ppgith6MhJ5ZrWjL7S8SslGohpUzt1gp2Xa8,426
|
4
|
+
locust/argument_parser.py,sha256=zJ8oDNvBW1jK5axKaiRRjKrA4yffyT4vGmlh5qlLQR0,26827
|
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=8FDHDzPYO5mWep3gwneKJugbdPnjMiXZjTlbICTlbA8,18606
|
@@ -9,14 +9,14 @@ locust/env.py,sha256=k6hFjS4OJcDlzkvbrkV_3lGTys0Jy4qEZUi7RlzVTbI,12053
|
|
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
|
-
locust/input_events.py,sha256=
|
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=JeYOMBrEGycVjIjBLG4ohNrP0aUupWNug6alEPysa_I,28677
|
15
15
|
locust/py.typed,sha256=gkWLl8yD4mIZnNYYAIRM8g9VarLvWmTAFeUfEbxJLBw,65
|
16
16
|
locust/runners.py,sha256=w7rlwRqTkx9_NJxg0Y5KYZDY5Fd_IWed1qLE07GDovQ,65645
|
17
17
|
locust/shape.py,sha256=t-lwBS8LOjWcKXNL7j2U3zroIXJ1b0fazUwpRYQOKXw,1973
|
18
18
|
locust/stats.py,sha256=oP_g_7a_s9VvwLHDDzi_pZweAqvo5XPKekHYJVjwatU,46177
|
19
|
-
locust/web.py,sha256=
|
19
|
+
locust/web.py,sha256=dtTqSU_iLb0WCCjQygt4yVqe5O10I2P1kAVYWJx5Brs,28245
|
20
20
|
locust/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
21
|
locust/contrib/fasthttp.py,sha256=lYGCtbtWWrSvlZuL6VqL8dWY2L9iZb6sioQOabXnlzc,26601
|
22
22
|
locust/rpc/__init__.py,sha256=nVGoHWFQxZjnhCDWjbgXIbmFbN9sizAjkhvSs9_642c,58
|
@@ -61,7 +61,7 @@ locust/test/test_interruptable_task.py,sha256=HqStHxtdZPT7WtytBiqTpKeNPg9upXzV7U
|
|
61
61
|
locust/test/test_load_locustfile.py,sha256=OTYiQALcP0nf2QzJWyexEdmwfWeYRQ_QFWSKcF2GTt8,7510
|
62
62
|
locust/test/test_locust_class.py,sha256=isZPJkIK82uWbqoJbSvwvNJ4CA0QAviQ4_HPwlQVyB8,25547
|
63
63
|
locust/test/test_log.py,sha256=YPY6vgTAy1KaNU2qoVvQrTH5x_mzRrljEHrkSBy3yxs,7553
|
64
|
-
locust/test/test_main.py,sha256=
|
64
|
+
locust/test/test_main.py,sha256=JLTRWVRFb_f3f8nOXLgF7e0G42OijV7omt27wNWmWzk,77646
|
65
65
|
locust/test/test_old_wait_api.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
66
66
|
locust/test/test_parser.py,sha256=mIDUlYhftTYPw3MN-2b3p5Rt1Znt4cyh9qlbd1P3hwU,17168
|
67
67
|
locust/test/test_runners.py,sha256=JcervlTHo6iHkxaiZMZbny5tfC1U_F3PnQgrrBXIloY,157173
|
@@ -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=Z-w_uZHE9fKEIJdvWuolarMKLEi0hfDFFMRIaFKbx-s,51761
|
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=g5I2OYrQUieTs0MmzeuC0Og3Cwoexjjiq31ossyn3E0,2625
|
@@ -97,9 +97,9 @@ locust/webui/dist/assets/favicon.ico,sha256=IUl-rYqfpHdV38e-s0bkmFIeLS-n3Ug0DQxk
|
|
97
97
|
locust/webui/dist/assets/index-a83a5dd9.js,sha256=PMUDjzEdp17cqlbWVSlBpJCwKM11lWxpiPSPWc9q2fk,1643372
|
98
98
|
locust/webui/dist/assets/index-a83a5dd9.js.map,sha256=plEb3yaYEEYv-cmZqGhPU11xece9blXxCt7y6sa4aXk,8771392
|
99
99
|
locust/webui/dist/assets/logo.png,sha256=lPCYhpDsPXYY3gUMlq3bzABI5WBtdBOvtay8R9hRFv4,2943
|
100
|
-
locust-2.
|
101
|
-
locust-2.
|
102
|
-
locust-2.
|
103
|
-
locust-2.
|
104
|
-
locust-2.
|
105
|
-
locust-2.
|
100
|
+
locust-2.21.1.dev7.dist-info/LICENSE,sha256=78XGpIn3fHVBfaxlPNUfjVufSN7QsdhpJMRJHv2AFpo,1095
|
101
|
+
locust-2.21.1.dev7.dist-info/METADATA,sha256=lbXWSHMgTkSQe-9ZY4VgaOmckEktQeBfcZ_PG_-fmQw,7390
|
102
|
+
locust-2.21.1.dev7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
103
|
+
locust-2.21.1.dev7.dist-info/entry_points.txt,sha256=RAdt8Ku-56m7bFjmdj-MBhbF6h4NX7tVODR9QNnOg0E,44
|
104
|
+
locust-2.21.1.dev7.dist-info/top_level.txt,sha256=XSsjgPA8Ggf9TqKVbkwSqZFuPlZ085X13M9orDycE20,7
|
105
|
+
locust-2.21.1.dev7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|