你有没有试过花一下午写测试用例,结果第二天产品经理改了需求,全部作废?
我试过。后来我开始用AI来辅助写测试,效率提升了至少3倍。
不是让AI完全替代你写测试——那会翻车。而是让AI帮你处理那些重复的、模板化的部分,你来做判断和审查。
下面是我总结了5个最实用的技巧,每个都附了可直接运行的代码。
技巧一:用AI批量生成单元测试骨架
写单元测试最烦的是什么?是边界条件。
一个函数有正常路径、空值、越界、类型错误……每个都要写一个case。用AI可以快速生成这些骨架。
比如这个简单的函数:
def calculate_discount(price, member_level):
if price <= 0:
return 0
if member_level == 'gold':
return price * 0.8
elif member_level == 'silver':
return price * 0.9
return price
你可以这样问AI:
请为上面的calculate_discount函数生成pytest单元测试,覆盖以下场景:正常价格、零价格、负价格、空member_level、非法member_level、超大价格。每个测试用例要有清晰的注释。
AI会给你这样的输出:
import pytest
from discount import calculate_discount
def test_normal_price():
assert calculate_discount(100, 'gold') == 80
assert calculate_discount(100, 'silver') == 90
assert calculate_discount(100, 'basic') == 100
def test_zero_price():
assert calculate_discount(0, 'gold') == 0
def test_negative_price():
assert calculate_discount(-50, 'gold') == 0
def test_empty_member_level():
assert calculate_discount(100, '') == 100
def test_invalid_member_level():
assert calculate_discount(100, 'diamond') == 100
def test_large_price():
result = calculate_discount(999999, 'gold')
assert result == 799999.2
这里有个关键点:让AI生成的是骨架,不是最终版本。你需要检查每个assert的值是否正确。AI可能会算错小数点,也可能漏掉某些边界条件。
技巧二:用AI分析测试覆盖率报告
跑完测试后,覆盖率报告告诉你哪些代码没被覆盖。但手动看报告很枯燥,尤其项目大了以后。
把覆盖率报告丢给AI,让它帮你分析:
这是我的pytest-cov覆盖率报告,请帮我找出未覆盖的关键代码路径,并给出补充测试的建议。
AI会告诉你:
line 23-25的异常分支没有被测试覆盖utils.py中的validate_email()函数缺少格式错误的测试用例- 建议优先补充这三个高风险模块的测试
这样你就能有针对性地补测试,而不是盲目地到处加case。
技巧三:用AI生成接口测试脚本
接口测试比单元测试麻烦得多。你得构造请求、设置header、解析响应、验证状态码。
用AI写接口测试脚本,流程是这样的:
第一步,把你的API文档(或者curl命令)发给AI:
curl -X POST https://api.example.com/v1/users \
-H "Content-Type: application/json" \
-d '{"name": "张三", "email": "zhangsan@example.com"}'
第二步,让AI生成对应的requests测试脚本:
请把上面这个curl命令转换成Python requests库的测试代码,包含成功和失败的测试场景。
AI会生成类似这样的代码:
import requests
import pytest
BASE_URL = "https://api.example.com/v1"
def test_create_user_success():
response = requests.post(
f"{BASE_URL}/users",
json={"name": "李四", "email": "lisi@test.com"},
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
assert response.status_code == 201
data = response.json()
assert data["name"] == "李四"
assert "id" in data
def test_create_user_duplicate_email():
response = requests.post(
f"{BASE_URL}/users",
json={"name": "王五", "email": "lisi@test.com"},
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
assert response.status_code == 409
def test_create_user_missing_name():
response = requests.post(
f"{BASE_URL}/users",
json={"email": "test@test.com"},
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
assert response.status_code == 422
注意:这里的token、URL前缀等敏感信息需要你手动替换成实际值。AI不会知道你项目的具体配置。
技巧四:用AI做模糊测试数据生成
测试需要各种奇怪的数据:超长字符串、特殊字符、emoji、null值……手动构造太麻烦了。
让AI帮你生成测试数据:
请生成20个用于测试用户注册表单的邮箱地址,包含有效邮箱、无效格式、超长邮箱、含特殊字符的邮箱各5个。
AI会给你这样的列表:
有效邮箱:
alice@example.com, bob.smith@gmail.com, user.name@company.org, test123@domain.net, admin@site.io
无效格式:
not-an-email, @missing-local.com, missing@, no-at-sign.com
超长邮箱:
aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz1234567890@example.com
含特殊字符:
user+tag@example.com, first.last@test.co.uk, user_name@sub.domain.org, user-123@domain.com, user_456@domain.net
把这些数据直接用到你的测试里,覆盖范围一下子就广了。
技巧五:用AI解释失败测试的原因
测试挂了的时候,最头疼的是看报错信息。尤其是那种嵌套很深的异常栈。
把报错信息复制给AI:
这个pytest测试报错了,请帮我分析原因,并给出修复方案。
FAILED test_user_profile.py::test_update_profile -
AssertionError: Expected status 200 but got 404
Traceback:
File "test_user_profile.py", line 45, in test_update_profile
assert response.status_code == 200
AI会告诉你:
- 错误原因:更新用户资料时返回404,说明用户ID不存在或接口路径错误
- 可能的问题:测试用的user_id在数据库中不存在;接口路径可能应该是
/users/{id}/profile而不是/users/profile - 修复建议:先确认测试数据中是否存在该用户;检查接口文档确认正确的更新路径
这种分析比你自己翻代码快多了。
总结一下
AI写测试的核心思路就一句话:让AI干体力活,你来把关。
具体来说:
- AI生成测试骨架 → 你验证逻辑
- AI分析覆盖率 → 你决定优先级
- AI转换接口测试 → 你替换敏感信息
- AI生成测试数据 → 你挑选合适的用例
- AI解释报错 → 你定位根因
不要指望AI生成的测试代码可以直接跑。它会有bug,会漏掉边界条件,会理解错业务逻辑。但它的价值在于帮你节省80%的时间,剩下的20%你来完善。
如果你现在还在手动写测试用例,不妨试试这个方法。花10分钟让AI生成第一批测试,你会惊讶于它有多快。
你觉得AI写测试靠谱吗?欢迎在评论区聊聊你的经验。