AI 协助接口健壮性测试

供稿来自:@许小雨、王敏

一、背景:

本文旨在实现API健壮性测试用例的自动化生成与执行,提升API的质量与可靠性,同时降低人力投入和测试成本。

二、解决问题:

  1. 测试重心偏向核心业务测试人员主要关注核心业务流程,往往忽略了接口参数类型、边界值等细致测试,导致部分异常场景未被覆盖。
  2. 接口和参数数量激增随着系统接口和参数数量不断增加,人工难以穷尽所有组合,测试覆盖率不足,容易遗漏特殊或极端情况。
  3. 人工设计用例成本高、效率低手工编写和维护测试用例耗时耗力,难以适应接口频繁变更和快速迭代的需求。
  4. 异常和非法数据场景考虑不全对于参数异常、非法输入等非正常业务场景,测试设计往往不够系统,存在健壮性和安全性隐患。

三、项目整体流程图

四、用户使用详细流程

1.  **启动服务**:
    *   打开终端,进入项目目录,运行以下命令:
        ```bash
        python curl_parser_web.py 
        ```
    *   复制终端里显示的网址 (例如: `http://127.0.0.1:8001`)。

2.  **开始测试**:
    *   在浏览器中打开刚才复制的网址。
    *   将你的cURL命令**粘贴**到页面的输入框里。
    *   点击 **`全流程`** 按钮。

3.  **查看报告**:
    *   等待页面刷新。
    *   点击页面底部出现的 **“点击查看”** 链接,即可在新标签页看到测试报告。

五、AI提示词(Prompt)

1. 通过apifox MCP获取接口信息数据。

目的:为了获取接口元数据,接口参数等。

## 1. AI智能获取apifox的接口信息
请使用 MCP 读取apifox的接口信息并存储到api_definitons目录中,生成信息格式参考api_definitons/api_definition_sample.json,读取接口信息:api/v1/community/audit/post/list 

2. cURL命令解析

请将以下cURL命令解析为结构化API信息,输出字段包括base_url、api_path、method、headers、data。

## 1. AI智能解析与补全接口定义

- **用AI自动补全接口定义JSON里的描述、参数说明、示例数据等,提高接口文档质量。**
- **关键提示词:**
  > 根据以下接口path和参数,自动生成详细的接口描述、参数说明和示例数据,以OpenAPI JSON格式输出。

## 2. AI驱动的cURL命令智能解析

- **用AI模型解析复杂cURL命令,自动提取base_url、api_path、headers、data等,智能填到apiInfo.csv。**
- **关键提示词:**
  > 将以下cURL命令解析成结构化API信息,输出字段包含base_url、api_path、method、headers、data。

## 3. AI自动生成健壮性测试用例

- **结合接口定义,AI自动生成边界值、异常、SQL注入、XSS等多种类型测试用例,提高测试覆盖率。**
- **关键提示词:**
  > 为以下API接口自动生成健壮性测试用例,覆盖参数缺失、类型错误、边界值、格式错误、安全性等场景,以CSV格式输出。

## 4. AI辅助接口测试结果分析

- **用AI分析测试报告,自动归纳失败原因、给出修复方案建议,提高测试闭环效率。**
- **关键提示词:**
  > 分析以下API测试报告,归纳失败原因并给出修复建议。

3. 自动生成测试用例

# API测试用例生成Prompt
请给我设计一个通用的健壮性测试用例脚本如下:
#API测试用例生成脚本


请使用以下步骤为给定的API接口生成全面的测试用例:

## 第一步:获取API信息
使用Apifox MCP工具获取目标API的详细信息,包括:
- 接口地址和请求方式
- 请求参数(查询参数、请求头等)
- 响应结构
- 参数说明(是否必填、数据类型、描述等)

## 第二步:整理API文档
将获取到的API信息整理成结构化文档,内容应包括:
- 接口基础信息(URL、方法、描述)
- 请求参数表格(参数名、必填性、类型、描述)
- 响应参数结构
- 相关业务说明

## 第三步:设计健壮性测试用例
针对API的异常情况,设计健壮性测试用例,确保对**每个请求参数**覆盖以下所有异常场景:

### 参数缺失测试
- 必填参数完全缺失
- 必填参数值为空(""、null)
- 多个必填参数同时缺失

### 参数类型错误测试
- 字符串类型参数传入数值、布尔值、数组等其他类型
- 数值类型参数传入字符串、布尔值、对象等其他类型
- 布尔类型参数传入字符串、数值等其他类型
- 数组类型参数传入字符串、数值等其他类型
- 对象类型参数传入字符串、数值、数组等其他类型

### 参数范围与长度测试
- 数值参数:0值、负数、小数、超大值、最小值、最大值边界
- 字符串参数:空字符串、超长字符串、最小/最大长度边界
- 数组参数:空数组、超大数组、单元素数组
- 日期参数:无效日期、未来日期、历史日期、边界日期

