目录
【介绍】
其实横向压测更关注系统的扩展能力,而纵向压测更关注单个实例的性能提升。
举个简单的例子:
普遍的如果我们要测试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']}")
一个比较基本的代码就是这样,其实实现起来还是比较简单的。
【注意】
-
一定要注意MongoDB连接的url是否是测试环境。
- 因为这里其实对数据是没有要求的,所以都插入一样的数据就可以了,如果对数据有要求可以灵活修改。
- 在开始运行代码之前,最好先将range改小一点,先插入两条数据看看,如果没问题再增加数据体量。