点击开始动手实验


ChatGPT生成测试用例Prompt实战:从效率瓶颈到自动化解决方案

  1. 背景:手动写用例的“老三难”
    过去两年,我们所在业务线保持两周一次迭代,测试同学最头疼的不是执行,而是“写”:

    • 重复劳动:登录、下单、退款的正逆向流程,80%字段雷同,复制粘贴到手软
    • 边界遗漏:时间、金额、特殊字符等异常场景靠人脑枚举,上线后仍被线上用户“教做人”
    • 维护黑洞:需求一改,用例跟着改,Excel+XMind 双向同步,漏掉一条就是P0故障
      结果,测试成为交付瓶颈,开发完成编码后常要等2-3天才能提测。团队一度考虑加人,但“堆人”显然不是可持续方案,于是把目光投向AI生成。
  2. 技术路线对比:传统框架 vs 商业工具 vs ChatGPT
    在正式动手前,我们拉了个横向对比表,把“能跑起来”与“能跑得快”拆开看:

    • 传统单元测试框架(pytest/unittest)
      数据准备:需提前在代码或YAML里硬编码,新增字段要改脚本
      维护成本:需求变更→改代码→重跑,回归链路长
      灵活度:高,可自定义断言,但“写”的效率低
    • 商业BDT工具(如某知名关键字驱动平台)
      数据准备:可视化拖拽,上手快
      维护成本:版本升级、License、插件兼容,一言难尽
      灵活度:中,内置模板丰富,遇到非标控件要写Java脚本
    • ChatGPT Prompt方案
      数据准备:零代码,需求文档直接喂给模型
      维护成本:Prompt即文档,改需求只改Prompt
      灵活度:高,支持多语言、多格式输出,可无缝嵌入CI
      结论:在“写得快+改得快”维度,AI生成胜出;在“断言精准”维度,仍需二次校验。于是决定“AI生成+轻量规则层”双轮驱动。
  3. 核心实现:让GPT乖乖输出“能跑的用例”

3.1 Prompt设计四要素
经过二十多次盲测,我们总结出“R-I-O-E”模板:

  • Role:给它一个身份,“你是一名有10年经验的测试架构师,熟悉电商业务”
  • Input:给上下文,“以下是一份PRD片段,包含字段、类型、边界值”
  • Output:给格式,“返回pytest参数化代码,包含id、input、expect三列”
  • Example:给一条少而全的示例,让模型照猫画虎
    把四要素写进同一段Prompt,token控制在600以内,既省钱又能命中要害。

3.2 Python 3.10+调用封装
下面这段代码可直接放utils/gpt_case.py,支持重试、异常、流式返回:

from __future__ import annotations
import os, openai, tenacity, json
from typing import List

@tenacity.retry(stop=tenacity.stop_after_attempt(3), wait=tenacity.wait_exponential(multiplier=1, min=4, max=10))
def generate_cases(prompt: str, n: int = 5, temperature: float = 0.3) -> List[str]:
    try:
        resp = openai.ChatCompletion.create(
            model="gpt-4-turbo",
            messages=[{"role": "user", "content": prompt}],
            temperature=temperature,
            max_tokens=2000,
            n=n,
            stop=["```end```"],
        )
        return [choice["message"]["content"].strip() for choice in resp["choices"]]
    except openai.error.OpenAIError as e:
        print(f"[GPT] {e.__class__.__name__}: {e}")
        raise

注意:

  • stop截断,避免模型啰嗦
  • temperature=0.3兼顾稳定与多样
  • 返回List方便后续并发校验

3.3 序列图:一次生成到执行的完整闭环

sequenceDiagram
  participant Dev as 开发者
  participant GPT as ChatGPT
  participant Val as 校验层
  participant Py as pytest
  Dev->>GPT: 发送PRD+Prompt
  GPT-->>Dev: 返回pytest列表
  Dev->>Val: 语法+业务规则检查
  Val-->>Dev: 过滤后可用用例
  Dev->>Py: 参数化执行
  Py-->>Dev: 测试报告
  1. 生产实践:让AI写的不“裸奔”
    4.1 校验层设计
    只依赖GPT容易“幻觉”,我们在本地加了两道阀门:
    • 语法检查:用ast.parse确保生成的是合法Python,捕获SyntaxError立刻丢弃
    • 业务规则过滤:把“金额>0”“手机号11位”等硬规则写进rules.json,正则批量扫描,命中即留,否则退回重写
      代码片段:
    import ast, re, json
    
    def lint_and_filter(raw_cases: List[str]) -> List[str]:
        valid = []
        rules = json.load(open("config/rules.json"))
        for case in raw_cases:
            try:
                ast.parse(case)
            except SyntaxError:
                continue
            if all(re.search(r["pattern"], case) for r in rules):
                valid.append(case)
        return valid
    

4.2 pytest集成hook
不想手动复制?在conftest.py加一段pytest_generate_tests,让框架自动把生成好的用例喂给参数化:

def pytest_generate_tests(metafunc):
    if "case" in metafunc.fixturenames:
        metafunc.parametrize("case", load_cases_from_file(), ids=lambda c: c.id)

这样pytest -n auto就能并行跑AI产出的用例,CI耗时从40min降到12min。

  1. 避坑指南:Prompt说错一句,GPT“放飞自我”

    • 幻觉优化
      1. 负面提示:在Prompt末尾加“不要生成登录成功后再登录的无效场景”
      2. 字段白名单:明确“只能使用PRD出现的枚举值”
      3. 自洽抽查:让GPT先输出5条,再自问“哪条不合理”,把自审结果也返回,二次过滤
    • 敏感数据脱敏
      真实手机号、身份证用Faker占位符,Prompt里写“所有示例数据请使用Mock”,并在校验层加正则^1[3-9]\d{9}$13800138000,防止训练数据泄露。
  2. 性能对比:100条用例耗时实测
    在同一台4核8G笔记本,网络延迟30ms:

    • 人工编写:平均每条3min,总计300min
    • AI生成+校验:并发5请求,每条8s,过滤掉15%不合规,再花2s,总计约18min
      效率提升≈94%,测试覆盖率从62%拉到91%(增量用例覆盖边界/异常路径)。
  3. 开放问题
    目前我们用“语法+规则”双重校验,只能保证“能跑”,但无法衡量“语义正确”——即生成的用例是否真正击中业务风险。如何量化AI用例的“语义正确性”?是引入模型Embedding对比PRD,还是让业务专家打分?欢迎留言讨论。

如果你想把这套思路跑通,又懒得自己搭环境,可以试试从0打造个人豆包实时通话AI动手实验,里面把Prompt模板、重试机制、语音流式处理都封装好了,小白也能10分钟跑通。我亲测把实验里的“实时语音”改成“实时用例生成”只需改两行代码,就能直接对聊需求,边聊边出用例,效率提升肉眼可见。

点击开始动手实验


Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