用Pycharm实现基于MongoDB数据的接口纵向压测方法

目录

【介绍】

【实现】

1.首先连接数据库(基于内网和测试环境)

2.编写代码

3.验证数据


【介绍】

其实横向压测更关注系统的扩展能力,而纵向压测更关注单个实例的性能提升。

举个简单的例子

普遍的如果我们要测试100个并发同时请求接口时系统的性能表现,这就可以通过模拟大量同时连接的用户进行测试,这属于横向压测

如果需要考虑已有的数据体量,现在要在同一个用户有5w条数据的基础上进行测试,更关注单个用户请求的处理性能,这就属于纵向压测

所以,当做纵向压测时,我们需要的数据体量就会很多,肯定不能通过频繁的请求接口去造数据,而是需要通过脚本向数据库灌数据。

【实现】

1.连接数据库(基于内网和测试环境)

2.编写代码

编写代码,这里实现的是随机生成5w个用户并向每个用户插入10条历史数据。

import pymongo
from bson import ObjectId
from datetime import datetime
import random
import string

# 生成随机的字母和数字混合的字符串,用做id
def generate_random_string(length):
    characters = string.ascii_letters + string.digits
    return ''.join(random.choice(characters) for _ in range(length))

# 连接到 MongoDB
client = pymongo.MongoClient("MongoDB的连接url")
db = client["数据库名称"]
collection = db["表名称"]

# 准备要插入的数据
data_to_insert = []
#5w个用户
for i in range(50000): 
    user_data = []
    ydUserId = generate_random_string(random.randint(10, 20))、
    #每个用户10条数据
    for j in range(10): 
        taskId = generate_random_string(random.randint(10, 20))
        #对应的参数和值
        data = {
            "_t": "AiTranslateTaskDetails",
            "_id": ObjectId(),
            "ydUserId": ydUserId,
            "taskId": taskId,
            "model": "chatglm-pro-wangyi",
            "func": "ai_translate",
            "dialogues": [
                {
                    "_t": "AiTranslateDialogue",
                    "roundId": 0,
                    "question": "这是一个问题",
                    "answer": "This is a question.",
                    "legal": True,
                    "del": False
                }
            ],
            "createTime": datetime.utcnow()
        }
        user_data.append(data)
    data_to_insert.extend(user_data)

# 批量插入数据
try:
    collection.insert_many(data_to_insert)
    print("Data inserted successfully")
except pymongo.errors.BulkWriteError as e:
    for error in e.details['writeErrors']:
        print(f"Error inserting document: {error['errmsg']}")

一个比较基本的代码就是这样,其实实现起来还是比较简单的。

【注意】

  1. 一定要注意MongoDB连接的url是否是测试环境。

  2. 因为这里其实对数据是没有要求的,所以都插入一样的数据就可以了,如果对数据有要求可以灵活修改。
  3. 在开始运行代码之前,最好先将range改小一点,先插入两条数据看看,如果没问题再增加数据体量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值