使用Locust对MongoDB进行负载测试

1.安装环境

bash 复制代码
pip install pymongo locust

2.设置测试环境

开启MongoDB服务

打开Navicat,新建MongoDB连接

新建test数据库和sample集合

3.编写脚本

load_mongo.py

python 复制代码
# coding=utf-8
from locust import User, task, between, events
from pymongo import MongoClient
import random
import string
import logging

# 设置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("MongoDB Load Test")

# MongoDB连接配置
MONGO_URI = "mongodb://admin:admin@localhost:27017/?authSource=admin"
DATABASE_NAME = "test"
COLLECTION_NAME = "sample"


# 自定义MongoDB客户端
class MongoDBClient:
    def __init__(self):
        try:
            self.client = MongoClient(MONGO_URI)
            self.db = self.client[DATABASE_NAME]
            self.collection = self.db[COLLECTION_NAME]
            logger.info("MongoDB client initialized successfully.")
        except Exception as e:
            logger.error(f"Failed to connect to MongoDB: {e}")
            self.client = None

    def insert_document(self, document):
        if self.collection is not None:
            self.collection.insert_one(document)
            logger.info("Document inserted successfully.")
        else:
            logger.error("MongoDB collection is not available.")

    def close_connection(self):
        if self.client is not None:
            self.client.close()
            logger.info("MongoDB client connection closed.")


# Locust用户类
class MongoDBUser(User):
    wait_time = between(1, 2)
    mongo_client = None

    @staticmethod
    def initialize_mongo_client():
        if MongoDBUser.mongo_client is None:
            logger.info("Initializing MongoDB client...")
            MongoDBUser.mongo_client = MongoDBClient()

    @staticmethod
    def cleanup_mongo_client():
        if MongoDBUser.mongo_client:
            MongoDBUser.mongo_client.close_connection()
            MongoDBUser.mongo_client = None
            logger.info("MongoDB client cleaned up.")

    # 监听测试开始
    @staticmethod
    @events.test_start.add_listener
    def on_test_start(environment, **kwargs):
        MongoDBUser.initialize_mongo_client()

    # 监听测试结束
    @staticmethod
    @events.test_stop.add_listener
    def on_test_stop(environment, **kwargs):
        MongoDBUser.cleanup_mongo_client()

    @task(2)
    def insert_data(self):
        """模拟插入数据的任务"""
        if MongoDBUser.mongo_client is None:
            logger.error("MongoDB client is not initialized.")
            return
        document = {
            "name": ''.join(random.choices(string.ascii_letters, k=10)),
            "age": random.randint(18, 65),
            "address": ''.join(random.choices(string.ascii_letters + string.digits, k=20)),
        }
        MongoDBUser.mongo_client.insert_document(document)
        logger.info(f"Inserted document: {document}")

4.运行测试

打开终端执行命令

bash 复制代码
locust -f load_mongo.py --headless -u 5 -r 1 -t 5s

测试结果

打开Navicat查看sample表可以看到数据增多

相关推荐
一 乐14 分钟前
汽车租赁|基于SprinBoot+vue的汽车租赁管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·汽车·论文·毕设·汽车租赁管理系统
zandy101128 分钟前
衡石科技 NL2Metrics 技术深度解析(2026):ChatBI 准确度破局的关键路径
数据库·科技·oracle
Elastic 中国社区官方博客29 分钟前
Elasticsearch 如何通过 synthetic _id 和 Bloom filters 将时序存储降低 34%
大数据·数据库·elasticsearch·搜索引擎·serverless·全文检索·时序数据库
一只鹿鹿鹿43 分钟前
信息化项目管理规范(参考Word文件)
java·大数据·运维·开发语言·数据库
这个DBA有点耶1 小时前
多模融合数据库深度解析:关系、文档、向量、图如何统一?
数据库·自然语言处理·aigc·dba·改行学it
anew___1 小时前
《数据库原理》精要解读(三)—— SQL:与数据库对话的艺术
数据库·sql·oracle
KaiwuDB1 小时前
KWDB 3.2.0 版本发布,数据管理查询增强,安装部署体验全面升级
数据库
暴躁小师兄数据学院1 小时前
【AI大数据工程师特训笔记】第10讲:数据库用户、权限管理、数据库约束
大数据·数据库·笔记·sql·postgresql
凤山老林1 小时前
DDD(领域驱动设计)在复杂业务系统中的落地指南
java·开发语言·数据库·ddd·领域驱动