def test_generates_passed_global_code_blocks(): def mock(name, blocks=None): m = MagicMock(spec=Scenario, children=[], global_code_blocks=blocks or {}) # https://docs.python.org/3/library/unittest.mock.html#mock-names-and-the-name-attribute m.name = name return m sg1 = Scenario( "sg1", children=[ mock("a", blocks={"b1": ["ab"]}), mock("b", blocks={"b2": ["cd"]}) ], origin=None, ) sg2 = Scenario("sg2", children=[mock("c")], origin=None) sg3 = Scenario( "sg3", children=[mock("d", blocks={ "b3": ["yz"], "b2": ["yyy", "zzz"] })], origin=None, ) code = locustfile([sg1, sg2, sg3]) assert code.endswith("\n# b1\nab\n# b2\nyyy\nzzz\n# b3\nyz" ), "the latter b2 block should override the former"
def test_it_renders_a_locustfile_template(self): a_name = "some_task" a_request = MagicMock(spec=Request) a_request.method = HttpMethod.GET a_request.url = MagicMock(spec=SplitResult) a_request.url.scheme = "some_scheme" a_request.url.hostname = "some_hostname" a_request.url.path = "some_path" a_request.url.geturl() a_request.url.geturl.return_value = "some_url" a_request.headers = {"a": "b"} a_request.name = None task = Task(a_name, a_request) scenario = Scenario(name="SomeScenario", children=[task], origin=None) scenario_group = Scenario(name="ScenarioGroup", children=[scenario], weight=2, origin=None) script = locustfile([scenario_group]) expected = string.Template(f""" # File automatically generated by Transformer v{__version__}: # https://github.com/zalando-incubator/Transformer import re from distutils.version import LooseVersion from locust import __version__ LOCUST_MAJOR_VERSION = LooseVersion(__version__).version[0] if LOCUST_MAJOR_VERSION >= 1: from locust import HttpUser from locust import SequentialTaskSet from locust import TaskSet from locust import task HttpLocust = HttpUser TaskSequence = SequentialTaskSet def seq_task(_): return task else: from locust import HttpLocust from locust import TaskSequence from locust import TaskSet from locust import seq_task from locust import task class ScenarioGroup(TaskSet): @task(1) class SomeScenario(TaskSequence): @seq_task(1) def some_task(self): response = self.client.get(url='some_url', name='some_url', timeout=$TIMEOUT, allow_redirects=False, headers={{'a': 'b'}}) class LocustForScenarioGroup(HttpLocust): if LOCUST_MAJOR_VERSION >= 1: tasks = [ScenarioGroup] else: task_set = ScenarioGroup weight = 2 min_wait = 0 max_wait = 10 """).safe_substitute({"TIMEOUT": TIMEOUT}) assert expected.strip() == script.strip()
def transform( scenarios_path: Union[str, Path], plugins: Sequence[Plugin] = (), with_default_plugins: bool = True, ) -> str: """ This function is deprecated and will be removed in a future version. Do not rely on it. Reason: It only accepts one scenario path at a time, and requires plugins to be already resolved (and therefore that users use transformer.plugins.resolve, which is kind of low-level). Both dumps & dump lift these constraints and have a more familiar naming (see json.dump/s, etc.). Deprecated since: v1.0.2. """ warnings.warn(DeprecationWarning("transform: use dump or dumps instead")) if with_default_plugins: plugins = (*DEFAULT_PLUGINS, *plugins) return locustfile([Scenario.from_path(Path(scenarios_path), plugins)])
def test_generates_passed_global_code_blocks(): sg1 = Scenario( "sg1", children=[ MagicMock(spec_set=Scenario, children=[], global_code_blocks={"b1": ["ab"]}), MagicMock(spec_set=Scenario, children=[], global_code_blocks={"b2": ["cd"]}), ], origin=None, ) sg2 = Scenario( "sg2", children=[ MagicMock(spec_set=Scenario, children=[], global_code_blocks={}) ], origin=None, ) sg3 = Scenario( "sg3", children=[ MagicMock( spec_set=Scenario, children=[], global_code_blocks={ "b3": ["yz"], "b2": ["yyy", "zzz"] }, ) ], origin=None, ) code = locustfile([sg1, sg2, sg3]) assert code.endswith("\n# b1\nab\n# b2\nyyy\nzzz\n# b3\nyz" ), "the latter b2 block should override the former"
def test_it_renders_a_locustfile_template(self): a_name = "some_task" a_request = MagicMock() a_request.method = HttpMethod.GET a_request.url.scheme = "some_scheme" a_request.url.hostname = "some_hostname" a_request.url.path = "some_path" a_request.url.geturl() a_request.url.geturl.return_value = "some_url" task = Task(a_name, a_request) scenario = Scenario(name="SomeScenario", children=[task], origin=None) scenario_group = Scenario(name="ScenarioGroup", children=[scenario], weight=2, origin=None) script = locustfile([scenario_group]) expected = string.Template(""" # File automatically generated by Transformer: # https://github.bus.zalan.do/TIP/transformer import re from locust import HttpLocust from locust import TaskSequence from locust import TaskSet from locust import seq_task from locust import task class ScenarioGroup(TaskSet): @task(1) class SomeScenario(TaskSequence): @seq_task(1) def some_task(self): response = self.client.get(url='some_url', name='some_url', headers={}, timeout=$TIMEOUT, allow_redirects=False) class LocustForScenarioGroup(HttpLocust): task_set = ScenarioGroup weight = 2 min_wait = 0 max_wait = 10 """).safe_substitute({"TIMEOUT": TIMEOUT}) assert expected.strip() == script.strip()