跳转至

AI 辅助测试教程(软件测试人员专用)

本教程面向软件测试工程师,讲解如何利用 AI 工具(ChatGPT、Copilot、Cursor 等)提升测试效率,覆盖测试用例生成、测试数据构造、缺陷分析、代码审查等核心场景。

📘 入门难度 ⏱ 约 1 天 📋 前置:软件测试基础、接口测试概念 🎯 目标:掌握 AI 工具在测试工作中的实用技巧
项目 要求 获取方式
ChatGPT / Copilot 能访问 ChatGPT 或 GitHub Copilot chat.openai.com / github.com/features/copilot
测试基础 了解测试用例设计、接口测试概念 接口测试完整教程-软件测试版
文本编辑器 VS Code 或任意编辑器 code.visualstudio.com

新手导读

AI 工具的核心价值是提效,不是替代。对新手来说,先把 AI 当成一个"超级助手":

  1. 用例生成:把需求丢给 AI,快速生成用例草稿,再人工修正。
  2. 数据构造:让 AI 生成测试数据,省去手动造数据的时间。
  3. 日志分析:把报错日志丢给 AI,快速定位可能原因。
  4. 代码辅助:让 AI 帮写或优化测试脚本。

第一遍重点掌握:如何写出好的提示词(Prompt),以及如何判断 AI 输出的质量。

版本与维护说明

项目 说明
适用范围 ChatGPT、GitHub Copilot、Cursor、Claude 等主流 AI 工具
使用建议 始终验证 AI 输出,不要盲信;敏感数据不要贴给公共 AI
更新提醒 AI 工具迭代极快,每月都有新功能,建议关注官方更新日志

一、AI 测试概述

1.1 2025 年行业趋势

AI 在测试领域的定位

AI 不是替代测试人员,而是提效工具。2025 年,AI 辅助测试已成为行业标配,但测试人员的核心价值——业务理解、风险判断、探索性测试——是 AI 无法替代的。

当前主流 AI 测试工具:

工具 用途 适用场景
ChatGPT / Claude 生成用例、数据、缺陷报告、日志分析
GitHub Copilot 代码补全、测试脚本生成
Cursor / Windsurf AI 驱动的 IDE,代码生成 + 审查
Applitools Eyes AI 视觉测试
Percy (BrowserStack) 视觉回归测试
Testim (Tricentis) AI 驱动的自动化测试平台
Mabl AI 驱动的端到端测试

2025 年新增 AI 测试工具:

工具 用途 适用场景
Claude (Anthropic) 长文本分析、代码审查、复杂推理 日志分析、需求审查、测试策略
Gemini (Google) 多模态理解(文本+图片+视频) UI 截图分析、文档理解
GitHub Copilot Workspace 多文件代码生成 + 重构 自动化框架搭建
Amazon Q Developer AWS 生态 AI 编码助手 云上测试脚本生成
CodeRabbit AI PR 审查 测试代码审查
Devin AI 软件工程师 自动化测试脚本编写

模型选择建议: Claude 擅长长文本和逻辑分析(适合日志分析),GPT-4o 擅长多模态(适合截图对比),Gemini 擅长多语言理解(适合国际化测试)。

1.2 AI 能做什么 vs 不能做什么

维度 ✅ AI 能做 ❌ AI 不能做
用例生成 基于需求描述快速生成用例草稿 理解业务上下文和隐含需求
数据构造 批量生成符合格式的测试数据 判断数据是否符合真实业务场景
缺陷分析 从日志中提取错误模式 判断缺陷的业务影响和优先级
代码生成 生成测试脚本框架 确保代码的可维护性和最佳实践
探索性测试 提供测试思路 替代人类的直觉和经验判断

关键提醒

AI 生成的所有内容都必须经过人工审查。AI 可能生成看起来正确但实际有误的内容(幻觉问题)。


二、用 ChatGPT/Copilot 生成测试用例

2.1 提示词模板

一个好的提示词应包含:角色 + 需求描述 + 输出格式 + 约束条件

你是一名资深软件测试工程师。请根据以下需求,生成测试用例:

【需求描述】
<粘贴需求文档或功能描述>

【输出格式】
表格形式,包含:用例编号、模块、用例标题、前置条件、测试步骤、预期结果、优先级

