当前位置: 首页 > article >正文

使用Locust对MongoDB进行负载测试

1.安装环境

pip install pymongo locust

2.设置测试环境

开启MongoDB服务

打开Navicat,新建MongoDB连接

新建test数据库和sample集合

3.编写脚本

load_mongo.py

# 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.运行测试

打开终端执行命令

locust -f load_mongo.py --headless -u 5 -r 1 -t 5s

测试结果

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


http://www.kler.cn/a/469839.html

相关文章:

  • 移动端自动化测试Appium-java
  • Backend - EF Core(C# 操作数据库 DB)
  • FreeSWITCH dialplan/default.xml 之释疑
  • DeepSeek重新定义“Open“AI
  • mongodb==安装prisma连接
  • 热备份路由HSRP及配置案例
  • 力扣-数组-01两数之和
  • Mysql事务的特性和隔离级别
  • HTML5 + Bootstrap5 网站底部代码分享与解析
  • 【网络安全设备系列】13、网页防篡改
  • Speech Recognition vs. Voice Recognition | 语音识别工作原理 | 模型训练 | 应用
  • Neo4j的部署和操作
  • 2025年01月06日Github流行趋势
  • 每日AIGC最新进展(80): 重庆大学提出多角色视频生成方法、Adobe提出大视角变化下的人类视频生成、字节跳动提出快速虚拟头像生成方法
  • 【保姆级爬虫】微博关键词搜索并获取博文和评论内容(python+selenium+chorme)
  • 幽境察韵:printf 的格式笔触,勾勒打印的精致纹理
  • 【模型部署】实例(附代码)
  • 【从0带做】基于Springboot3+Vue3的疾病防控综合系统
  • 使用 Hadoop + MapReduce + Elasticsearch 实现高效的日志处理与分析
  • vulhubn中potato靶场
  • 长上下文窗口的大语言模型数据设计
  • 场馆预定平台高并发时间段预定实现V1
  • .net core三种依赖注入方式,原生的依赖注入器,scrutor,autofac
  • cat命令详解
  • leecode1035.不相交的线
  • 低功耗视频监控/太阳能无线监控在水产渔业养殖场景中有哪些应用?