题目
设计用户登录接口的测试用例
信息
- 类型:问答
- 难度:⭐⭐
考点
接口测试设计,边界值分析,异常处理,安全测试
快速回答
核心测试用例设计:
- 正向场景:有效用户名密码返回200和token
- 边界值:超长用户名/密码、空字段
- 异常输入:SQL注入、XSS攻击字符串
- 安全验证:密码加密传输、错误次数限制
- 性能检查:响应时间<500ms
一、测试设计原理
接口测试需覆盖功能、边界、异常、安全四个维度:
- 功能验证:基础业务逻辑实现
- 边界分析:输入值极限情况处理
- 异常处理:非法输入和系统错误响应
- 安全防护:敏感数据保护和攻击防御
二、核心测试用例(示例)
| 类型 | 输入数据 | 预期响应 |
|---|---|---|
| 正向用例 | {username: "validUser", password: "P@ssw0rd"} | HTTP 200, 返回有效token |
| 边界值 | username: 256字符超长字符串 | HTTP 400 + 长度错误提示 |
| 异常输入 | password: "' OR 1=1--" | HTTP 403 + 安全拦截提示 |
| 安全验证 | 连续5次错误密码 | 账号锁定 + HTTP 429 |
三、代码示例(Python requests)
# 边界值测试示例
import requests
# 超长用户名测试
long_username = 'A' * 256
resp = requests.post('https://api.example.com/login',
json={'username': long_username, 'password': 'test'})
# 验证响应
assert resp.status_code == 400
assert 'exceeds maximum length' in resp.json()['message']
# SQL注入测试
sql_injection_payload = {"username": "admin'", "password": "' OR 1=1--"}
resp = requests.post('https://api.example.com/login', json=sql_injection_payload)
assert resp.status_code == 403四、最佳实践
- 参数化测试:使用CSV或JSON管理测试数据
- 断言层次:验证状态码 → 响应结构 → 具体字段值
- 环境隔离:测试环境配置独立数据库
- 敏感数据:密码必须加密传输(HTTPS+BCrypt)
五、常见错误
- ❌ 仅验证200成功场景
- ❌ 忽略响应时间验证
- ❌ 硬编码测试数据导致维护困难
- ❌ 未清理测试数据库影响结果
六、扩展知识
- OWASP安全测试:检查JWT令牌时效性、刷新机制
- 性能测试:模拟100并发登录的TPS指标
- 自动化集成:在CI/CD流水线中加入接口测试阶段