AioTest 命令行接口文档¶
目录¶
概述¶
cli.py 是 AioTest 负载测试项目的命令行接口模块,负责解析命令行参数、处理错误、查找和加载测试文件、验证类等功能。该模块是 AioTest 系统与用户交互的重要组成部分,提供了丰富的命令行选项和工具函数。
核心功能¶
- ✅ 命令行参数解析 - 支持多种配置选项
- ✅ 错误处理 - 提供友好的错误信息
- ✅ 文件查找与验证 - 确保测试文件的正确性
- ✅ 测试文件加载 - 提取用户类和形状类
- ✅ 类验证 - 确保用户类和形状类的有效性
命令行参数解析¶
parse_options(args=None) 函数¶
作用:解析命令行参数并返回解析结果
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
args |
list \| None |
None |
要解析的参数列表,默认为None表示使用sys.argv |
返回值:
argparse.Namespace:解析后的参数对象
功能:
- 初始化命令行参数解析器
- 定义基础参数、Redis参数、分布式参数、日志参数等分组
- 解析命令行参数并返回结果
错误处理¶
handle_error_and_exit(message, error=None) 函数¶
作用:处理错误并退出程序
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
message |
str |
无 | 错误消息 |
error |
Exception, optional |
None |
错误对象 |
功能:
- 记录错误信息
- 如果提供了错误对象,记录详细的错误信息
- 退出程序
validate_file_exists(file_path, file_type) 函数¶
作用:验证文件是否存在
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
file_path |
str |
无 | 文件路径 |
file_type |
str |
无 | 文件类型描述 |
返回值:
bool:如果文件存在,返回True
功能:
- 检查文件是否存在
- 如果不存在,记录错误并退出
文件查找与加载¶
find_aiotestfile(aiotestfile) 函数¶
作用:查找并验证aiotest测试文件路径
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
aiotestfile |
str |
无 | 测试文件名或路径 |
返回值:
str|None:返回找到的绝对路径,未找到时返回None
功能:
- 检查文件扩展名是否为.py
- 处理包含目录的路径和用户目录标记(如~/)
- 返回文件的绝对路径
load_aiotestfile(path: str) 函数¶
作用:加载aiotest测试文件并提取用户类和形状类
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
path |
str |
无 | 测试文件路径 |
返回值:
Tuple[Dict[str, Type[User]], Optional[LoadUserShape], Optional[Callable]]:包含用户类字典、形状类实例和初始化事件函数的元组
功能:
- 使用importlib从文件路径导入模块
- 提取用户类和形状类
- 检查形状类数量
- 提取初始化事件函数
类验证¶
is_subclass_with_prefix(cls, base_class, required_attrs=None, module_name=None) 函数¶
作用:检查类是否为特定基类的子类且类名有特定前缀或后缀
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cls |
type |
无 | 要检查的类对象 |
base_class |
type |
无 | 基类 |
required_attrs |
list |
None |
必需的属性列表 |
module_name |
str |
None |
模块名 |
返回值:
bool:如果类是有效的子类,返回True;否则返回False
功能:
- 验证类是否为指定基类的子类
- 确保类实现了必要的属性
- 检查类是否来自指定模块
is_shape_class(cls) 函数¶
作用:检查类是否为有效的LoadUserShape子类
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cls |
type |
无 | 要检查的类对象 |
返回值:
bool:如果类是有效的LoadUserShape子类,返回True;否则返回False
功能:
- 验证类是否为LoadUserShape的子类
- 确保类实现了必要的抽象方法
is_user_class(cls) 函数¶
作用:检查类是否为有效的User子类
参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cls |
type |
无 | 要检查的类对象 |
返回值:
bool:如果是有效的User子类返回True,否则返回False
功能:
- 验证类是否为User的子类
- 确保类实现了必要的属性(如weight)
配置参数¶
| 配置项 | 类型 | 默认值 | 说明 | 适用场景 |
|---|---|---|---|---|
aiotestfile |
str |
aiotestfile |
测试文件路径 | 所有模式 |
host |
str |
"" |
测试目标主机 | 所有模式 |
show_users_wight |
bool |
False |
显示用户权重 | 所有模式 |
redis_path |
str |
127.0.0.1 |
Redis服务器地址 | 分布式模式 |
redis_port |
int |
6379 |
Redis服务器端口 | 分布式模式 |
redis_password |
str |
123456 |
Redis服务器密码 | 分布式模式 |
master |
bool |
False |
以主节点模式运行 | 分布式模式 |
worker |
bool |
False |
以工作节点模式运行 | 分布式模式 |
expect_workers |
int |
1 |
期望连接的工作节点数 | 主节点模式 |
loglevel |
str |
INFO |
日志级别 | 所有模式 |
logfile |
str |
None |
日志文件路径 | 所有模式 |
prometheus-port |
int |
8089 |
Prometheus指标服务器端口 | 所有模式 |
metrics-collection-interval |
float |
5.0 |
指标收集间隔(秒) | 所有模式 |
metrics-batch-size |
int |
100 |
指标批量大小 | 所有模式 |
metrics-flush-interval |
float |
1.0 |
指标刷新间隔(秒) | 所有模式 |
metrics-buffer-size |
int |
10000 |
指标缓冲区大小 | 所有模式 |
使用示例¶
本地模式运行¶
# 基本用法
aiotest
# 指定测试文件
aiotest -f my_test.py
# 设置日志级别
aiotest --loglevel DEBUG
# 显示用户权重
aiotest --show-users-wight
分布式模式运行¶
主节点:
工作节点:
自定义Redis配置¶
# 指定Redis服务器
aiotest --master --redis-path 192.168.1.100 --redis-port 6379 --redis-password mypassword
故障排查¶
常见问题¶
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 测试文件未找到 | 文件路径错误或文件不存在 | 检查文件路径,确保文件存在且扩展名正确 |
| Redis连接失败 | Redis服务器未运行或配置错误 | 检查Redis服务器状态和配置参数 |
| 工作节点无法连接主节点 | 网络问题或主节点地址错误 | 检查网络连接和主节点地址配置 |
| 启动超时 | 工作节点未就绪或资源不足 | 检查工作节点状态和系统资源 |
| 日志级别设置无效 | 日志级别参数错误 | 确保使用有效的日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL) |
日志分析¶
- 参数解析:
Parsed options: {...} - 文件加载:
Loading aiotestfile: {...}
总结¶
cli.py 模块是 AioTest 负载测试项目的命令行接口核心,提供了丰富的命令行选项和工具函数,使用户能够方便地配置和启动负载测试。
该模块的设计考虑了用户体验和灵活性,通过清晰的命令行选项和友好的错误处理,为用户提供了直观的操作界面。同时,它也注重文件加载和类验证的可靠性,确保测试文件的正确性和有效性。
无论是简单的本地测试还是复杂的分布式测试,cli.py 模块都能提供一致、高效的命令行接口,帮助用户快速配置和执行负载测试。