导语
关于 locust https://locust.io 大家可以访问 进行了解,本次分享主要是分享如何使用locust 做数据库的压力测试
压力测试Mysql的插入能力
import os
import pymysql
from locust import HttpUser, between, task
class MyUser(HttpUser):
wait_time = between(1, 2)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 初始化数据库连接
self.db_conn = pymysql.connect(
host=self.get_config("DB_HOST", "localhost"),
port=int(self.get_config("DB_PORT", 3306)),
user=self.get_config("DB_USER", "username"),
password=self.get_config("DB_PASSWORD", "password"),
database="your_database",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor
)
def on_start(self):
# 在用户生命周期内执行插入测试的逻辑
self.insert_data()
def on_stop(self):
# 在用户生命周期结束时关闭数据库连接
if self.db_conn:
self.db_conn.close()
def get_config(self, key, default):
return os.getenv(key, default)
def insert_data(self):
# 执行数据库插入测试逻辑
with self.db_conn.cursor() as cursor:
# 插入数据的 SQL 语句
sql = "INSERT INTO `DataXplorer`.`data_xplorer_user`( `username`, `email`, `password`) VALUES (%s, %s, %s)"
# 插入的数据
data = ("value1", "value2", "value3")
# 执行插入操作
cursor.execute(sql, data)
# 提交事务
self.db_conn.commit()
@task
def perform_insert_task(self):
with self.client.request("POST", "/your-api-endpoint", catch_response=True) as response:
try:
# 执行插入测试任务
self.insert_data()
response.success()
except Exception as e:
response.failure(f"Failed to insert data: {e}")
测试步骤
- 启动脚本
locust -f Myuser.py --web-host=localhost --web-port=8089
- 访问地址
http://localhost:8089
- 参数填写
填写完每次的用户数和间隔时间,点击start
参数介绍
报告页面
参数详解
Request Statistics
- Requests/s (Reqs/s):
- 表示每秒钟完成的请求数量。
- 高值表示系统的处理能力较强。
- Failures/s (Fails/s):
- 表示每秒钟的失败请求数量。
- 高值可能表示系统存在问题或者负载测试中的一些失败。
- Median Response Time:
- 中位数响应时间,即一半的请求在这个时间内完成。
- 衡量了系统的整体性能。
- Average Response Time:
- 平均响应时间,所有请求的响应时间的平均值。
- 提供了系统的整体性能水平。
- Min Response Time:
- 所有请求中的最小响应时间。
- 表示最快的请求完成时间。
- Max Response Time:
- 所有请求中的最大响应时间。
- 表示最慢的请求完成时间。
Response Time Statistics
- 50%:
- 50%的请求在这个时间内完成,即中位数。
- 66%:
- 66%的请求在这个时间内完成。
- 75%:
- 75%的请求在这个时间内完成。
- 80%:
- 80%的请求在这个时间内完成。
- 90%:
- 90%的请求在这个时间内完成。
- 95%:
- 95%的请求在这个时间内完成。
- 98%:
- 98%的请求在这个时间内完成。
- 99%:
- 99%的请求在这个时间内完成。
- 99.9%:
- 99.9%的请求在这个时间内完成。
这些统计数据可以帮助你了解系统的性能、稳定性和可靠性。例如,通过观察响应时间的百分比分布,你可以得知在多大程度上系统能够满足不同用户的需求。更低的百分比(如50%或75%)表示大多数用户的体验,而更高的百分比(如99%或99.9%)表示一些极端情况下的性能表现。