ai根据api文档自动生成测试用例输出测试结果脚本

https://github.com/wangwenjun587-byte/Wangwenjun587.git

API自动化测试脚本

功能特性

  • :white_check_mark: 支持HTTP/HTTPS请求
  • :white_check_mark: 自动生成测试用例(正常场景、异常场景、边界场景)
  • :white_check_mark: 支持多接口测试,严格按照执行顺序执行
  • :white_check_mark: 支持压力测试(可配置并发数和并发时间)
  • :white_check_mark: 根据JSON schema生成测试用例
  • :white_check_mark: 支持将接口定义存为单独文件
  • :white_check_mark: 支持在schema中添加预设的正确数据
  • :white_check_mark: 支持嵌套JSON结构
  • :white_check_mark: 支持接口依赖管理(自动按依赖顺序执行)
  • :white_check_mark: 支持参数传递(从一个接口传递到另一个接口)
  • :white_check_mark: 支持断言机制(验证接口返回是否符合预期)
  • :white_check_mark: 支持结果分类存储(成功/失败结果分开存储)
  • :white_check_mark: 支持变量管理(持久化存储和全局使用)
  • :white_check_mark: 支持LLM测试用例生成(集成英伟达meta/llama3-70b-instruct模型)

安装依赖

pip install requests

目录结构

Wangwenjun587/  # 项目根目录
├── api_auto_test.py      # 核心测试脚本
├── api_test_runner.py    # API测试管理器
├── variable_manager.py   # 变量管理器
├── execution_order.py    # 执行顺序配置
├── stress_test_config.py # 压力测试配置
├── api_definitions/      # 接口定义目录
│   ├── login.py          # 登录接口定义
│   ├── create_categories.py  # 创建分类接口定义
│   ├── search_categories.py  # 搜索分类接口定义
│   ├── create_item.py    # 创建物料接口定义
│   └── create_team.py    # 创建团队接口定义
├── test_results/         # 测试结果目录
├── variables.json        # 变量存储文件
└── README.md             # 说明文档

用法

1. 运行所有API测试(按执行顺序)

python api_test_runner.py

系统会严格按照 execution_order.py 中定义的顺序执行API,不会执行任何不在执行顺序中的API。

2. 运行指定API的压力测试

# 使用默认配置
python api_test_runner.py --stress --api-name "Login"

# 使用指定并发数和持续时间
python api_test_runner.py --stress --api-name "Login" --concurrency 20 --duration 30

# 使用预定义测试场景
python api_test_runner.py --stress --api-name "Login" --scenario medium

执行顺序配置

execution_order.py 文件中定义API的执行顺序:

# 定义API执行顺序
# 注意:此顺序应遵循依赖关系,确保依赖的API先执行
# 使用文件名而不是API名称,更简单
EXECUTION_ORDER = [
    "login.py",  # 登录接口,无依赖
    "create_team.py"  # 创建团队接口,依赖登录接口
]

系统会严格按照此列表中的顺序执行API,只执行列表中指定的API文件。

压力测试配置

stress_test_config.py 文件中配置压力测试参数:

  • 基础配置:默认并发数和测试持续时间
  • 性能阈值:响应时间、成功率、错误率的阈值要求
  • 预定义测试场景:轻量级、中等负载、高负载、峰值负载

预定义测试场景

场景 并发数 持续时间(秒) 描述
light 5 30 轻量级测试,适用于初步性能评估
medium 20 60 中等负载测试,适用于常规性能评估
heavy 50 120 高负载测试,适用于极限性能评估
spike 100 30 峰值负载测试,适用于测试系统稳定性

API定义文件

api_definitions 目录中创建接口定义文件,每个文件只加载第一个以 _api 结尾的函数。

示例:登录接口

# api_definitions/login.py
import time

def get_user_api():
    """获取用户信息接口"""
    # 生成时间戳变量
    timestamp = int(time.time())
    
    return {
        "name": "Get User",
        "method": "POST",
        "url": "https://c2.xinheyun.com/api/open/v3/token",
        "headers": {"Content-Type": "application/json"},
        "json": {
            "body": {
                "appKey": "29c84b4b-dc1f-4ca8-9058-138b8d85ecbb",
                "appSecret": "1!p1302[19Y9o%vU"
            }
        },
        "outputs": {
            "token": "$.data.entity.accessToken"  # 提取token
        },
        "expected": {
            "status_code": 200,  # 预期状态码
            "contains": ["accessToken", "accessTokenExpireIn"]  # 响应内容应包含的关键字
        },
        "schema": {
            "body.appKey": {
                "type": "string",  # string, integer, boolean, array, object,enum(枚举)
                "required": True,  # 是否必填(Python布尔值)
                "minLength": None,  # 字符串最小长度(仅string类型)
                "maxLength": None,  # 字符串最大长度(仅string类型)
                "minimum": None,  # 数值最小值(仅integer类型)
                "maximum": None,  # 数值最大值(仅integer类型)
                "default": None  # 默认值
            },
            "body.appSecret": {
                "type": "string",  # string, integer, boolean, array, object
                "required": True,  # 是否必填(Python布尔值)
                "minLength": None,  # 字符串最小长度(仅string类型)
                "maxLength": None,  # 字符串最大长度(仅string类型)
                "minimum": None,  # 数值最小值(仅integer类型)
                "maximum": None,  # 数值最大值(仅integer类型)
                "default": None  # 默认值
            }
        }
    }

测试结果

成功结果

成功的测试结果会存储到 test_results/success_*.json 文件中。

失败结果

失败的测试结果会存储到 test_results/failure_*.json 文件中,包含以下信息:

  • case_name:测试用例名称
  • response:接口返回值,包含 status_codecontent
  • requestId:从请求headers中获取的requestId
  • errors:错误信息(如果有)

变量管理

系统使用 variable_manager.py 来管理变量,变量会被持久化存储到 variables.json 文件中,全局可用。

在API定义中提取变量

在API定义的 outputs 字段中定义需要提取的变量:

"outputs": {
    "token": "$.data.entity.accessToken"  # 提取token
}

在API定义中引用变量

使用 ${变量名} 的格式引用变量:

"headers": {
    "Authorization": "Bearer ${token}"  # 使用token变量
}

注意事项

  1. 确保安装了requests库:pip install requests
  2. 执行顺序由 execution_order.py 文件定义,系统会严格按照此顺序执行API
  3. 每个API定义文件只加载第一个以 _api 结尾的函数
  4. 依赖关系必须是无环的,否则会导致执行顺序无法确定
  5. 启用LLM测试用例生成需要有效的英伟达API密钥
  6. 压力测试时,并发数不宜设置过高,以免对目标服务器造成过大压力
  7. 测试结果会自动分类为成功和失败,分别存储到不同文件
  8. 变量会被持久化存储到 variables.json 文件中,全局可用