前言
边界条件是测试中最容易漏的部分。很多线上问题都是因为没有测试边界:输入为空、超长字符串、特殊字符、数值越界。这篇给你一份完整的边界条件检查清单。
一、边界条件检查清单
| 边界类型 | 检查项 | 测试用例示例 |
|---|---|---|
| 数据为空 | 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、空字符串、空格)
- [ ] 长度测试(最小长度-1、最小长度、最大长度、最大长度+1)
- [ ] 特殊字符测试(SQL注入、XSS攻击、emoji、换行符)
- [ ] 数值越界测试(负数、最小值、最大值、最大值+1)
- [ ] 格式错误测试(邮箱、手机号、日期等)
- [ ] 重复数据测试(唯一性校验)
- [ ] 错误提示清晰(提示信息明确,用户能理解)
- [ ] 测试用例覆盖完整(所有边界情况都已测试)
四、常见错误与陷阱
错误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\nQ3:数据为空怎么处理?
答:根据字段类型和业务需求处理:
- 必填字段: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表格(适合小团队)
测试用例格式:
- 用例编号、测试项、输入值、期望结果、优先级、执行结果
- 按功能模块、字段类型、边界类型分类
工具入口
生成边界条件测试用例思维导图