【约束条件】
- 覆盖正常流程、异常流程、边界值
- 优先级分为 P0/P1/P2
- 每条用例的步骤不超过 5 步

2.2 实战:登录功能用例生成

提示词:

你是一名资深软件测试工程师。请为以下登录功能生成测试用例:

【需求描述】
- 登录页面包含:手机号输入框、密码输入框、登录按钮
- 手机号:11位数字,必填
- 密码:6-20位,必填,包含字母和数字
- 三次密码错误锁定账号30分钟
- 支持"记住密码"功能

【输出格式】
Markdown 表格:用例编号、用例标题、前置条件、测试步骤、预期结果、优先级

AI 生成结果示例(需人工审查后使用):

用例编号 用例标题 前置条件 测试步骤 预期结果 优先级
LOGIN-001 正常登录 已注册账号 1.输入正确手机号 2.输入正确密码 3.点击登录 登录成功,跳转首页 P0
LOGIN-002 手机号为空 1.手机号留空 2.输入密码 3.点击登录 提示"请输入手机号" P0
LOGIN-003 密码错误 已注册账号 1.输入正确手机号 2.输入错误密码 3.点击登录 提示"手机号或密码错误" P0
LOGIN-004 三次密码错误锁定 已注册账号 连续3次输入错误密码 提示"账号已锁定,请30分钟后重试" P1
LOGIN-005 手机号格式错误 1.输入10位手机号 2.输入密码 3.点击登录 提示"手机号格式不正确" P1
LOGIN-006 密码长度不足 1.输入正确手机号 2.输入5位密码 3.点击登录 提示"密码长度为6-20位" P1

人工审查要点

AI 生成的用例通常需要检查: - 是否遗漏了并发登录、Token 过期等场景 - 步骤是否足够具体(如"输入正确手机号"应替换为具体值) - 预期结果是否符合实际产品设计

2.3 实战:接口测试用例生成

提示词:

你是一名接口测试工程师。请根据以下接口文档生成测试用例:

【接口信息】
- URL: POST /api/v1/orders
- 请求头: Authorization: Bearer {token}, Content-Type: application/json
- 请求体:
  {
    "product_id": 123,      // 商品ID,必填,正整数
    "quantity": 2,           // 数量,必填,1-999
    "address_id": 456        // 收货地址ID,必填
  }
- 成功响应: {"code": 0, "data": {"order_id": "ORD001"}}
- 失败响应: {"code": 1001, "message": "参数错误"}

【输出要求】
表格形式,包含:用例编号、场景、请求参数、预期状态码、预期响应、优先级

AI 会生成覆盖以下场景的用例:

  • 正常下单
  • product_id 缺失/非数字/负数/不存在
  • quantity 为 0、1000、负数、小数、非数字
  • address_id 缺失/不存在
  • Token 缺失/过期/无效
  • 商品库存不足

进阶用法

可以追加提示词:"请额外生成边界值测试用例,覆盖 quantity 的边界值 1 和 999,以及特殊字符注入场景。"


三、AI 生成测试数据

3.1 用 ChatGPT 生成 JSON/CSV 测试数据

提示词示例:

请生成 10 条用户注册的测试数据,JSON 数组格式:
- name: 中文姓名
- phone: 11位手机号,以1开头
- email: 有效邮箱格式
- age: 18-65 的整数
- 包含 2 条异常数据(手机号格式错误、邮箱格式错误)

AI 输出:

[
  {"name": "张三", "phone": "13800138001", "email": "zhangsan@test.com", "age": 25},
  {"name": "李四", "phone": "13900139002", "email": "lisi@test.com", "age": 32},
  {"name": "王五", "phone": "15000150003", "email": "wangwu@test.com", "age": 45},
  {"name": "赵六", "phone": "1380013800",  "email": "zhaoliu@test.com", "age": 28},
  {"name": "钱七", "phone": "13800138004", "email": "invalid-email",   "age": 55}
]

3.2 用 Faker 库 + AI 辅助批量生成

pip install faker

让 AI 生成 Faker 脚本:

from faker import Faker
import csv

fake = Faker('zh_CN')
Faker.seed(42)

