Ejemplo n.º 1
0
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"
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
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)])
Ejemplo n.º 4
0
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"
Ejemplo n.º 5
0
    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()