LoadPup - 专业的API性能压测工具
LoadPup是一个专业的API性能压测工具,专门设计用于对大语言模型(LLM)API进行全面的性能测试和分析。支持OpenAI兼容接口和Dify API,提供详细的性能指标分析和百分位数统计。
✨ 核心特性
🚀 多API支持
- OpenAI兼容接口: 基于evalscope库的高性能压测
- Dify API: 专门优化的流式响应压测
- 统一接口: 一致的配置和使用体验
📊 详细性能分析
- 27-29个详细指标: 全方位性能数据收集
- 百分位数分析: P50、P90、P99延迟分析
- 多维度指标: 延迟、吞吐量、成功率、token统计
- 首token延迟: 流式响应的关键指标
🎯 灵活配置
- 多并发测试: 支持"1;2;4;8"格式的批量并发测试
- 自定义参数: 模型、prompt长度、温度等可配置
- 查询文件: 支持自定义测试查询集合
- 输出格式: JSON和Excel双格式报告
🛡️ 稳定可靠
- 同步执行: 避免异步复杂性,更稳定
- 错误处理: 完善的异常处理和重试机制
- 线程安全: 多线程环境下的数据安全
- 日志系统: 详细的测试过程记录
📋 系统要求
- Python 3.11+
- 依赖库:
- evalscope (OpenAI压测引擎)
- requests (HTTP请求)
- pandas (数据处理)
- numpy (数值计算)
- openpyxl (Excel文件)
- transformers (可选,用于token计数)
🔧 安装
1. 克隆仓库
git clone https://github.com/anonNo2/LoadPup.git
cd LoadPup
2. 安装依赖
# 使用pip安装
pip install -r requirements.txt
# 或使用poetry (推荐)
poetry install
3. 安装evalscope (OpenAI压测必需)
pip install evalscope
🚀 快速开始
OpenAI API压测
# 基础压测
python loadpup/cli.py openai \
--base_url "https://api.openai.com/v1" \
--model "gpt-3.5-turbo" \
--parallel "1;2;4" \
--prompt_length 500 \
--output_length 200
# 详细配置
python loadpup/cli.py openai \
--base_url "https://your-api.com/v1" \
--model "your-model" \
--parallel "1;2;4;8" \
--prompt_length 1000 \
--output_length 500 \
--temperature 0.7 \
--output_dir "output/my_test"
Dify API压测
# 基础压测
python loadpup/cli.py dify \
--api_url "http://your-dify.com/v1/chat-messages" \
--api_key "app-your-key" \
--parallel "1;2;4" \
--total_requests 100
# 使用自定义查询文件
python loadpup/cli.py dify \
--api_url "http://your-dify.com/v1/chat-messages" \
--api_key "app-your-key" \
--parallel "2;4;8" \
--query_file "queries.txt" \
--total_requests 200 \
--output_dir "output/dify_test"
📊 测试报告
报告格式
LoadPup生成两种格式的详细报告:
- JSON格式 (
report_YYYYMMDD_HHMMSS.json) - Excel格式 (
report_YYYYMMDD_HHMMSS.xlsx) - 汇总报告 (
summary_report_YYYYMMDD_HHMMSS.xlsx) - 多并发对比
OpenAI报告指标 (27个)
{
"模型": "gpt-3.5-turbo",
"并行度": 4,
"提示长度": 500,
"输出长度": 200,
"测试总时长(s)": 45.23,
"总请求数": 40,
"成功请求数": 40,
"失败请求数": 0,
"平均吞吐量(token/s)": 176.8,
"平均QPS": 0.88,
"平均延迟(s)": 4.52,
"首token平均延迟(s)": 1.23,
"单token平均延迟(s)": 0.015,
"平均输入token数": 500,
"平均输出token数": 200,
"P50延迟(s)": 4.31,
"P50首token延迟(s)": 1.18,
"P50单token延迟(s)": 0.014,
"P90延迟(s)": 5.67,
"P90首token延迟(s)": 1.45,
"P90单token延迟(s)": 0.018,
"P99延迟(s)": 6.23,
"P99首token延迟(s)": 1.67,
"P99单token延迟(s)": 0.021,
"API URL": "https://api.openai.com/v1",
"温度": 0.7,
"流式输出": true
}
Dify报告指标 (29个)
Dify报告包含所有OpenAI指标,plus:
- 查询文件路径
- 查询数量统计
- Dify特有的API响应字段
📁 项目结构
LoadPup/
├── loadpup/ # 主要源码包
│ ├── __init__.py # 包初始化和公共接口
│ ├── benchmark_base.py # 压测基类,定义通用接口
│ ├── openai_benchmark.py # OpenAI API压测实现
│ ├── dify_benchmark.py # Dify API压测实现
│ ├── main.py # 主管理器和配置工厂
│ └── cli.py # 命令行接口
├── output/ # 测试结果输出目录
│ ├── openai/ # OpenAI测试结果
│ └── dify/ # Dify测试结果
├── README.md # 项目文档
├── requirements.txt # 依赖列表
├── pyproject.toml # Poetry配置
└── LICENSE # 开源协议
⚙️ 高级配置
自定义查询文件 (Dify)
创建queries.txt文件,每行一个查询:
请介绍一下人工智能的发展历史
解释一下机器学习和深度学习的区别
请简述自然语言处理的应用场景
描述一下大语言模型的工作原理
环境变量配置
# 设置默认的tokenizer路径
export TOKENIZER_PATH="/path/to/your/tokenizer"
# 设置默认输出目录
export OUTPUT_DIR="/path/to/output"
批量测试脚本
#!/bin/bash
# 多API对比测试
# OpenAI测试
python loadpup/cli.py openai \
--base_url "https://api.openai.com/v1" \
--model "gpt-3.5-turbo" \
--parallel "1;2;4;8" \
--output_dir "comparison/openai"
# Dify测试
python loadpup/cli.py dify \
--api_url "http://your-dify.com/v1/chat-messages" \
--api_key "your-key" \
--parallel "1;2;4;8" \
--output_dir "comparison/dify"
🔍 性能优化建议
1. 并发数设置
- 从小并发开始:1 → 2 → 4 → 8 → 16
- 观察系统资源使用情况
- 避免过高并发导致的资源耗尽
2. 网络优化
- 确保网络带宽充足
- 考虑使用内网环境测试
- 监控网络延迟对结果的影响
3. 系统资源
- 监控CPU和内存使用率
- 适当调整请求超时时间
- 考虑使用更高配置的测试机器
🐛 故障排除
常见问题
-
ModuleNotFoundError: No module named 'evalscope'
pip install evalscope
-
请求超时
# 检查网络连接和API服务状态 # 增加timeout参数或降低并发数
-
Token计数不准确
# 安装transformers库 pip install transformers # 或指定正确的tokenizer路径
-
日志重复输出
- 已修复,每个logger实例只保留一份handler
调试模式
# 启用详细日志
python loadpup/cli.py openai --debug \
--base_url "https://api.openai.com/v1" \
--model "gpt-3.5-turbo" \
--parallel "1"
🤝 贡献指南
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交变更 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
开发环境设置
# 使用poetry管理依赖
poetry install --dev
# 运行测试
python -m pytest tests/
# 代码格式化
black loadpup/
isort loadpup/
📄 开源协议
本项目采用 Apache 2.0 协议 - 查看 LICENSE 文件了解详情。
🙏 致谢
📧 联系方式
- 项目主页: https://github.com/anonNo2/LoadPup
- 问题反馈: GitHub Issues
- 邮件: anon2010@163.com
LoadPup - 让API性能测试更简单、更专业、更准确! 🚀
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
loadpup-1.0.0.tar.gz
(24.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
loadpup-1.0.0-py3-none-any.whl
(26.6 kB
view details)
File details
Details for the file loadpup-1.0.0.tar.gz.
File metadata
- Download URL: loadpup-1.0.0.tar.gz
- Upload date:
- Size: 24.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45d38379be0a45596f6f2be646f3360a2eb93c8cdfe2ffd4871e80556065371c
|
|
| MD5 |
264cf64e3d8a04d78494cb6874ac1016
|
|
| BLAKE2b-256 |
3b2f9734f1b0a09033bc72be7373c754bcdca8ce05ed565bfdfa74f1324448fd
|
File details
Details for the file loadpup-1.0.0-py3-none-any.whl.
File metadata
- Download URL: loadpup-1.0.0-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fa3a461ef199f290f0fd011d67c0b4d7bdcc7634dd59c32ba91ad211b0d56c5
|
|
| MD5 |
c8f8856c001d96bff7d8dafdc4db0a8e
|
|
| BLAKE2b-256 |
ebf5da2a096917d78c48cfb5c5962ec61e46e9f37f8e142be49878e79ba7ffa1
|