Skip to content

Commit 9821fb8

Browse files
authored
Merge pull request #3012 from timhovius/patch-1
Fix issue where empty WebUI property is not parsed correctly
2 parents 2f192bd + adc3240 commit 9821fb8

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

locust/test/test_web.py

+56-4
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ def tick(self):
759759
response = requests.get("http://127.0.0.1:%i/stop" % self.web_port)
760760
self.assertEqual(response.json()["message"], "Test stopped")
761761

762-
def test_swarm_custom_argument(self):
762+
def test_swarm_custom_argument_without_default_value(self):
763763
my_dict = {}
764764

765765
class MyUser(User):
@@ -771,10 +771,10 @@ def my_task(self):
771771
my_dict["val"] = self.environment.parsed_options.my_argument
772772

773773
@locust.events.init_command_line_parser.add_listener
774-
def _(parser, **kw):
774+
def _(parser):
775775
parser.add_argument("--my-argument", type=int, help="Give me a number")
776776

777-
parsed_options = parse_options(args=["--my-argument", "42"])
777+
parsed_options = parse_options()
778778
self.environment.user_classes = [MyUser]
779779
self.environment.parsed_options = parsed_options
780780
self.environment.web_ui.parsed_options = parsed_options
@@ -783,7 +783,59 @@ def _(parser, **kw):
783783
data={"user_count": 1, "spawn_rate": 1, "host": "", "my_argument": "42"},
784784
)
785785
self.assertEqual(200, response.status_code)
786-
self.assertEqual(my_dict["val"], 42)
786+
self.assertEqual("42", my_dict["val"])
787+
788+
def test_swarm_custom_argument_with_default_value(self):
789+
my_dict = {}
790+
791+
class MyUser(User):
792+
host = "http://example.com"
793+
wait_time = constant(1)
794+
795+
@task(1)
796+
def my_task(self):
797+
my_dict["val"] = self.environment.parsed_options.my_argument
798+
799+
@locust.events.init_command_line_parser.add_listener
800+
def _(parser):
801+
parser.add_argument("--my-argument", type=int, help="Give me a number", default=24)
802+
803+
parsed_options = parse_options()
804+
self.environment.user_classes = [MyUser]
805+
self.environment.parsed_options = parsed_options
806+
self.environment.web_ui.parsed_options = parsed_options
807+
response = requests.post(
808+
"http://127.0.0.1:%i/swarm" % self.web_port,
809+
data={"user_count": 1, "spawn_rate": 1, "host": "", "my_argument": "42"},
810+
)
811+
self.assertEqual(200, response.status_code)
812+
self.assertEqual(42, my_dict["val"])
813+
814+
def test_swarm_override_command_line_argument(self):
815+
my_dict = {}
816+
817+
class MyUser(User):
818+
host = "http://example.com"
819+
wait_time = constant(1)
820+
821+
@task(1)
822+
def my_task(self):
823+
my_dict["val"] = self.environment.parsed_options.my_argument
824+
825+
@locust.events.init_command_line_parser.add_listener
826+
def _(parser):
827+
parser.add_argument("--my-argument", type=int, help="Give me a number")
828+
829+
parsed_options = parse_options(args=["--my-argument", "24"])
830+
self.environment.user_classes = [MyUser]
831+
self.environment.parsed_options = parsed_options
832+
self.environment.web_ui.parsed_options = parsed_options
833+
response = requests.post(
834+
"http://127.0.0.1:%i/swarm" % self.web_port,
835+
data={"user_count": 1, "spawn_rate": 1, "host": "", "my_argument": "42"},
836+
)
837+
self.assertEqual(200, response.status_code)
838+
self.assertEqual(42, my_dict["val"])
787839

788840
def test_swarm_host_value_not_specified(self):
789841
class MyUser(User):

locust/web.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,9 @@ def swarm() -> Response:
284284
if isinstance(parsed_options_value, bool):
285285
parsed_options_dict[key] = value == "true"
286286
elif parsed_options_value is None:
287-
parsed_options_dict[key] = parsed_options_value
287+
parsed_options_dict[key] = value
288288
else:
289-
parsed_options_dict[key] = type(parsed_options_dict[key])(value)
289+
parsed_options_dict[key] = type(parsed_options_value)(value)
290290

291291
if environment.shape_class and environment.runner is not None:
292292
environment.runner.start_shape()

0 commit comments

Comments
 (0)