测试工程师用 AI 生成单元测试:覆盖边界条件的测试用例
对负责功能测试、接口测试和回归测试的 QA来说,需求变化快,测试用例、缺陷报告和测试报告要反复写,边界场景还容易漏。单元测试大家都知道重要,但写起来枯燥,边界条件也容易想不全。这篇文章用一个完整的例子演示测试工程师如何借助 AI 生成单元测试:把函数代码和业务规则交给 AI,先让它列出测试场景清单,确认后再生成测试代码并运行。
使用场景
测试工程师写了一个处理“缺陷记录”数据的函数,比如按模块汇总修复耗时小时。上线前需要补测试,但时间紧,而且担心漏掉空数据、异常值这类边界情况。
推荐工具
编辑器内的编程助手(GitHub Copilot、Cursor、通义灵码、CodeGeeX 等)可以直接根据函数生成测试;也可以把代码贴给对话助手。
让 AI 生成测试后,一定要在本地运行,并检查断言是否真的验证了业务规则。
一个虚构的例子
下面这个例子是虚构的:阿美遇到的难题是“提测时间延后两天,回归时间被压缩”。为了不让它拖慢“补充登录模块的接口自动化用例”的进度,阿美决定借助 AI 生成单元测试。第一次只写了一句简单的要求,结果很空泛;第二次把对象(项目经理)、目的和限制条件都写清楚,输出就可用多了。这也是本文提示词模板要把背景写全的原因。
分步操作
- 提供被测函数代码和业务规则说明
- 让 AI 先列出测试场景:正常、边界、异常
- 确认场景清单,补充业务特有的情况
- 生成测试代码并在本地运行
- 检查失败的用例是代码问题还是测试问题
可复用的提示词
把方括号和括号里的内容换成你自己的信息即可:
【背景】身份:负责功能测试、接口测试和回归测试的 QA;平时主要和开发同事和项目经理打交道。
请为下面的 Python 函数编写 pytest 单元测试。
业务规则:按 category 汇总 amount;amount 为空的记录跳过;amount 为负数时抛出 ValueError。
```python
def summarize(records):
result = {}
for r in records:
if r.get("amount") is None:
continue
if r["amount"] < 0:
raise ValueError("amount must be non-negative")
result[r["category"]] = result.get(r["category"], 0) + r["amount"]
return result
要求:
- 先列出测试场景清单(正常、边界、异常)
- 再写测试代码,使用 parametrize 减少重复
- 每个测试函数名能看出测试意图
## 示例输出(仅供示意)
下面是演示用的输出示例,其中的人名、数字和事项均为虚构,实际使用时请以你自己的资料为准:
> **测试场景**
> 1. 正常:多条记录、多个分组
> 2. 边界:空列表;amount 为 0;amount 为 None
> 3. 异常:amount 为负数
>
> ```python
> import pytest
> from summary import summarize
>
> def test_groups_and_sums_amount():
> data = [{"category": "登录", "amount": 10}, {"category": "登录", "amount": 5},
> {"category": "支付", "amount": 3}]
> assert summarize(data) == {"登录": 15, "支付": 3}
>
> @pytest.mark.parametrize("data,expected", [
> ([], {}),
> ([{"category": "登录", "amount": 0}], {"登录": 0}),
> ([{"category": "登录", "amount": None}], {}),
> ])
> def test_boundary_cases(data, expected):
> assert summarize(data) == expected
>
> def test_negative_amount_raises():
> with pytest.raises(ValueError):
> summarize([{"category": "登录", "amount": -1}])
> ```
拿到类似的结果后,阿美的做法是先核对事实和数字,再结合“执行支付链路回归测试”的安排调整重点,最后才对外使用。
## 实用技巧与常见坑
- 测试数据用虚构值,不要使用真实的测试账号密码、生产数据和未公开的版本信息。
- 生成的测试也要纳入代码评审。
### 给测试工程师的特别提醒
让 AI 补充“容易被忽略的场景”,再由你按业务判断取舍。还有一点很关键:AI 列出的用例只是候选清单,覆盖是否充分仍要结合需求和历史缺陷人工把关。
很多测试工程师还会这样做:把需求文档原文给 AI,让它按等价类、边界值、异常流分别列用例。
## 还可以这样用
- 补全覆盖率:把覆盖率报告中未覆盖的代码交给 AI,补充测试。
- 测试数据工厂:让 AI 写构造测试数据的辅助函数。
## 相关阅读
- [测试工程师用 AI 写技术文档:从代码生成接口文档和说明](/posts/2026-10-16-qa-engineer-tech-doc/)
- [测试工程师用 AI 写 SOP 流程文档:把经验变成可执行的标准流程](/posts/2026-10-16-qa-engineer-sop-writing/)
- [运维工程师用 AI 生成单元测试:覆盖边界条件的测试用例](/posts/2026-10-16-devops-engineer-unit-test/)
- 延伸:[AI 生成单元测试:提高覆盖率而不制造“假安全感”](/posts/2026-07-27-ai-unit-test-generation/)
- 更多场景:[AI 使用示例合集](/categories/ai-examples/),或按标签浏览[#测试工程师](/tags/测试工程师/)、[#单元测试](/tags/单元测试/)