面向读者:刚入门或想系统了解 AI 编程工具的测试工程师
要解决的问题:面对 GitHub Copilot、TRAE、Claude Code 等眼花缭乱的 AI 编程助手,不知道哪个最适合自己,应该怎么选
本章学习目标
一、AI 编程助手是什么?
1.1 场景引入:你的"副驾驶"来了
想象一下:你坐在车里,旁边坐着一个老司机。你说"前面左转",他帮你打方向盘;你说"前面有个人",他帮你踩刹车。这个老司机,就是 AI 编程助手。
但这个老司机也有自己的脾气——有的开车猛(补全快),有的开车稳(推理准),有的车上还能放音乐(生态丰富)。选错老司机,轻则绕路,重则翻车。
1.2 为什么测试工程师更需要 AI 编程助手?
三个字:写用例太累了。
手工测试转自动化的第一道坎:代码不会写 接口测试用例几百条:重复代码写到吐 新项目要快速上手:业务逻辑看不懂
AI 编程助手,就是来解决这些问题的。
二、主流工具全景对比
2.1 GitHub Copilot:老大哥,最普及
一句话评价:普及率最高的"填空型"助手,代码补全扛把子
核心能力:
代码补全(在你打字时自动提示) 整行/整函数生成 测试用例生成 支持 VS Code、JetBrains 全家桶
适用场景:
已有一定代码基础,需要快速写实现 需要边写边补全,不想切换界面 在 GitHub 上活跃的开发者(Copilot 深度绑定 GitHub 生态)
缺点:
复杂推理能力一般 中文 Prompt 理解有时偏差 需要付费(个人版 $10/月)
2.2 TRAE:国产之光,免费+中文友好
一句话评价:国内最接地气的 AI 编程工具,中文支持极佳
核心能力:
中文 Prompt 理解优秀 内置中文技术问答 支持 Cursor 模式(对话式写代码) 完全免费(对,你没看错)
适用场景:
英文不太溜的测试工程师 想快速体验 AI 编程但不想付费 国内开发者(网络稳定,不存在连接问题)
缺点:
生态相对较新,插件不如 Copilot 丰富 复杂项目的代码补全精度有待提升
2.3 Claude Code:推理大师,最聪明
一句话评价:最聪明的 AI 助手,擅长复杂任务拆解和代码审查
核心能力:
强大的推理能力,能理解复杂业务逻辑 代码审查和重构 多文件编辑 能帮你写测试框架、搭项目结构
适用场景:
复杂测试框架的设计和搭建 代码审查(帮测试工程师 Review 开发代码) 需要深度理解需求后写代码 愿意花时间学 Agent 模式
缺点:
没有实时代码补全(需要对话式交互) 上手门槛稍高 Claude API 需要付费
三、横向对比表
| 价格 | |||
| 中文支持 | |||
| 代码补全 | |||
| 推理能力 | |||
| 测试用例生成 | |||
| 学习成本 | |||
| 网络要求 |
四、选型决策树:3 分钟找到你的工具
开始
│
├─ 你是初学者,英文不太溜?
│ ├─ 是 → TRAE(免费+中文友好)
│ └─ 否 → 继续判断
│
├─ 你主要想补全代码,不想切换工作流?
│ ├─ 是 → GitHub Copilot
│ └─ 否 → 继续判断
│
└─ 你要做复杂任务(框架搭建、代码审查)?
├─ 是 → Claude Code
└─ 否 → GitHub Copilot(通用场景最稳)
五、实战:10 分钟安装并体验 TRAE
为什么选 TRAE?因为免费+中文友好+国内直连,最适合入门
5.1 安装步骤
Step 1:下载安装包访问官网 https://trae.ai,点击 Download,选择 Windows 版本,下载安装包(约 100MB)。
Step 2:安装并注册双击安装包,一路 Next 即可。安装完成后会提示注册,用邮箱注册一个账号(国内邮箱均可)。
Step 3:打开 VS CodeTRAE 本质上是一个 VS Code 插件。安装完成后,打开 VS Code,会看到左侧多了 TRAE 图标。
5.2 第一个 AI 补全体验
代码示例 1:用 AI 补全一个测试函数
# 场景:写一个函数,验证用户登录是否成功
# 在编辑器中输入以下注释(AI 会根据注释生成代码)
deftest_user_login():
"""验证用户名和密码正确时,登录成功"""
# 这里让 AI 帮你补全后面的代码
# (在 VS Code 中按 Tab 键接受补全)
AI 生成的代码(补全后):
deftest_user_login():
"""验证用户名和密码正确时,登录成功"""
# 准备测试数据
username = "test_user"
password = "correct_password"
# 调用登录接口
result = login_api(username, password)
# 断言登录成功
assert result["code"] == 200, "登录失败,状态码错误"
assert result["data"]["username"] == username, "用户名不匹配"
assert result["data"]["token"] isnotNone, "未返回 Token"
print("✅ 用户登录测试通过")
代码逐行解释:
deftest_user_login():
# 定义一个测试函数,函数名以 test_ 开头是 pytest 的命名规范
username = "test_user"
password = "correct_password"
# 准备测试数据:用户名和密码(这里用测试账号)
result = login_api(username, password)
# 调用登录接口,获取返回结果
assert result["code"] == 200, "登录失败,状态码错误"
# 断言1:HTTP 状态码必须是 200
assert result["data"]["username"] == username, "用户名不匹配"
# 断言2:返回的用户名必须和我们输入的一致
assert result["data"]["token"] isnotNone, "未返回 Token"
# 断言3:必须返回 Token(登录成功的凭证)
print("✅ 用户登录测试通过")
# 打印成功信息,方便查看测试结果
5.3 用 AI 生成完整的测试用例集
代码示例 2:AI 批量生成测试用例
# 场景:为一个计算器函数生成等价类和边界值测试用例
# 告诉 AI:为一个"两数相除"函数生成测试用例,要求覆盖正常、除数为0、负数、大数等场景
# 你只需要写这一行注释:
# "用 pytest 参数化方式,为 divide(a, b) 函数生成测试用例,覆盖:正常除法、除数为0、被除数为0、负数、浮点数、大数场景。
# 每个用例加中文描述。"
AI 生成的代码:
import pytest
from decimal import Decimal
# 被测函数(模拟)
defdivide(a, b):
"""两数相除"""
if b == 0:
raise ValueError("除数不能为0")
return a / b
# AI 生成的参数化测试用例
test_cases = [
# 正常除法
(10, 2, 5.0, "正常除法"),
(9, 3, 3.0, "能整除"),
# 边界值
(0, 5, 0.0, "被除数为0"),
(1, 2, 0.5, "浮点结果"),
# 负数
(-10, 2, -5.0, "被除数为负"),
(10, -2, -5.0, "除数为负"),
(-10, -2, 5.0, "两个负数"),
# 大数
(999999999, 1, 999999999.0, "大数"),
# 浮点数精度
(0.1, 0.1, pytest.approx(1.0), "浮点数除法"),
]
@pytest.mark.parametrize("a,b,expected,desc", test_cases)
deftest_divide(a, b, expected, desc):
"""参数化测试用例,覆盖多种场景"""
if b == 0:
# 单独测试除数为0的场景(异常分支)
with pytest.raises(ValueError, match="除数不能为0"):
divide(a, b)
else:
result = divide(a, b)
assert result == expected, f"{desc}失败:期望 {expected},实际 {result}"
print(f"✅ {desc} 测试通过 | {a} ÷ {b} = {result}")
运行效果:
========================== test session starts ===========================
collecting ... collected 10 items
test_divide[正常除法-10 ÷ 2 = 5.0] ✅ 正常除法测试通过 | 10 ÷ 2 = 5.0
test_divide[能整除-9 ÷ 3 = 3.0] ✅ 能整除测试通过 | 9 ÷ 3 = 3.0
test_divide[被除数为0-0 ÷ 5 = 0.0] ✅ 被除数为0测试通过 | 0 ÷ 5 = 0.0
test_divide[浮点结果-1 ÷ 2 = 0.5] ✅ 浮点结果测试通过 | 1 ÷ 2 = 0.5
test_divide[被除数为负--10 ÷ 2 = -5.0] ✅ 被除数为负测试通过 | -10 ÷ 2 = -5.0
test_divide[除数为负-10 ÷ -2 = -5.0] ✅ 除数为负测试通过 | 10 ÷ -2 = -5.0
test_divide[两个负数--10 ÷ -2 = 5.0] ✅ 两个负数测试通过 | -10 ÷ -2 = 5.0
test_divide[大数-999999999 ÷ 1 = 999999999.0] ✅ 大数测试通过 | 999999999 ÷ 1 = 999999999.0
test_divide[浮点数除法-0.1 ÷ 0.1 = 1.0] ✅ 浮点数除法测试通过 | 0.1 ÷ 0.1 = 1.0
========================== 9 passed in 0.32s ===========================
六、避坑指南
❌ 错误做法:完全依赖 AI 生成代码,不检查
# 错误示例:AI 生成什么就用什么,不验证
result = AI生成的代码() # 没有理解代码逻辑就直接用
assert result == "期望值"
问题: AI 也会犯错,特别是复杂逻辑、边界条件,可能生成有 bug 的代码,直接用会导致测试漏检。
✅ 正确做法:把 AI 当助手,自己做最后决策
# 正确做法:理解 AI 生成的代码,必要时手动修正
# 1. 让 AI 生成代码
test_code = AI生成测试用例(divide, "覆盖等价类和边界值")
# 2. 人工 review:检查边界条件是否完整
print("AI 生成的测试用例:")
for case in test_cases:
print(f" - {case}")
# 3. 补充 AI 遗漏的边界(如:NaN、无穷大)
test_cases.append((float('inf'), 1, float('inf'), "无穷大除以1"))
# 4. 运行并验证
❌ 错误做法:Prompt 写得太模糊
"帮我写一个测试" → AI 不知道测什么,生成的可能不相关
✅ 正确做法:Prompt 要具体
"为 divide(a, b) 函数生成 pytest 参数化测试用例,
要求覆盖:正常除法、除数为0、被除数为0、负数、浮点数、大数场景。
每个用例加中文描述。"
七、本章小结
下集预告
学会了选工具,下一步就是用起来!Day 32|TRAE实战1:安装配置、第一个AI补全我们将手把手教你把 TRAE 装好,并用它写出第一个 AI 辅助的测试脚本。
夜雨聆风