### 参数格式测试
- 不符合格式要求的参数值(如邮箱、手机号、URL等)
- 特殊字符(如emoji、Unicode字符、控制字符等)
- 不同编码的参数值(如UTF-8、GBK等)

### 安全性测试
- SQL注入测试(如 ' OR 1=1 --, 等SQL片段)
- XSS测试(如 <script>alert('XSS')</script> 等脚本代码)
- 命令注入测试(如 ; rm -rf /、& ipconfig 等命令)
- CSRF测试(缺少或伪造CSRF token)
- 敏感信息测试(如尝试获取敏感数据)

### 业务规则测试【需要结合业务逻辑自定义规则】
- 违反业务唯一性约束的参数
- 不符合业务关联性要求的参数(如关联ID不存在)
- 违反业务状态流转规则的参数值
- 权限边界测试(如尝试操作无权限资源)

### 参数组合测试
- 多个参数同时出现异常情况
- 互斥参数同时提供
- 依赖参数关系测试(一个参数依赖另一个参数)

健壮性测试用例遵循CSV格式,预期结果应包含相应的错误代码和错误消息:
```csv
测试标题,请求参数,预期结果
```

## 健壮性测试结果判断标准
对于接口异常场景,满足以下任一种情况即视为测试通过:

### 状态码判断
- **4XX系列**:
  - 400 Bad Request:参数错误、请求格式错误
  - 401 Unauthorized:认证失败
  - 403 Forbidden:权限不足
  - 404 Not Found:资源未找到
  - 422 Unprocessable Entity:业务逻辑不合法

- **5XX系列**:
  - 500 Internal Server Error:服务器内部错误
  - 503 Service Unavailable:服务器过载或维护中

### 错误信息判断
- **详细描述**:响应体中应包含清晰明确的错误信息,说明异常原因
- **错误码**:返回特定错误码,便于定位问题

### 其他判断
- **安全性**:响应中不应包含服务器内部路径、数据库结构等敏感信息
- **幂等性(待拓展)**:修改操作的接口在异常场景下应保证幂等性(同样的操作做一次和做多次,结果是一样的)

## 注意事项:
1. 测试用例应确保覆盖每个参数的所有可能异常场景
2. 预期结果应基于API的实际设计,包含正确的状态码和数据结构
3. 对于模糊匹配的内容,可使用星号(*)表示
4. 测试参数应考虑实际业务约束和验证规则
5. 确保对所有输入参数都执行完整的测试矩阵

## 示例应用:
以"帖子列表接口"(api/v1/community/audit/post/list)为例,生成健壮性测试的完整测试用例集,涵盖参数缺失、类型错误、范围越界、格式不当、安全性问题等各种异常场景。

六、接口测试案例

测试接口:【帖子筛选接口】api/v1/community/audit/post/list

导入的API接口信息:

生成的测试用例:

用例执行结果:

发现问题:

  • 问题1:biz_id参数XSS攻击-请求参数:{bizid=“<img src=x onerror=alert(1)>”},预期:这种情况应该报“400 Bad Request - 参数biz_id包含非法字符实际:展示了部分帖子内容
  • 问题2: 结束日期早于开始日期-请求参数:{"comment_start_time": "2023-06-01", "comment_end_time": "2023-05-01"}预期:响应信息应该展示:结束日期不得早于开始日期的提示实际:展示了部分帖子内容

七、AI赋能价值总结

项目优点:AI在测试流程中的应用与简化

1. AI辅助接口定义与用例生成

  • 接口信息补全:能从cURL命令或部分JSON中提取信息,并自动补全,生成结构化的接口定义,这可以减少手动编写文档的工作量。
  • 测试用例生成:能够基于接口定义,自动创建包括异常值和参数值缺失相关的测试用例,这有助于提高测试的覆盖范围。
  • 测试结果分析:规划了AI分析测试报告的功能,旨在帮助归纳失败原因和提供修复建议,有潜力加快问题定位和修复的过程。

2. 简化的Web操作界面

  • 一站式操作:项目通过curl_parser_web.py提供了一个Web界面,将多个后台步骤(解析、生成、执行)整合起来。
  • 操作简单:用户通过在页面上粘贴信息和点击按钮,就可以启动整个测试流程,降低了工具的使用难度。

目前不足之处与后续改进

1. 从用户操作的角度来看,虽然流程简化了,但在控制性和反馈上还有提升空间

2. 对复杂业务的理解有限:AI擅长生成通用的、模式化的测试(如边界值、常规安全漏洞),但对于需要深度理解特定业务流程的测试场景,AI可能无能为力,例如,一个涉及多个步骤、有复杂状态流转的交易流程,AI很难仅凭一个接口定义就生成有意义的端到端测试用例。

展示评论