eagleye

POST /api/v1/audit-logs/ 400错误诊断:Apifox测试方案

POST /api/v1/audit-logs/ 400错误诊断:Apifox测试方案

一、测试准备

1. 环境配置

  • 安装Apifox:从官方下载地址获取最新版本
  • 服务保障:确保后端服务运行于127.0.0.1:8000
  • 令牌准备:通过登录API获取有效Bearer Token

2. 测试目标

定位POST /api/v1/audit-logs/接口400错误根源,判断是前端数据格式错误还是后端API实现缺陷

二、核心测试用例设计

测试用例1:基础功能验证(必填字段完整性)

请求配置

POST http://127.0.0.1:8000/api/v1/audit-logs/

Content-Type: application/json

Authorization: Bearer <valid_token>

测试数据(符合接口规范的最小数据集)

[

{

"action": "login_success",

"timestamp": "2025-07-17T08:32:45.123Z",

"user_id": "user_12345",

"user_name": "john.doe",

"session_id": "sess_67890",

"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/91.0.4472.124 Safari/537.36",

"ip_address": "192.168.1.100",

"device_info": {

"platform": "web",

"app_version": "1.2.3"

},

"metadata": {

"login_method": "password"

}

}

]

预期结果

  • HTTP 201 Created
  • 响应体返回创建成功的日志ID列表

测试用例2:边界值测试(数据长度/格式极限)

测试数据(包含极端值与特殊格式)

[

{

"action": "a".repeat(255), // 字符串最大长度测试

"timestamp": "2025-07-17T00:00:00.000Z",

"user_id": "", // 空字符串

"user_name": null, // null值

"session_id": "session-".repeat(50), // 超长字符串(500字符)

"ip_address": "2001:0db8:85a3:0000:0000:8a2e:0370:7334", // IPv6格式

"device_info": {

"screen_resolution": "4096x2160", // 4K分辨率

"language": "zh-Hans-CN" // 多语言编码

},

"metadata": {

"nested_object": {"level1": {"level2": {"value": 42}}}, // 深层嵌套对象

"special_chars": "~!@#$%^&*()_+{}|:\"<>?`-=[]\\;',./" // 特殊字符

}

}

]

预期结果

  • HTTP 200/201(后端应兼容合法边界值)
  • 响应体无错误提示,数据正常入库

测试用例3:错误格式测试(验证后端校验逻辑)

子用例

错误类型

测试数据示例

预期响应

3.1

缺少必填字段

{"timestamp": "2025-07-17T08:32:45Z", "ip_address": "192.168.1.100"}

400 + 字段缺失提示

3.2

时间格式错误

"timestamp": "2025/07/17 08:32:45"(非ISO格式)

400 + 时间格式错误

3.3

数据类型错误

"device_info": "invalid_string"(应为对象)

400 + 类型不匹配

测试用例4:批量提交测试(性能与批量处理能力)

测试数据

提交包含10条日志的数组(示例为2条,实际需补充至10条):

[

{

"action": "page_view",

"timestamp": "2025-07-17T09:15:22.456Z",

"user_agent": "Mozilla/5.0...",

"ip_address": "192.168.1.100",

"metadata": {"page_url": "/dashboard"}

},

{

"action": "button_click",

"timestamp": "2025-07-17T09:15:25.789Z",

"user_agent": "Mozilla/5.0...",

"ip_address": "192.168.1.100",

"metadata": {"button_id": "submit_btn"}

}

]

预期结果

  • HTTP 200/201
  • 响应体返回所有日志ID,后端无超时或内存溢出

测试用例5:安全头部与认证测试

测试场景

请求配置差异

预期结果

自定义安全头部

添加X-Audit-Encrypted: trueX-Idempotency-Key: test_key_12345

200/201(头部被正确解析)

令牌过期/无效

Authorization: Bearer expired_token

401 Unauthorized(错误信息明确)

三、问题诊断流程

1. 分步骤测试与定位

1. 执行测试用例1:验证基础功能是否正常

o ✅ 成功 → 排除核心字段缺失问题

o ❌ 失败 → 检查路由配置、令牌有效性、必填字段定义

2. 执行测试用例3:对比错误响应与前端数据

若错误提示与测试用例3一致 → 前端数据格式错误

若错误提示不明确 → 后端校验逻辑需优化

3. 前端数据对比

在前端代码中添加调试日志,对比实际发送数据与Apifox测试数据:

console.debug('[AUDIT] 发送数据:', normalizedLogs);

console.debug('[AUDIT] 请求头:', customConfig.headers);

2. 常见400错误解决方案

错误原因

解决方案

时间格式非ISO标准

前端使用new Date().toISOString()生成标准时间

字段命名不一致(如user_idvsuserId)

Apifox测试用例1的字段名为基准统一命名

嵌套对象类型错误

确保device_info和metadata为JSON对象,而非字符串或数组

批量提交超限

减少单次提交日志数量(建议≤20条/批),或联系后端调整批量限制

四、测试用例管理

1. 保存测试集合:在Apifox中创建“审计日志API测试集”,保存所有用例

2. 回归测试:后端修复后,通过Apifox批量执行测试用例验证修复效果

3. 参数化测试:将令牌、IP等动态值设置为环境变量,提高用例复用性

通过以上测试方案,可系统定位400错误根源,覆盖数据格式、边界值、安全校验等关键维度,同时为前后端协作提供明确的验证依据。

 

posted on 2025-07-18 10:55  GoGrid  阅读(51)  评论(0)    收藏  举报

导航