前言
边界条件是测试中最容易漏的部分。很多线上问题都是因为没有测试边界:输入为空、超长字符串、特殊字符、数值越界。这篇给你一份完整的边界条件检查清单。
一、边界条件检查清单
| 边界类型 | 检查项 | 测试用例示例 |
|---|---|---|
| 数据为空 | null、空字符串、空数组 | 输入为空时是否提示"必填" |
| 长度超限 | 最小长度、最大长度 | 输入1001个字符(限制1000) |
| 特殊字符 | SQL注入、XSS、emoji | 输入 |
| 数值越界 | 最小值、最大值、负数 | 输入-1(限制≥0) |
| 格式错误 | 邮箱、手机号、日期 | 输入abc(期望邮箱格式) |
| 重复数据 | 唯一性校验 | 输入已存在的用户名 |
二、6类边界条件详解
1. 数据为空
测试用例:
- 输入null
- 输入空字符串""
- 输入空格" "
- 输入空数组[]
- 输入空对象{}
期望结果:
- 必填字段:提示"请填写XXX"
- 选填字段:允许为空,使用默认值
2. 长度超限
测试用例:
- 输入0个字符(最小长度1)
- 输入1个字符(最小长度1,边界值)
- 输入999个字符(最大长度1000,边界值-1)
- 输入1000个字符(最大长度1000,边界值)
- 输入1001个字符(最大长度1000,边界值+1)
期望结果:
- 小于最小长度:提示"至少输入N个字符"
- 大于最大长度:提示"最多输入N个字符"或自动截断
3. 特殊字符
测试用例:
- SQL注入:' OR '1'='1
- XSS攻击:
- emoji:😀🎉
- 换行符:\n\r
- 制表符:\t
- 单引号:'
- 双引号:"
- 反斜杠:\
期望结果:
- 转义处理或过滤
- 提示"包含非法字符"
4. 数值越界
测试用例:
- 输入-1(限制≥0)
- 输入0(限制≥0,边界值)
- 输入999(限制≤1000,边界值-1)
- 输入1000(限制≤1000,边界值)
- 输入1001(限制≤1000,边界值+1)
- 输入小数(期望整数)
- 输入非常大的数(如2^63)
期望结果:
- 小于最小值:提示"不能小于N"
- 大于最大值:提示"不能大于N"
- 非整数:提示"请输入整数"
5. 格式错误
测试用例:
邮箱:
- abc(缺少@)
- abc@(缺少域名)
- @qq.com(缺少用户名)
- abc@qq(缺少顶级域名)
手机号:
- 12345(长度不够)
- 12345678901(11位,正确)
- 123456789012(12位,超长)
- 1234567890a(包含字母)
日期:
- 2023-02-30(2月没有30号)
- 2023-13-01(没有13月)
- 2023/02/01(格式错误,期望YYYY-MM-DD)
期望结果:
- 提示"格式错误,请输入正确的XXX"
6. 重复数据
测试用例:
- 输入已存在的用户名
- 输入已存在的手机号
- 输入已存在的订单号
期望结果:
- 提示"XXX已存在"
三、测试用例模板与最佳实践
标准测试用例模板
功能点:用户注册
字段:用户名
字段类型:字符串
字段规则:必填,3-20个字符,只能包含字母、数字、下划线
边界条件测试用例:
| 用例编号 | 测试项 | 输入值 | 期望结果 | 优先级 |
|---------|-------|-------|---------|-------|
| TC001 | 为空 | "" | 提示"请输入用户名" | P0 |
| TC002 | 最小长度-1 | "ab" | 提示"用户名至少3个字符" | P0 |
| TC003 | 最小长度 | "abc" | 通过 | P1 |
| TC004 | 最大长度 | "a"*20 | 通过 | P1 |
| TC005 | 最大长度+1 | "a"*21 | 提示"用户名最多20个字符" | P0 |
| TC006 | 特殊字符 | "abc<>" | 提示"用户名只能包含字母数字下划线" | P1 |
| TC007 | 重复 | "admin" | 提示"用户名已存在" | P0 |
| TC008 | SQL注入 | "admin' OR '1'='1" | 提示"用户名只能包含字母数字下划线" | P0 |
| TC009 | XSS攻击 | "" | 提示"用户名只能包含字母数字下划线" | P0 |
| TC010 | emoji | "用户😀" | 提示"用户名只能包含字母数字下划线" | P2 |
测试数据准备:
- 已存在的用户名:admin、test、user
- 特殊字符测试集:< > ' " \ / & | { } [ ] ( ) * + ? . ^ $
完整测试用例示例
示例1:用户注册(用户名)
功能点:用户注册
字段:用户名
字段类型:字符串
字段规则:必填,3-20个字符,只能包含字母、数字、下划线
【数据为空测试】
| 用例编号 | 测试项 | 输入值 | 期望结果 |
|---------|-------|-------|---------|
| TC001 | null | null | 提示"请输入用户名" |
| TC002 | 空字符串 | "" | 提示"请输入用户名" |
| TC003 | 空格 | " " | 提示"请输入用户名"(或自动去除空格) |
【长度测试】
| 用例编号 | 测试项 | 输入值 | 期望结果 |
|---------|-------|-------|---------|
| TC004 | 最小长度-1 | "ab" | 提示"用户名至少3个字符" |
| TC005 | 最小长度 | "abc" | 通过 |
| TC006 | 最大长度 | "a"*20 | 通过 |
| TC007 | 最大长度+1 | "a"*21 | 提示"用户名最多20个字符" |
【特殊字符测试】
| 用例编号 | 测试项 | 输入值 | 期望结果 |
|---------|-------|-------|---------|
| TC008 | SQL注入 | "admin' OR '1'='1" | 提示"用户名只能包含字母数字下划线" |
| TC009 | XSS攻击 | "" | 提示"用户名只能包含字母数字下划线" |
| TC010 | emoji | "用户😀" | 提示"用户名只能包含字母数字下划线" |
| TC011 | 换行符 | "abc\n" | 提示"用户名只能包含字母数字下划线" |
【重复数据测试】
| 用例编号 | 测试项 | 输入值 | 期望结果 |
|---------|-------|-------|---------|
| TC012 | 已存在 | "admin" | 提示"用户名已存在" |
示例2:商品价格(数值)
功能点:商品管理
字段:价格
字段类型:数值(浮点数)
字段规则:必填,≥0,≤999999.99,保留2位小数
【数据为空测试】
| 用例编号 | 测试项 | 输入值 | 期望结果 |
|---------|-------|-------|---------|
| TC001 | null | null | 提示"请输入价格" |
| TC002 | 空字符串 | "" | 提示"请输入价格" |
【数值越界测试】
| 用例编号 | 测试项 | 输入值 | 期望结果 |
|---------|-------|-------|---------|
| TC003 | 负数 | -1 | 提示"价格不能小于0" |
| TC004 | 最小值 | 0 | 通过 |
| TC005 | 最大值 | 999999.99 | 通过 |
| TC006 | 最大值+1 | 1000000 | 提示"价格不能大于999999.99" |
| TC007 | 非常大的数 | 999999999 | 提示"价格不能大于999999.99" |
【格式测试】
| 用例编号 | 测试项 | 输入值 | 期望结果 |
|---------|-------|-------|---------|
| TC008 | 非数字 | "abc" | 提示"请输入有效的价格" |
| TC009 | 小数位数过多 | 99.999 | 提示"价格最多保留2位小数"或自动四舍五入 |
| TC010 | 科学计数法 | 1e10 | 提示"请输入有效的价格" |
最佳实践
- 边界值测试:
- 测试边界值-1、边界值、边界值+1
- 例如:最大长度100,测试99、100、101
- 特殊字符测试:
- 优先测试SQL注入、XSS攻击、emoji、换行符
- 其他特殊字符根据业务场景选择
- 数据为空测试:
- 测试null、空字符串、空格、空数组、空对象
- 明确必填字段和选填字段的处理方式
- 格式错误测试:
- 测试邮箱、手机号、日期等格式验证
- 测试各种格式错误的情况
- 重复数据测试:
- 测试唯一性校验(用户名、手机号、邮箱等)
- 测试重复数据的处理方式
- 测试优先级:
- P0:数据为空、长度超限、数值越界、SQL注入、XSS攻击
- P1:格式错误、重复数据、特殊字符
- P2:emoji、换行符、其他边界情况
实现检查清单
-
\] 数据为空测试(null、空字符串、空格)
-
\] 特殊字符测试(SQL注入、XSS攻击、emoji、换行符)
-
\] 格式错误测试(邮箱、手机号、日期等)
-
\] 错误提示清晰(提示信息明确,用户能理解)
四、常见错误与陷阱
错误1:只测试正常情况,忽略边界情况
**问题:**只测试正常输入,没有测试边界情况,导致线上问题。
❌ 错误示例:
只测试:用户名="admin"(正常情况)
问题:没有测试空字符串、超长字符串、特殊字符,导致线上问题
✅ 正确示例:
测试:空字符串、最小长度、最大长度、超长字符串、特殊字符、重复数据
错误2:边界值测试不完整
**问题:**只测试边界值,没有测试边界值-1和边界值+1。
❌ 错误示例:
只测试:最大长度100(边界值)
问题:没有测试99(边界值-1)和101(边界值+1),可能遗漏边界问题
✅ 正确示例:
测试:99(边界值-1)、100(边界值)、101(边界值+1)
错误3:特殊字符测试不全面
**问题:**只测试部分特殊字符,没有测试SQL注入、XSS攻击等安全相关字符。
❌ 错误示例:
只测试:emoji、换行符
问题:没有测试SQL注入、XSS攻击,导致安全漏洞
✅ 正确示例:
优先测试:SQL注入、XSS攻击、emoji、换行符、单引号、双引号、反斜杠
错误4:错误提示不清晰
**问题:**错误提示信息不清晰,用户无法理解问题所在。
❌ 错误示例:
提示:"输入错误"
问题:用户不知道哪里错了,如何修改
✅ 正确示例:
提示:"用户名至少3个字符,最多20个字符,只能包含字母、数字、下划线"
错误5:数据为空处理不一致
**问题:**null、空字符串、空格的处理方式不一致,导致用户体验差。
❌ 错误示例:
null → 提示"请输入"
空字符串 → 提示"请输入"
空格 → 通过(不一致)
✅ 正确示例:
null → 提示"请输入"
空字符串 → 提示"请输入"
空格 → 提示"请输入"(或自动去除空格)
错误6:格式验证不严格
**问题:**格式验证不严格,允许无效数据通过。
❌ 错误示例:
邮箱验证:只检查是否包含@
问题:允许"abc@"、"@qq.com"等无效邮箱通过
✅ 正确示例:
邮箱验证:使用正则表达式验证完整格式
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
五、FAQ
Q1:边界值要测试几个?
**答:**建议测试边界值-1、边界值、边界值+1。例如最大长度100,测试99、100、101。
测试策略:
- **边界值-1:**测试刚好不满足条件的情况(应该失败)
- **边界值:**测试刚好满足条件的情况(应该通过)
- **边界值+1:**测试刚好超过条件的情况(应该失败)
示例:
- 最大长度100:测试99(通过)、100(通过)、101(失败)
- 最小值0:测试-1(失败)、0(通过)、1(通过)
Q2:特殊字符都要测试吗?
**答:**建议优先测试:SQL注入、XSS攻击、emoji、换行符。其他根据业务场景选择。
测试优先级:
- **P0(必须测试):**SQL注入、XSS攻击
- **P1(建议测试):**emoji、换行符、单引号、双引号、反斜杠
- **P2(可选测试):**其他特殊字符
测试用例:
SQL注入:
' OR '1'='1
'; DROP TABLE users;--
XSS攻击:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
emoji:
😀🎉
用户😀
换行符:
abc\n
abc\r\n
Q3:数据为空怎么处理?
**答:**根据字段类型和业务需求处理:
- **必填字段:**null、空字符串、空格都应该提示"请输入XXX"
- **选填字段:**允许为空,使用默认值或空值
- **空格处理:**可以自动去除空格,或提示"请输入XXX"
Q4:格式验证怎么实现?
**答:**使用正则表达式或验证库实现格式验证。
常见格式验证:
- 邮箱:`/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/`
- 手机号:`/^1[3-9]\d{9}$/`(中国大陆)
- 日期:`/^\d{4}-\d{2}-\d{2}$/`(YYYY-MM-DD)
- 身份证:`/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/`
Q5:如何防止SQL注入和XSS攻击?
**答:**使用参数化查询和输出转义。
SQL注入防护:
- 使用参数化查询(PreparedStatement)
- 不要拼接SQL语句
- 对用户输入进行验证和过滤
XSS攻击防护:
- 对输出进行HTML转义(如:`<` → `<`)
- 使用CSP(Content Security Policy)
- 对用户输入进行验证和过滤
Q6:测试用例如何管理?
**答:**使用测试用例管理工具或Excel表格管理。
测试用例管理工具:
- TestRail、Jira、TestLink等
- Excel表格(适合小团队)
测试用例格式:
- 用例编号、测试项、输入值、期望结果、优先级、执行结果
- 按功能模块、字段类型、边界类型分类