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

如何在Locust中使用Django ORM解决硬编码数据问题?

Locust负载测试Django应用动态获取数据的解决办法

问题场景

我用Locust给Django应用做负载测试,当前locustfile.py里硬编码了分组UUID:

GROUP_UUID = "6790f1e6-64f9-4707-aa82-d4edd64c9cc7"

@task
def get_single_group(self):
    self.client.get(f"/api/groups/{GROUP_UUID}/")

每次重置数据库后,这个硬编码的UUID就失效,得频繁修改代码。尝试改成运行时动态从数据库获取分组:

from myapp.models import Group

@task
def get_single_group(self):
    group = Group.objects.first()
    self.client.get(f"/api/groups/{group.id}/")

但触发报错:

ModuleNotFoundError: No module named 'myapp'

原因是Locust默认不识别Django环境,想知道能不能在locustfile.py里用Django ORM,还是只能继续硬编码数据?

可行解决方案

方法1:手动初始化Django环境后使用ORM

Locust本身不会加载Django配置,只需在locustfile开头手动初始化Django环境,就能正常使用ORM:

import os
import django
import sys
from locust import HttpUser, task

# 将Django项目根目录加入Python路径(如果Locust文件不在项目根目录)
sys.path.append("/path/to/your/django/project")
# 设置Django的settings模块路径,替换成实际项目的settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
# 初始化Django
django.setup()

# 现在可以正常导入模型
from myapp.models import Group

class LoadTestUser(HttpUser):
    @task
    def get_single_group(self):
        group = Group.objects.first()
        if group:
            self.client.get(f"/api/groups/{group.id}/")

注意事项:

  • 确保测试环境的Python能访问到Django项目的依赖包
  • 直接操作数据库时,要避免连接生产数据库,建议用测试库

方法2:通过API接口动态获取测试数据

如果不想直接操作数据库,可以模拟真实用户流程,先调用Django的列表接口获取可用的分组ID,再发起测试请求:

from locust import HttpUser, task

class LoadTestUser(HttpUser):
    def on_start(self):
        # 每个用户启动时,先获取一个可用分组ID
        resp = self.client.get("/api/groups/")
        self.group_id = None
        if resp.status_code == 200:
            group_list = resp.json()
            if group_list:
                self.group_id = group_list[0]["id"]

    @task
    def get_single_group(self):
        if self.group_id:
            self.client.get(f"/api/groups/{self.group_id}/")

这种方式更贴合真实业务场景,无需依赖Django ORM,也避免了直接操作数据库的风险。

方法3:从外部配置文件读取数据

如果数据变动不频繁,可以把测试数据存在外部配置文件(如JSON/CSV),重置数据库后更新配置文件即可:

  1. 创建test_config.json:
{"valid_group_id": "6790f1e6-64f9-4707-aa82-d4edd64c9cc7"}
  1. 在locustfile里读取配置:
import json
from locust import HttpUser, task

# 加载外部配置
with open("test_config.json", "r", encoding="utf-8") as f:
    test_config = json.load(f)

class LoadTestUser(HttpUser):
    @task
    def get_single_group(self):
        self.client.get(f"/api/groups/{test_config['valid_group_id']}/")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:45:23