Skip to content

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

分布式模式运行

主节点

# 启动主节点,期望2个工作节点

aiotest --master --expect-workers 2

工作节点

# 启动工作节点,连接到主节点

aiotest --worker

自定义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 模块都能提供一致、高效的命令行接口,帮助用户快速配置和执行负载测试。