边界条件检查清单:数据为空/超长/特殊字符/越界(附测试用例)

前言

边界条件是测试中最容易漏的部分。很多线上问题都是因为没有测试边界:输入为空、超长字符串、特殊字符、数值越界。这篇给你一份完整的边界条件检查清单。

一、边界条件检查清单

边界类型 检查项 测试用例示例
数据为空 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、边界值、边界值+1
    • 例如:最大长度100,测试99、100、101
  2. 特殊字符测试:
    • 优先测试SQL注入、XSS攻击、emoji、换行符
    • 其他特殊字符根据业务场景选择
  3. 数据为空测试:
    • 测试null、空字符串、空格、空数组、空对象
    • 明确必填字段和选填字段的处理方式
  4. 格式错误测试:
    • 测试邮箱、手机号、日期等格式验证
    • 测试各种格式错误的情况
  5. 重复数据测试:
    • 测试唯一性校验(用户名、手机号、邮箱等)
    • 测试重复数据的处理方式
  6. 测试优先级:
    • 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表格(适合小团队)

测试用例格式:

  • 用例编号、测试项、输入值、期望结果、优先级、执行结果
  • 按功能模块、字段类型、边界类型分类

工具入口

生成边界条件测试用例思维导图

相关推荐
松涛和鸣2 小时前
42、SQLite3 :字典入库与数据查询
linux·前端·网络·数据库·udp·sqlite
QT 小鲜肉2 小时前
【Linux命令大全】001.文件管理之rcp命令(实操篇)
linux·服务器·网络·chrome·笔记
Psycho_MrZhang2 小时前
PythonGIL
服务器
代码游侠2 小时前
学习笔记——SQLite3 编程与 HTML 基础
网络·笔记·算法·sqlite·html
翼龙云_cloud2 小时前
亚马逊云渠道商:AWS Lightsail 极速部署演示环境搭建指南
运维·服务器·云计算·aws
2501_945837432 小时前
云服务器的核心优势与价值重构
服务器
AI云原生2 小时前
如何解决 pip install 代理报错 SOCKS5 握手失败 ReadTimeoutError 问题
网络·爬虫·python·网络协议·tcp/ip·scikit-learn·pip
BORN(^-^)2 小时前
域名申请:京东云域名 + 腾讯DNS + httpsok证书申请
网络·ssl·京东云
赋创小助手11 小时前
融合与跃迁:NVIDIA、Groq 与下一代 AI 推理架构的博弈与机遇
服务器·人工智能·深度学习·神经网络·语言模型·自然语言处理·架构