# 生成 100 条测试数据
with open('test_users.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['name', 'phone', 'email', 'age', 'address'])
    for _ in range(100):
        writer.writerow([
            fake.name(),
            fake.phone_number(),
            fake.email(),
            fake.random_int(min=18, max=65),
            fake.address()
        ])

print("已生成 100 条测试数据")

3.3 边界值与异常数据生成

提示词:

请为"订单金额"字段生成边界值和异常测试数据,表格形式:
包含:数据描述、具体值、预期系统行为
数据描述 具体值 预期系统行为
最小正常值 0.01 创建成功
零值 0 提示"金额必须大于0"
负数 -100 提示"金额必须大于0"
最大值 999999.99 创建成功
超出最大值 1000000 提示"金额超出限制"
小数精度 0.001 按规则四舍五入或拒绝
非数字 "abc" 提示"请输入有效金额"
空值 null 提示"金额不能为空"

四、AI 辅助缺陷分析

4.1 用 AI 分析错误日志

提示词模板:

以下是一段程序报错日志,请分析:
1. 错误原因
2. 可能的问题代码位置
3. 建议的修复方案

【日志内容】
<粘贴完整错误日志>

实战示例:

【日志内容】
java.lang.NullPointerException: Cannot invoke "String.length()" because "username" is null
    at com.example.service.UserService.validateUsername(UserService.java:45)
    at com.example.controller.UserController.register(UserController.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

AI 分析结果:

分析项 内容
错误原因 username 变量为 null 时调用了 length() 方法
问题位置 UserService.java 第 45 行的 validateUsername 方法
修复方案 在调用 length() 前添加 null 检查:if (username == null) throw new IllegalArgumentException("用户名不能为空")
测试建议 补充 username 为 null 的测试用例

4.2 用 AI 写缺陷报告

提示词:

请根据以下信息生成一份标准缺陷报告:

【复现场景】
在订单列表页面,点击"退款"按钮后页面白屏,控制台报错。

【环境信息】
- 浏览器:Chrome 120
- 系统:Windows 11
- 测试环境:staging

请按以下格式输出:标题、环境、前置条件、复现步骤、预期结果、实际结果、严重程度、备注

4.3 用 AI 生成缺陷复现步骤

请帮我将以下模糊的缺陷描述转化为清晰的复现步骤:

"用户反馈下单有时候会失败,好像和优惠券有关"

AI 输出:

复现步骤:
1. 登录测试账号(确保有可用优惠券)
2. 添加商品到购物车,进入结算页
3. 选择一张满减优惠券
4. 修改商品数量使订单金额不满足优惠券使用条件
5. 点击"提交订单"

预期结果:提示"优惠券不满足使用条件",允许用户调整后重新提交
实际结果:提交后页面报错,订单未生成

五、AI 视觉测试

5.1 视觉回归测试原理

传统 UI 测试只验证元素是否存在,视觉测试验证页面是否"看起来正确":

┌─────────────┐    快照对比    ┌─────────────┐
│  基线截图    │ ──────────→  │  当前截图    │
│  (Baseline)  │   AI 判断    │  (Current)   │
└─────────────┘              └─────────────┘
        │                          │
        └──────── 差异报告 ────────┘

5.2 Applitools Eyes

特性 说明
AI 对比算法 不做像素级对比,用 AI 模拟人眼判断是否"有意义的变化"
跨浏览器 同一基线对比不同浏览器/设备的截图
布局模式 忽略内容差异,只关注布局变化
# Applitools + Selenium 示例
from applitools.selenium import Eyes, Target

eyes = Eyes()
eyes.api_key = "YOUR_API_KEY"

driver = webdriver.Chrome()
driver.get("https://example.com/login")

eyes.open(driver, "登录页面", "登录功能视觉测试")
eyes.check("登录页面", Target.window().fully())
eyes.close()

5.3 Percy (BrowserStack)

特性 说明
CI 集成 与 GitHub/GitLab CI 深度集成
响应式测试 自动截取多种分辨率的截图
审批流程 变更需审批后才更新基线
# Percy CLI 安装
npm install --save-dev @percy/cli @percy/selenium

# 运行视觉测试
npx percy exec -- python test_visual.py

六、AI 辅助代码审查

6.1 用 Copilot 审查测试脚本

在 VS Code 中,选中代码后按 Ctrl+Shift+I(或自定义快捷键)让 Copilot 审查:

# 待审查的测试脚本(有问题的版本)
def test_login():
    driver = webdriver.Chrome()
    driver.get("https://example.com/login")
    driver.find_element(By.ID, "username").send_keys("admin")
    driver.find_element(By.ID, "password").send_keys("123456")
    driver.find_element(By.ID, "login-btn").click()
    assert "首页" in driver.title
    driver.quit()

AI 审查建议:

1. ❌ 缺少显式等待,元素可能未加载就操作 → 添加 WebDriverWait
2. ❌ 硬编码账号密码 → 使用配置文件或环境变量
3. ❌ 没有异常处理 → 添加 try/finally 确保 driver.quit() 执行
4. ❌ 断言过于简单 → 增加登录成功的具体验证点

6.2 用 AI 优化自动化代码

提示词:

请优化以下 Selenium 测试脚本,添加:
1. 显式等待
2. Page Object 模式
3. 异常处理和截图
4. 日志记录

【原始代码】
<粘贴代码>

优化后示例:

import logging
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.wait = WebDriverWait(driver, 10)

    def login(self, username, password):
        try:
            self.wait.until(EC.presence_of_element_located((By.ID, "username")))
            self.driver.find_element(By.ID, "username").send_keys(username)
            self.driver.find_element(By.ID, "password").send_keys(password)
            self.driver.find_element(By.ID, "login-btn").click()
            logger.info(f"登录操作完成,用户:{username}")
        except TimeoutException:
            self.driver.save_screenshot("login_timeout.png")
            logger.error("登录页面加载超时")
            raise

    def is_login_success(self):
        return "首页" in self.driver.title

七、AI 测试的局限与风险

7.1 幻觉问题

AI 幻觉

AI 可能生成看起来完全合理但实际错误的内容。例如: - 生成不存在的 API 接口参数 - 编造不存在的测试工具功能 - 给出错误的代码语法

防范措施:

风险 应对方法
API 参数编造 始终对照官方文档验证
工具功能虚构 先查阅官方文档再使用 AI 建议
代码语法错误 必须实际运行验证
测试策略误导 结合自身经验判断合理性

7.2 数据隐私

不要把公司代码贴给公共 AI

  • 公共 AI(ChatGPT 网页版)会将对话用于模型训练
  • 敏感数据(密码、Token、用户信息)绝对不能贴给公共 AI
  • 建议使用企业版 AI(如 ChatGPT Enterprise、Azure OpenAI)或本地部署模型

安全实践:

# ✅ 安全做法:脱敏后再输入 AI
错误日志中的真实邮箱: zhangsan@company.com
脱敏后输入 AI: user001@example.com

# ❌ 危险做法:直接贴真实数据
"帮我分析这个包含用户身份证号的日志..."

7.3 AI 不能替代的工作

工作类型 为什么 AI 无法替代
探索性测试 需要人类直觉和经验判断
业务理解 AI 不了解公司内部业务规则
用户体验评估 需要真实用户视角
测试策略制定 需要对项目风险的综合判断
沟通协调 与开发、产品的需求澄清

八、实战案例

8.1 完整案例:用 AI 从零生成一套接口测试用例

场景: 电商系统商品搜索接口

第一步:整理接口信息

接口:GET /api/v1/products/search
参数:
  - keyword: 搜索关键词,必填
  - page: 页码,默认1,1-100
  - page_size: 每页条数,默认20,1-50
  - sort: 排序方式,可选值:price_asc, price_desc, sales, newest
  - min_price: 最低价格,可选
  - max_price: 最高价格,可选

第二步:输入 AI 生成用例

请为商品搜索接口生成完整的测试用例集,要求:
1. 覆盖每个参数的正常值、边界值、异常值
2. 参数组合测试
3. 输出 Markdown 表格
4. 标注自动化优先级(适合自动化的标 A,需手动的标 M)

第三步:AI 输出用例(约 25-30 条),人工审查补充

用例编号 场景 keyword page page_size sort 预期结果 自动化
SEARCH-001 正常搜索 手机 1 20 返回手机相关商品 A
SEARCH-002 关键词为空 (空) 1 20 400 参数错误 A
SEARCH-003 特殊字符