繁体   English   中英

使用 Locust 创建可由自定义命令行参数触发的可重用测试场景(烟雾、负载等)

[英]Create reusable testing scenarios (smoke, load, etc.) that can be triggered by a custom command line parameter using Locust

我现在有两个目标:

  1. 创建一堆常见的测试场景(烟雾、负载等),我可以通过自定义命令行参数重复使用这些场景。
  2. 在我的项目中移动init_command_line_parser事件,这样我就不必在每个 locustfile.py 中使用它

我相信这应该是可能的(至少我知道如何在 k6 中做到这一点),但是很难找到解决方案。

因此,以下代码应使用负载场景运行所有测试:

locust --host=https://myhost.com -f=locustfile.py --scenario=load

这是我项目的一个片段,我希望最终的解决方案看起来像这样:

├── helpers
│   ├── events.py
│   ├── scenarios.py
├── tests
│   ├── locustfile.py

蝗虫文件.py

class FirstTest(TaskSet):
    @task
    def first_task(self):
        ...
        do_something
        ...

class FirstTestUser(FastHttpUser):
    tasks = [FirstTest]

场景.py

class Smoke(LoadTestShape):

    stages = [
        {"duration": 60, "users": 10, "spawn_rate": 10}
    ]

    def tick(self):
        run_time = self.get_run_time()

        for stage in self.stages:
            if run_time < stage["duration"]:
                tick_data = (stage["users"], stage["spawn_rate"])
                return tick_data

        return None


class Load(LoadTestShape):

    stages = [
        {"duration": 60, "users": 10, "spawn_rate": 10},
        {"duration": 120, "users": 70, "spawn_rate": 10},
        {"duration": 600, "users": 250, "spawn_rate": 10},
    ]

    def tick(self):
        run_time = self.get_run_time()

        for stage in self.stages:
            if run_time < stage["duration"]:
                tick_data = (stage["users"], stage["spawn_rate"])
                return tick_data

        return None

事件.py

@events.init_command_line_parser.add_listener
def _(parser):
    parser.add_argument("--scenario", type=str, env_var="LOCUST_SCENARIO", default="")


@events.test_start.add_listener
def _(environment, **kw):
    if environment.parsed_options.scenario == "smoke":
        print("smoke scenario")  # for testing purposes only
        scenarios.Smoke
    elif environment.parsed_options.scenario == "load":
        scenarios.Load

我认为将侦听器添加到配置可能会有所帮助。 这只是一个建议,考虑到我尝试过使用它,但到目前为止还没有想出可行的方法。

如果您将不同的负载形状放在它们自己的文件中会怎样。 然后你可以做(使用Locust 2.11或更高版本)

locust -f locustfile.py,smoke.py

或者

locust -f locustfile.py,load.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM