You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Locust测试启动前通过Web UI获取参数?

在Locust中实现测试启动前Web UI参数输入功能

要实现测试启动前通过Web UI收集参数的需求,你可以利用Locust基于Flask的Web框架扩展能力,添加自定义配置页面并将参数传递到测试脚本中。以下是具体实现步骤:

1. 核心实现思路

  • 通过Locust的@events.init.add_listener钩子,在服务启动时注册自定义Flask路由,提供参数输入表单
  • 将用户提交的参数存储到Locust的environment.user_data中(支持分布式场景下Worker节点共享)
  • 在测试脚本中直接读取存储的参数,动态配置测试行为

2. 完整代码示例

from locust import HttpUser, task, events
from flask import request, render_template_string

# 注册初始化事件,添加自定义配置页面
@events.init.add_listener
def on_locust_init(environment, **kwargs):
    # 初始化参数存储容器
    environment.user_data["test_params"] = {}

    # 定义配置页面路由
    @environment.web_ui.app.route("/config", methods=["GET", "POST"])
    def config_page():
        params = environment.user_data["test_params"]
        if request.method == "POST":
            # 读取表单提交的参数并保存
            params["target_host"] = request.form.get("target_host")
            params["max_users"] = int(request.form.get("max_users", 20))
            params["spawn_per_sec"] = int(request.form.get("spawn_per_sec", 2))
            params["api_path"] = request.form.get("api_path", "/api/v1/resource")
            # 提交后跳转回Locust主控制台
            return environment.web_ui.app.redirect("/")
        
        # 渲染参数输入表单(支持回显已配置值)
        return render_template_string("""
            <html>
                <head>
                    <style>
                        .form-container { max-width: 500px; margin: 2rem auto; padding: 0 1rem; }
                        .form-group { margin-bottom: 1rem; }
                        label { display: block; margin-bottom: 0.5rem; }
                        input { width: 100%; padding: 0.5rem; box-sizing: border-box; }
                        button { padding: 0.5rem 1.5rem; background: #007bff; color: white; border: none; border-radius: 4px; }
                    </style>
                </head>
                <body>
                    <div class="form-container">
                        <h2>测试参数配置</h2>
                        <form method="post">
                            <div class="form-group">
                                <label>目标服务地址 (Host):</label>
                                <input type="text" name="target_host" value="{{ params.get('target_host', '') }}" required placeholder="https://your-service.com">
                            </div>
                            <div class="form-group">
                                <label>最大并发用户数:</label>
                                <input type="number" name="max_users" value="{{ params.get('max_users', 20) }}" min="1">
                            </div>
                            <div class="form-group">
                                <label>每秒生成用户数:</label>
                                <input type="number" name="spawn_per_sec" value="{{ params.get('spawn_per_sec', 2) }}" min="1">
                            </div>
                            <div class="form-group">
                                <label>测试API路径:</label>
                                <input type="text" name="api_path" value="{{ params.get('api_path', '/api/v1/resource') }}">
                            </div>
                            <button type="submit">保存配置并返回控制台</button>
                        </form>
                    </div>
                </body>
            </html>
        """, params=params)

# 测试用户类,使用配置的参数
class PerformanceTestUser(HttpUser):
    def on_start(self):
        # 从全局存储中读取参数,动态设置Host
        test_params = self.environment.user_data.get("test_params", {})
        if test_params.get("target_host"):
            self.host = test_params["target_host"]

    @task
    def test_target_api(self):
        test_params = self.environment.user_data.get("test_params", {})
        api_path = test_params.get("api_path", "/")
        self.client.get(api_path, name="Target API Request")

3. 使用说明

  1. 启动Locust服务:运行locust -f your_script.py
  2. 访问参数配置页面:打开浏览器进入http://localhost:8089/config,填写所需参数后提交
  3. 启动测试:返回Locust主控制台(http://localhost:8089),可以直接使用配置的max_users和spawn_per_sec(或手动调整),测试脚本会自动应用配置的target_host和api_path

4. 分布式场景适配

如果使用Locust分布式集群,environment.user_data会自动通过主节点同步到所有Worker节点,无需额外配置即可实现参数共享。

内容的提问来源于stack exchange,提问作者Ilia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:42:49