yangxt65535

AI辅助的自动化测试开发

使用AI的目标

在云原生项目中,与开发代码不同,测试用例实现的复杂度往往来自于来自:

  • 需要管理众多环境配置、上下文依赖
  • 跨组件协作中异步行为多,行为、耗时存在不确定性

此外,测试用例编写过程中本身存在以下问题:

  • 测试框架/工具存在学习曲线
  • 测试用例流程长、重复度高
  • 需要考虑测试用例间的并发、顺序执行
  • 不确定性场景处理成本高

相比“实现测试用例”,AI在测试中的价值更多的在于“降低非核心工作的时间成本”。基于模型对既有测试模式、测试工具和通用编码能力的知识,AI能够辅助应对测试用例编写中的“不确定因素”,使开发者能够把精力聚焦在测试的设计与质量保障本身。

AI在测试中的能力

AI能做什么很大程度上取决于AI知道什么。

从海量开放代码中AI已经学习了:

  • 测试模式:理解常见测试用例的组织方式,包括用例分层、并发执行策略以及测试执行顺序的控制方式
  • 测试框架/工具:掌握主流测试框架和测试工具的使用方法及最佳实践(例如 Gomega 断言 API、Playwright 的页面与交互接口等)
  • 宏观项目背景:具备对项目所处技术领域的基础认知,(Kubernetes 的核心行为逻辑、常用系统命令以及 Web 相关标准)

借助辅助开发工具的提供工程能力,AI能够进一步做到:

  • 上下文感知:通过对项目中已有代码的学习,使生成结果更贴合项目需求与现有模式
  • 开发流程整合:接入各IDE模块,参与对开发全流程的效率提升

因此在测试编写中的擅长:

  • 生成测试骨架
  • 把测试用例步骤翻译成代码
  • 写样板代码、处理边界条件
  • 根据日志、错误堆栈分析原因,修正代码

而不擅长:

  • 设计测试策略、测试用例
  • 了解被测试项目内部的原理

如何使用AI

AI工具类型

目前大家开发中主要有两种方式:

  • 使用AI服务的Web端 DeepSeek、豆包、ChatGPT
  • 使用AI IDE或IDE AI插件 Cursor、Roo Code
Web AI应用AI IDE/IDE插件
界面入口浏览器IDE内置
交互方式对话对话、内联组件、etc.
反馈方式解释性文本解释性文本+代码内联编辑
知识边界输入+对话历史输入+对话历史+项目上下文
响应速度快,直接对话慢,需要整合上下文、内部多轮调用
使用成本免费就够用有限免费使用,需要付费

对不同任务/需求使用不同,方式:

  • Web AI应用响应快、零成本,适合临时查语法、创建一次性脚本、局部代码修改。
  • AI IDE插件因能读懂整个项目,更适合需要跨文件情景下的代码编写、重构和问题定位。

IDE AI插件与AI IDE又是AI辅助开发的两种主流形式。两者提供的能力趋同,但是在内部工程能力上有所区别。

  • IDE插件本质上还是IDE的一个第三方插件,能力取决于VSCode所开放的接口。这意味着IDE只是一个半黑盒状态,需要IDE的能力开放补足其AI辅助生态(VSCode✔️Jetbrain❌)。
  • AI IDE通过直接对IDE内部业务逻辑的深度定制(一般是VSCode开源版的fork),允许其直接作为第一方接管整个开发环境,是IDE插件角度无法达到的程度。

主要交互方式

  1. 自动补全/内联编辑

    直接发生在编辑器内,局部、轻量、响应快的简单编辑工作 (Tab Coding)。可以时新代码的补全,也可以是现在代码的修改。前者由工具自动触发,后者为手动。

    image

    image

  2. Agent对话

    通过对话框指示AI的任务,更贴近主流Chatbot的交互形式。有更大范围的上下文理解和丰富的工具调用能力。

    image

AI使用技巧

提示词工程的核心在于明确需求和规格,并通过结构化输入设计‌,引导AI生成‌确定性高、符合要求的输出。

  • 明确需求和规格:

    明确说明需要AI做什么,必要时说明不需要做什么。对于测试代码,尤其需要限定测试范围、验证点和完成标准,避免生成偏离目标的实现。

    帮我给应用管理的微服务写个单元测试,详细一点。 ==> 任务:为 internal/application/client.go 文件生成写单元测试。 要求: - 用golang原生testing+testify断言,必要时使用go-monkey patch - 不要外部http调用,用mock替代。 - 要求输出到client_test.go,覆盖率 ≥80%。

    AI IDE默认系统模板中提供了很多作为“优秀”架构师和开发者的要求,用于规范辅助编码的行为和输出风格。可以利用这一机制,将社区的测试规范、工具栈等通用的要求编写自定义模式配置,降低编写相关描述的需要。

  • 提供必要信息

    对于AI无法或难以获取的项目内部细节,应当在prompt中主动提供,例如已有工具函数、实现细节、环境配置等。

    Pod内curl调用kubernetes接口失败了,定位问题 ==> 在Pod内部通过curl访问Kubernetes接口:curl -s -k https://kubernetes.default.svc/api/v1/nodes/${NODE_NAME}/proxy/stats/summary -H "Authorization: Bearer $TOKEN" --cacert $CA_CERT 失败了,报错信息:curl: (6) Could not resolve host: kubernetes.default.svc。该Pod通过Daemonset部署,yaml如下:

    apiVerser: apps/v1 …

    在AI IDE中提问时,软件自身的工程能力支持自动补充相关信息(文件内容、命令行输出等),因此能够大幅减少这方便的工作,使用户可以专注于prompt本身的编写。

  • 提供示例

    示例是对AI约束能力最强的方式之一。通过提供已有测试代码片段,可以显著提高生成结果与项目风格的一致性;通过提供若干预期输入输出情况,可以提升AI对复杂抽象任务的理解。

  • 输入结构化

    将背景、目标、约束和输出在形式上或逻辑上进行分层描述,避免把所有信息混在一句话中。结构清晰的输入有助于AI正确理解当前任务。

演示

用AI生成Ginkgo测试结构

输入:示例测试用例

任务:

  1. 生成测试骨架
  2. 填充用例
  3. 运行
  4. 修复错误用例

如何用起来

  1. 需要上手快、零配置:
    • 使用AI IDE:UX设计以AI优先,低门槛,支持最新主流模型,使用方式与VSCode基本一致。
    • 充值plan,通常为月付。
    • 首选cursor,或trae等国产平替。
  2. 对配置、服务来源、成本控制有更多自主权:
    • 使用IDE插件+API Key:以开发视角为核心,AI只是辅助插件,提供灵活配置功能。
    • 工具往往免费,需要从AI模型供应商或API聚合商购买token额度,Pay-as-you-go。
    • API聚合商:通过自建或代理服务,允许用户一个apikey自由切换模型:国际OpenRouter/国内硅基流动等;