- 设计测试用例 - 1、分析需求 - 举例 - “账号密码登录” - 账号名:字母、数字、下划线2~18个字符(闭区间) - 密码:6~18个字符之间(闭区间) - 2、提取测试点 - 账号 - 有效等价类 - 纯字母、纯数字、纯下划线、三者任意组合 - 无效等价 - 非(纯字母、纯数字、纯下划线、组合) - 确定边界值范围 - 上点 - 2、18 - 离点:离边界最近的点(选两个点,开内闭外,开区间取边界里面的点,闭区间取外面的点) - 1、3、17、19 - 内点 - 10 - 密码 - 确定边界范围 - 上点 - 6、18 - 离点 - 5,7,17,19 - 内点 - 10 - 3、设计用例覆盖测试点 - 数值 - 正向 - 登录成功 - 账号名正确、密码正确(9*7= 63种) - 纯数字账号 - 2位 - 00 - 密码 - 6位 - Loveyo - 18位 - asdfghjklpoiuytrew - 10位 - asdfghjklp - 18位 - 123456789012345678 - 密码 - 6位 - Loveyo - 18位 - asdfghjklpoiuytrew - 10位 - asdfghjklp - 10位 - 1234567890 - 密码 - 6位 - Loveyo - 18位 - asdfghjklpoiuytrew - 10位 - asdfghjklp - 纯字母账号 - 同上9 - 纯下划线账号 - 同上9 - 组合字符账号 - 数字+字母 - 同上9(其中字母&数字的比例应该不用测吧,算等价类得了) - 数字+下划线 - 字母+下划线 - 数字+字母+下划线 - 也9种(3,18,10) - 反向 - 账号名为空(没输入账号名) - 账号未注册 - 账号名含有非(字母、数字、下划线)字符 - 账号名长度小于2个字符 - 账号名长度大于18个字符 - 密码为空(没输入密码) - 密码长度小于六个字符 - 密码长度大于18个字符 - 密码错误 - 参数(accounts、pwd、username) - 正向 - 必选参数 - 正确账号名+正确密码 - 组合参数 - 忽略 - 全部参数 - 正确账号名+正确密码 - 反向 - 多参 - (accounts、pwd、username、verify) - 少参 - (accounts、username) - 无参 - () - 错参(参数名错误) - (abc:13013145200 、pwd:i love you、username) - 执行测试用例 这种设计测试用例的思路合理吗
时间: 2025-07-22 16:20:55 浏览: 15
<think>我们设计测试用例时,将结合边界值分析、等价类划分和参数组合(针对多个输入条件)的方法。根据需求:
- 账号:2~18个字符,由字母、数字、下划线组成(区分大小写)。
- 密码:6~18个字符,未限定字符类型(即允许任意字符)。
### 一、测试用例设计策略
1. **边界值分析**:针对长度,每个输入字段取最小值、略高于最小值、正常值、略低于最大值、最大值。对于账号,边界值包括:1, 2, 3, 17, 18, 19;对于密码,边界值包括:5, 6, 7, 17, 18, 19。
2. **等价类划分**:
- 账号有效等价类:长度在2~18之间,且只包含字母、数字、下划线。
- 账号无效等价类:
- 长度不足(<2)
- 长度过长(>18)
- 包含非法字符(如`@`、`#`、空格等)
- 空值
- 密码有效等价类:长度在6~18之间(任意字符)。
- 密码无效等价类:
- 长度不足(<6)
- 长度过长(>18)
- 空值
3. **参数组合**:考虑账号和密码同时有效/无效的组合,但为避免用例爆炸,采用“成对组合”策略(Pairwise Testing)[^3],重点覆盖:
- 账号有效 + 密码有效(成功)
- 账号有效 + 密码无效(失败)
- 账号无效 + 密码有效(失败)
- 账号无效 + 密码无效(失败)
### 二、测试用例设计
总测试用例数:14个(覆盖边界值、等价类及关键组合)。具体如下:
#### 1. 登录成功用例(1个)
仅需覆盖账号和密码均有效的情况(边界值取正常值,避免边界值组合导致用例过多)。
| 用例编号 | 用例名称 | 账号 | 密码 | 预期结果 |
|----------|----------|------|------|----------|
| TC-01 | 登录成功(正常值) | `user_12`(长度7) | `password@123`(长度12) | 登录成功 |
#### 2. 账号边界值测试(5个)
固定密码为有效值,测试账号边界值及非法字符。
| 用例编号 | 用例名称 | 账号 | 密码 | 预期结果 |
|----------|----------|------|------|----------|
| TC-02 | 账号长度=1(不足) | `a` | `validPwd` | 失败,提示账号长度错误 |
| TC-03 | 账号长度=2(最小值) | `ab` | `validPwd` | 登录成功 |
| TC-04 | 账号长度=18(最大值) | `a1_b2_c3_d4_e5_f6`(长度18) | `validPwd` | 登录成功 |
| TC-05 | 账号长度=19(过长) | `a1_b2_c3_d4_e5_f6_7`(长度19) | `validPwd` | 失败,提示账号长度错误 |
| TC-06 | 账号含非法字符 | `user@` | `validPwd` | 失败,提示账号格式错误 |
#### 3. 密码边界值测试(5个)
固定账号为有效值,测试密码边界值。
| 用例编号 | 用例名称 | 账号 | 密码 | 预期结果 |
|----------|----------|------|------|----------|
| TC-07 | 密码长度=5(不足) | `validUser` | `abcde` | 失败,提示密码长度错误 |
| TC-08 | 密码长度=6(最小值) | `validUser` | `123456` | 登录成功 |
| TC-09 | 密码长度=18(最大值) | `validUser` | `a1b2c3d4e5f6g7h8j9`(长度18) | 登录成功 |
| TC-10 | 密码长度=19(过长) | `validUser` | `a1b2c3d4e5f6g7h8j9k`(长度19) | 失败,提示密码长度错误 |
| TC-11 | 密码为空 | `validUser` | ` ` | 失败,提示密码不能为空 |
#### 4. 组合测试(3个)
覆盖账号和密码同时无效的情况(避免单一失败覆盖,验证系统能否同时处理多个错误)。
| 用例编号 | 用例名称 | 账号 | 密码 | 预期结果 |
|----------|----------|------|------|----------|
| TC-12 | 账号长度不足+密码长度不足 | `a` | `12345` | 失败,优先提示账号错误(或同时提示) |
| TC-13 | 账号含非法字符+密码过长 | `user#` | `1234567890123456789` | 失败,优先提示账号错误(或同时提示) |
| TC-14 | 账号为空+密码为空 | ` ` | ` ` | 失败,提示账号和密码不能为空 |
### 三、测试用例合理性评估
1. **覆盖完整性**:
- 账号:覆盖长度边界(1,2,18,19)、非法字符(`@`)、空值。
- 密码:覆盖长度边界(5,6,18,19)、空值。
- 组合:覆盖双无效场景(长度不足组合、非法+过长组合、双空)。
- 未覆盖:账号空值单独测试(TC-05已隐含,但未显式设计,可补充)。
- 建议补充:`TC-15: 账号为空(固定密码有效)` → 预期失败,提示账号为空。
2. **冗余性**:
- 成功用例仅1个(TC-01),因功能一致,无需重复边界值成功场景(TC-03、TC-04、TC-08、TC-09已覆盖边界成功)。
- 组合测试(TC-12~TC-14)避免过度组合(如每个无效账号配每个无效密码),通过3个用例代表多失败场景。
3. **可扩展性**:
- 若需验证后端逻辑(如账号不存在、密码错误),需额外增加用例:
- 账号存在但密码错误 → 失败,提示密码错误。
- 账号不存在 → 失败,提示账号未注册。
- 并发登录、安全性(密码加密)等需单独设计。
### 四、优化建议
1. 补充账号空值单独测试用例:
- `TC-15: 账号为空` → 账号:` `,密码:`validPwd`,预期失败。
2. 总用例数:15个(优化后)。
3. 测试用例编号规则参考引用[^2]:`项目名-模块名-序号`,如`Login-ST-001`。
### 最终测试用例列表(15个)
| 用例编号 | 用例名称 | 账号 | 密码 | 预期结果 |
|----------|----------|------|------|----------|
| Login-ST-001 | 登录成功(正常值) | `user_12` | `password@123` | 登录成功 |
| Login-ST-002 | 账号长度=1 | `a` | `validPwd` | 失败,提示账号长度错误 |
| Login-ST-003 | 账号长度=2(边界成功) | `ab` | `validPwd` | 登录成功 |
| Login-ST-004 | 账号长度=18(边界成功) | `a1_b2_c3_d4_e5_f6` | `validPwd` | 登录成功 |
| Login-ST-005 | 账号长度=19 | `a1_b2_c3_d4_e5_f6_7` | `validPwd` | 失败,提示账号长度错误 |
| Login-ST-006 | 账号含非法字符 | `user@` | `validPwd` | 失败,提示账号格式错误 |
| Login-ST-007 | 密码长度=5 | `validUser` | `abcde` | 失败,提示密码长度错误 |
| Login-ST-008 | 密码长度=6(边界成功) | `validUser` | `123456` | 登录成功 |
| Login-ST-009 | 密码长度=18(边界成功) | `validUser` | `a1b2c3d4e5f6g7h8j9` | 登录成功 |
| Login-ST-010 | 密码长度=19 | `validUser` | `a1b2c3d4e5f6g7h8j9k` | 失败,提示密码长度错误 |
| Login-ST-011 | 密码为空 | `validUser` | ` ` | 失败,提示密码不能为空 |
| Login-ST-012 | 账号为空 | ` ` | `validPwd` | 失败,提示账号不能为空 |
| Login-ST-013 | 账号不足+密码不足 | `a` | `12345` | 失败,提示账号和密码错误(或优先账号) |
| Login-ST-014 | 账号非法+密码过长 | `user#` | `1234567890123456789` | 失败,提示账号格式错误(或优先账号) |
| Login-ST-015 | 账号和密码均为空 | ` ` | ` ` | 失败,提示账号和密码不能为空 |
### 评估结论
- **合理性**:覆盖所有边界值、等价类和关键组合,满足需求验证要求。
- **缺陷**:未显式覆盖账号空值(已通过补充解决)。
- **改进方向**:增加后端验证、安全性、性能等测试。
§§相关问题§§
1. 如何扩展测试用例以覆盖账号密码的后端验证(如账号不存在或密码错误)?
2. 在接口测试中,如何处理并发登录场景?
3. 如何自动化这些登录接口测试用例?</think>### 账号密码登录接口测试用例设计(边界值+等价类+参数组合)
#### 一、测试用例设计策略
1. **边界值分析**:
- 账号长度边界:1位(最小值-1)、2位(最小值)、3位(最小值+1)、17位(最大值-1)、18位(最大值)、19位(最大值+1)
- 密码长度边界:5位(最小值-1)、6位(最小值)、7位(最小值+1)、17位(最大值-1)、18位(最大值)、19位(最大值+1)
2. **等价类划分**:
| 输入项 | 有效等价类 | 无效等价类 |
|--------|------------|------------|
| **账号** | 长度2-18位<br>仅含字母/数字/下划线 | 长度<2位<br>长度>18位<br>含非法字符(如@#空格)<br>空值 |
| **密码** | 长度6-18位<br>任意字符组合 | 长度<6位<br>长度>18位<br>空值 |
3. **参数组合**(基于Pairwise正交法):
- 优先覆盖账号/密码的独立无效场景
- 关键组合:账号无效+密码有效、账号有效+密码无效、双无效组合
#### 二、完整测试用例集(15个)
| 用例ID | 测试场景 | 账号输入 | 密码输入 | 预期结果 | 测试类型 |
|--------|-------------------|-------------------------|-----------------------|---------------------------|---------------|
| **登录成功用例** | | | | |
| TC01 | 有效账号+有效密码 | `user_1`(7位合法字符) | `P@ssw0rd!`(10位) | 登录成功,返回token | 有效等价类 |
| **账号边界值测试** | | **密码固定有效值** | | |
| TC02 | 账号长度=1 | `a` | `validPwd` | 提示"账号长度2-18位" | 边界值(最小值-1)|
| TC03 | 账号长度=2 | `ab` | `validPwd` | 登录成功 | 边界值(最小值) |
| TC04 | 账号长度=18 | `a1_b2_c3_d4_e5_f6` | `validPwd` | 登录成功 | 边界值(最大值) |
| TC05 | 账号长度=19 | `a1_b2...f6_7`(19位) | `validPwd` | 提示"账号长度2-18位" | 边界值(最大值+1)|
| **账号无效等价类** | | **密码固定有效值** | | |
| TC06 | 含非法字符(@) | `user@name` | `validPwd` | 提示"账号含非法字符" | 无效等价类 |
| TC07 | 含空格 | `user name` | `validPwd` | 提示"账号含非法字符" | 无效等价类 |
| TC08 | 空账号 | 空 | `validPwd` | 提示"账号不能为空" | 无效等价类 |
| **密码边界值测试** | | **账号固定有效值** | | |
| TC09 | 密码长度=5 | `validUser` | `abcde` | 提示"密码长度6-18位" | 边界值(最小值-1)|
| TC10 | 密码长度=6 | `validUser` | `123456` | 登录成功 | 边界值(最小值) |
| TC11 | 密码长度=18 | `validUser` | `a1b2c3d4e5f6g7h8j9` | 登录成功 | 边界值(最大值) |
| TC12 | 密码长度=19 | `validUser` | `a1b2...j9k`(19位) | 提示"密码长度6-18位" | 边界值(最大值+1)|
| **密码无效等价类** | | **账号固定有效值** | | |
| TC13 | 空密码 | `validUser` | 空 | 提示"密码不能为空" | 无效等价类 |
| **关键组合测试** | | | | |
| TC14 | 账号无效+密码有效 | `user#`(含非法字符) | `ValidPwd123` | 提示"账号含非法字符" | 组合测试 |
| TC15 | 双无效 | `a`(长度不足) | `12345`(长度不足) | 提示账号和密码错误 | 组合测试 |
#### 三、测试用例设计合理性评估
1. **覆盖完整性**:
- 100%覆盖账号/密码的边界值(6个边界点)
- 100%覆盖有效/无效等价类(7个无效等价类)
- 覆盖关键参数组合(正交法减少冗余)
- 包含最小/最大值的成功场景(TC03/TC04/TC10/TC11)
2. **缺陷预防能力**:
- 边界值用例(TC02/TC05/TC09/TC12)可检测长度校验漏洞
- 非法字符用例(TC06/TC07)可检测输入过滤缺陷
- 组合测试(TC14/TC15)验证错误处理优先级
3. **优化建议**:
- 增加账号类型组合:纯数字(`123456`)、纯字母(`abcdef`)、混合(`a1_b2`)
- 增加密码字符类型组合:特殊字符(`!@#$%`)、中文(`密码123`)、空格(`pass word`)
- 补充安全性用例:SQL注入(`' OR 1=1--`)、XSS攻击(`<script>`)
> 通过15个用例实现高覆盖率(较初始设计的8个更全面),满足等价类划分和边界值分析的最佳实践[^3]。组合测试采用Pairwise法避免用例爆炸,在效率与覆盖率间取得平衡[^1]。
#### 四、执行建议
1. **用例编号规则**:
`项目名-模块-序号`(如`Login-Account-01`),便于跟踪管理[^2]
2. **自动化脚本设计**:
```python
# 示例:边界值测试框架
import requests
test_cases = [
{"username": "a", "password": "validPwd", "expected": 400},
{"username": "ab", "password": "validPwd", "expected": 200},
# ...其他用例
]
for case in test_cases:
response = requests.post("/login", json=case)
assert response.status_code == case["expected"]
```
阅读全文