用AI生成接口自动化脚本:三段式提示词让你告别手写代码

发布时间:2026/9/29 17:39:29
用AI生成接口自动化脚本:三段式提示词让你告别手写代码 搞接口测试这行干久了最磨人的不是接口本身有多复杂而是那些“明明天天在重复、却还得从头手写”的脚本代码。我前前后后折腾过 Postman、JMeter、Java 的 TestNG 加 RestAssured、Python 的 pytest 加 requests工具换了一圈最后发现真正能把我从“造模板轮子”里解放出来的反而是 AI。最近半个多月我刻意把所有能交给 AI 的接口脚本都交给 AI 去生成把“AI 1 分钟生成接口自动化脚本”从一句口号变成了日常工作流这篇文章就把我踩过的坑、试出来的套路和能直接复用的提示词框架完整写出来。内容不挑框架你用的是 Java、Python 还是 Apifox、JMeter思路都能直接搬。1. 为什么我坚决不手写接口脚本了1.1 手写脚本的真正成本到底在哪很多人觉得接口自动化脚本嘛无非就是发个 HTTP 请求断言一下状态码和返回值有什么难的。这话对了一半单个脚本确实不难难的是持续维护和批量生产。拿我手头一个典型的业务系统来说光注册、登录这两个基础模块就能牵扯出十几个用例——正常注册、重复用户名、密码强度不足、参数缺失、Token 过期、验证码错误、账号锁定、并发注册每个用例至少 30 到 50 行代码再加上不同环境的 BaseURL 切换、测试数据准备、响应结果回写一个模块全写完少说三四百行。三四百行听起来也不多问题是这套系统还有订单、支付、退款、活动、公告五个类似模块。等于我要把同样的骨架逻辑复制五六遍每次复制还得小心处理模块特有的参数校验和异常场景。这种工作本质上不是脑力劳动是体力劳动偏偏它还特别容易出错——字段名打错一个字母、漏了必填参数、断言类型没转对任何一个低级错误都要用一次完整的调试去换。1.2 AI 生成脚本的真实定位它不是替你思考是替你做体力活我见过不少同行对 AI 生成代码有两个极端态度要么觉得 AI 是神什么都能写要么觉得 AI 生成的东西都是垃圾还得自己改半天。实际用下来我自己的体会是AI 干体力活非常靠谱干脑力活需要你先把思路喂给它。这句话怎么理解你把“对 /api/register 发 POST 请求参数是手机号和密码断言 code 是 0”这样的需求丢给 AI它 30 秒内能生成像模像样的代码你在手写的时候要花 10 分钟去敲的模板、导包、异常处理、参数定义它全给你省了。可你要让它“帮我测一下注册接口有没有漏洞”它就抓瞎了因为“漏洞”这个词太抽象它在没有足够边界条件提示的情况下只能给你生成一堆看似正确但没有攻击性的用例。所以我现在的工作方式很简单思路我做体力活交给 AI。我描述清楚接口长什么样、参数有什么、重点是哪个场景、断言写什么剩下那些复制粘贴级别的代码AI 一分钟内搞定。这篇文章要讲的就是怎么把“思路”这个东西翻译成 AI 听得懂的提示词。2. 搭一套好用的 AI 生成脚本环境2.1 工具选型从 Apifox 到大模型怎么组合最省心先说测试工具这层。我日常主力还是 Apifox主要原因不是它功能最多而是它在“接口定义”和“脚本调试”之间衔接得特别顺。你在界面上调试通一个接口它能直接导出 OpenAPI 文档也能自动生成不同语言的请求代码。Postman 也干得了这活但 Apifox 对国内团队协作和文档分享更友好一点看个人习惯。JMeter 那套则更适合压力测试场景做功能级的接口自动化反而有点重。再说 AI 这层。我用得最多的是对话式大模型比如 ChatGPT、Claude、文心、Kimi 这类它们理解自然语言的能力足够强生成代码的格式也规范。更重要的一个点是我测试的项目代码通常不能外发所以我首选支持本地部署的开源模型比如 Qwen 系列或者用国产大模型的 API 接口做内网转发。这里给一个选型建议如果只是生成通用 HTTP 请求代码任何主流大模型都能胜任不需要纠结参数规模如果你要让 AI 理解项目内部的封装类、自定义注解、业务工具函数那就必须把相关代码片段塞进上下文或者用支持代码库检索的 AI 编程插件。市面上不少 AI 编程助手就是干这个的能让你在 IDE 里直接选中代码片段让 AI 改写效率比复制粘贴到网页再贴回来高一截。2.2 环境准备让 AI 生成的代码“拿起来就能跑”AI 生成的代码默认是假设你有一套标准的运行环境。如果环境不齐脚本生成得再好也白搭。我给自己规定了一套“最小化环境清单”Python 自动化Python 3.10装 requests、pytest、pytest-html再配一个 jsonpath 库用于灵活的响应提取和校验。Java 自动化JDK 17、Maven依赖 RestAssured、TestNG、Allure。接口调试工具Apifox 或 Postman用于前期手工调通和记录请求样例。版本管理Git 必须有AI 生成的脚本我要能随时回滚。这里多说一句我遇到过很多人卡在环境安装上明明 AI 已经把脚本生成好了跑起来却报“ModuleNotFoundError”或者“No such dependency”。这不是 AI 的问题是你环境没准备到位。比如热词里有人搜“npm 无法将 npm 项识别为 cmdlet、函数、脚本文件”这多半就是 Node 没装对或者环境变量没配上。虽然接口自动化不一定要用 Node但一旦 AI 给你生成了一段 Node 脚本环境就是第一道门槛。所以在你决定让 AI 帮你写代码之前先花半小时把语言环境、包管理工具、依赖库装好比什么提示词技巧都管用。3. 核心方法论三段式提示词让 AI 输出稳定产物3.1 为什么你让 AI 写脚本写出来的总是一坨废代码“帮我写一个登录接口的自动化脚本”——这是我见过最普遍的 AI 用法也是生成质量最差的用法。原因很简单大模型不是读心术你的需求描述得越模糊它就越倾向于生成一个“看起来正确但啥也不是”的万能模板。你以为它知道你登录接口的参数名是 account 还是 username知道你的加密方式是 MD5 还是 RSA知道成功返回码是 0 还是 200不知道它只能猜猜的代价就是生成一段需要你大改特改的代码。这不是 AI 蠢是信息熵太高。换个角度想如果你带一个实习生你也不可能上来就让他“写个登录脚本”就完事你得告诉他接口地址在哪、参数有哪些、用什么鉴权方式、断言看哪个字段。AI 需要的信息密度和实习生差不多你把信息给足它给你的产出才可用。这个信息差就是我提炼出“三段式提示词”的原因。3.2 提示词三段式背景、需求、细节要求我把一套完整的 AI 生成脚本提示词拆成三个固定段落不管生成什么接口脚本都套这个框架第一段交代背景和接口信息。包括接口名称、请求方法、完整路径、请求头、请求体参数、正常响应示例。这段信息越接近真实的接口文档越好最好直接粘贴 Apifox 导出的参数结构。AI 看到真实结构之后就不会再瞎猜字段名和类型了。第二段交代测试需求和目标场景。你想覆盖哪些用例是正常的成功路径、参数校验失败、认证异常还是并发的边界情况把场景列出来AI 生成的脚本才不会只有孤零零一个正向用例。第三段交代代码风格和断言要求。你说“用 pytest 组织用例统一用 pytest-html 出报告成功断言 code0 且 message 为 success”AI 生成的代码就自带一整套工程规范而不是随手在 requests.get 外层套个 print。举一个我常用的完整模板背景我要测试一个用户注册接口。 接口信息POST http://api.example.com/register 请求头Content-Type: application/json 请求体{phone: 13800000001, password: abc123, code: 1234} 正常响应{code: 0, message: success, data: {userId: 12}} 需求用 pytest 写一个自动化脚本覆盖3个用例 1. 手机号未注册时成功返回 2. 手机号已注册时返回 code1001 3. 验证码错误时返回 code1002 断言响应里的 code 字段和 message 字段。 细节要求 - 用 requests 库 - BaseURL 单独配置 - 每个用例要能独立运行 - 用 pytest-html 做报告这个模板我给过不少同事他们用下来反馈基本一致不管生成什么语言、什么框架的脚本AI 的输出质量都从“磨了半天还得改”提升到了“改一两个地方就能跑”的水平。3.3 给足上下文比用什么模型更重要这里插一个经验网上很多人喜欢对比“哪个 AI 写代码强”我自己的实测结论是在生成接口测试脚本这件事上上下文完整度比模型强弱更关键。我用能力稍弱一点的国产模型只要把接口参数表、请求样例、断言要求写清楚生成结果的可用率能达到八成反而用能力很强的国际模型如果你只丢一句话“帮我测注册接口”它也会给你生成一套架构宏大的无用代码。这个现象在 AI 编程圈其实很普遍强模型擅长的是知识的广度与复杂推理而接口脚本生成的需求是典型的结构化信息处理你喂的信息决定了下限。4. 实战让 AI 完成注册登录全流程自动化4.1 从网页接口文档到第一版可用脚本下面我用一个注册接口的真实案例走一遍完整的“AI 生成脚本”流程。这个接口是我手上一个活动系统里的基础接口结构不算复杂用户通过手机号加短信验证码完成注册注册成功后响应体里直接带一个 Token后续所有业务接口都要带这个 Token 才能访问。接口测试圈子公认的一个老规矩是先过注册登录再测业务接口鉴权串不起来后头全是白搭。我先在 Apifox 里把注册接口调通确认请求体和响应体的真实结构。然后打开 AI 对话窗口把下面这段提示词发过去请基于如下接口信息生成 pytest 自动化脚本 POST /api/register Header: {Content-Type: application/json} Body: {phone: 13800000001, password: abc123, verifyCode: 1234} Response: {code: 0, message: success, data: {token: xxx, userId: 12}} 要求 1. 使用 requests 和 pytest 2. 生成两个用例一个是正常注册成功返回一个是验证码错误返回 code4002 3. 每个用例打印请求体和响应体方便排查 4. 把 base_url 单独定义在模块开头不到半分钟AI 就给出了一段结构清晰的 pytest 脚本差不多是这个样子import requests import pytest import json base_url http://api.example.com def register(phone, password, verify_code): url f{base_url}/api/register payload { phone: phone, password: password, verifyCode: verify_code } headers {Content-Type: application/json} resp requests.post(url, jsonpayload, headersheaders) print(Request:, json.dumps(payload, ensure_asciiFalse)) print(Response:, resp.text) return resp def test_register_success(): resp register(13800000002, abc123, 1234) result resp.json() assert result[code] 0 assert result[message] success assert token in result[data] def test_register_wrong_code(): resp register(13800000003, abc123, 9999) result resp.json() assert result[code] 4002 assert result[message] verify code error这段代码放在工程里几乎不用改唯一需要调整的是我为了演示把手机号硬编码写了实际工程里应该参数化。我让 AI 继续把手机号改成从外部参数文件读取它又快速生成了一段config.yaml的读取逻辑。到这里基本就验证了一个事实AI 的强项正是这些重复度极高的机械编码动作。4.2 处理登录鉴权Token 如何自动关联到后续接口注册只是热身真正让脚本从“玩具”变成“工具”的是登录鉴权的自动关联。很多接口测试新手最头疼的就是登录之后返回的 Token 怎么保存又怎么带着它去访问业务接口手动操作的时候你可以复制 Token 到下一个请求的 Header 里但自动化脚本不行脚本必须自动从登录响应里取出 Token存进会话再用到请求头里。我给 AI 的描述是生成一个带登录态关联的 pytest 脚本 1. 先调用 POST /api/login 获取 token 2. 将 token 自动存入 session headers 3. 然后调用 GET /api/user/info 获取用户信息 4. 断言用户信息中的手机号字段等于登录使用的手机号AI 给出的做法是将登录封装成一个login_session()方法先登录再返回带 token 的 requests.Session 对象后续用例直接调用这个 session 去发请求。这套代码其实就是业界一直推荐的做法区别在于以前我要自己回忆 Session 对象的用法现在 AI 直接一步到位把代码给我省掉的不仅是敲键盘的时间还有翻文档和回忆 API 用法的思维成本。import requests import pytest base_url http://api.example.com def login_session(phone, password): session requests.Session() login_url f{base_url}/api/login payload { phone: phone, password: password } resp session.post(login_url, jsonpayload) result resp.json() assert result[code] 0 token result[data][token] session.headers.update({Authorization: fBearer {token}}) return session def test_get_user_info(): session login_session(13800000001, abc123) info_url f{base_url}/api/user/info resp session.get(info_url) result resp.json() assert result[data][phone] 13800000001这段代码让我想起以前手写的时候反复被坑的一个细节requests.Session的 headers 要一次性 update 进去如果每次请求临时加headers{Authorization: ...}很容易发生某些用例忘了带 Header 导致到处是 401。用 Session 自动关联等于给所有后续请求穿了一件统一的“认证外套”这正是自动化脚本能稳定跑起来的前提。在这一点上AI 生成的代码反而比很多新人手写的更规范因为它在训练语料里见过了太多官方推荐写法。4.3 把 AI 生成的脚本扩展成一套可复用用例集单个脚本跑通不算完自动化测试的价值在“批量”和“回归”。我接着让 AI 生成一批基于登录态的用例获取个人信息、修改昵称、绑定邮箱每个接口都带着 Token每个用例独立断言。这段时间我的工作效率明显提升以前从写代码到调试跑通一个模块至少一下午现在给 AI 描述清楚两三个接口半天时间能铺完整条主链路的用例。具体操作上我会让 AI 按同一个模板生成多个文件文件内部统一import公共方法。比如把login_session()单独放一个conftest.py里让所有测试模块共享。要是用 Java 项目把公共逻辑抽成一个BaseTest基类AI 生成的每个接口脚本都继承它。你可以把这步理解成AI 生成的是零件组装成流水线依然要靠你的工程意识。你之前怎么写公共类、怎么设计代码结构现在把这些结构要求同样写进提示词里AI 才可能在输出时符合你的项目规范。5. 实战中踩过的坑和排查套路5.1 最经典的 401 未登录问题AI 代码遇到也会懵翻热搜词的时候看到有个人在找“注册接口测试提示 {code:401,message:未登录,请登录!}”这个报错我太熟了。很多刚入行的人第一时间会怀疑接口测试工具是不是有问题实际上 90% 的情况是你调用的是需要鉴权的接口但请求没有携带有效的 Token或者 Token 已经过期。特别是在 AI 生成脚本的场景下这种情况更常见——AI 给你按“无鉴权”的状态生成了脚本一旦遇到需要登录态的接口就会集体 401。排查逻辑我建议按下面这个顺序来确认目标接口到底需不需要鉴权看接口文档或者问开发别猜。如果接口需要 Token确认脚本里有先登录再取 Token 的步骤。确认 Token 放的位置对不对是 Header 里的 Authorization 还是自定义 Header。确认 Token 有没有过期尤其是手动复制 Token 进脚本的做法迟早被过期时间坑一把。最后再看是不是 BaseURL 配错了环境配置错误导致请求根本没打到目标服务上。AI 代码出 401本质不是 AI 的锅是它的判断前提和你的接口实际要求不匹配。只要你把“登录后获取 Token 并存进 Session”这段逻辑作为背景信息明确写在提示词里AI 生成的脚本就会自带鉴权关联不会出现裸奔式请求。5.2 生成代码跑不起来的几类高频原因AI 生成的代码不是次次都能直接运行。我把最近遇到的高频原因总结一下你在落地的过程中大概率也会撞上第一依赖缺失。Python 代码里用了pytest、requests但虚拟环境没装跑起来直接 ModuleNotFoundError。我的习惯是让 AI 在生成代码的同时输出一份requirements.txt内容然后建好虚拟环境一次性装齐。第二响应结构判断错误。AI 默认假设 JSON 响应里一定有某个字段但接口实际返回值可能叫别的名字。比如提示词里没给响应体示例AI 可能断言data.token真实响应却是data.access_token。这种情况只能靠你把真实响应贴进提示词或者让脚本先打印完整响应再做断言。第三用例之间相互污染。比如两个用例注册同一个手机号第一个跑完把数据写进了数据库第二个再跑就报“用户已存在”。我的解法是让 AI 生成测试数据时用随机手机号或者单独设计清理数据的 fixture。第四编码问题。Windows 命令行跑 Python 脚本时如果请求体里有中文或者响应里有中文控制台打印经常报 UnicodeEncodeError。让 AI 在脚本开头加上sys.stdout.reconfigure(encodingutf-8)基本能解决。5.3 排查工具和日志到底要打到什么程度我发现不少人有个坏习惯脚本跑挂了第一反应是去改代码而不是先看日志。AI 生成的脚本默认不会帮你想日志这回事所以我在提示词里经常附加一条“打印每个请求的 URL、请求头和响应体。”这招看着笨排查问题时却比什么花哨工具都好用。你自己看一遍 AI 代码时会发现它生成的请求日志往往只有一行 print你根本分不清哪次请求是登录的、哪次是获取用户信息的。所以我一般会让 AI 给每次请求加一个场景标记比如“【登录请求】”或“【获取用户信息请求】”。实际跑挂的时候看一眼日志就知道挂在哪一步根本不用猜。排查接口问题的最高效路径永远是先确认请求发对了没有再谈代码逻辑。6. 从 1 分钟脚本到能落地的自动化体系6.1 让 AI 生成的代码穿上工程外衣数据、报告、CI脚本能跑了只是起点。要让接口自动化真正产生价值必须把它放进工程体系和持续集成体系里。AI 可以帮助你完成大部分机械改造但设计思路仍然得你自己来定。以我目前一个项目为例整体结构是conftest.py放登录 Session 和全局配置。config.yaml放环境地址和账号密码。cases/目录按模块拆分测试文件。reports/目录输出 pytest-html 报告。每次跑完测试自动把报告上传到内部协作平台方便团队其他人看。这个结构我可以让 AI 先“理解”一遍然后每次生成新模块脚本时都带上同一个结构要求“生成 pytest 脚本放在 cases 目录下复用 conftest.py 里的 login_session fixture。”AI 生成的代码放到工程里结构一致、命名一致、运行方式一致维护成本瞬间就下来了。CI 集成这块我用的是 GitLab CI 的流水线把接口自动化脚本挂到每次提测分支上自动执行。大概长这样stages: - test api-test: stage: test script: - pip install -r requirements.txt - pytest -s cases/ --htmlreports/report.html artifacts: paths: - reports/这个配置 AI 也能帮你生成你只要把自己的执行目录和依赖装法描述清楚。整个过程里 AI 省掉的是写 YAML 标签、写命令格式这种重复劳动而判断哪些分支该跑、哪些环境该用、报告给谁看这些决策还是得依赖你对团队流程的理解。6.2 沉淀内部提示词模板把“用 AI”变成团队资产我最后想重点分享的一个习惯是把提示词本身变成团队的公共资产。接口测试团队的成员如果每个人各自去琢磨怎么给 AI 下指令效率差距会很大但如果团队沉淀一套标准的“接口信息录入模板”所有人都照着填新接口那 AI 生成的代码风格就会高度统一后续互相 review、互相维护都会省心很多。我们团队现在维护着一个共享文档里面分好了几个提示词段落接口基本信息模板登录鉴权模板分环境配置模板断言编写模板每个模板都是现成的填空式文本。例如生成一个新接口脚本时只需要把 Apifox 里的接口定义复制到模板的“接口信息”位置再列出要覆盖的用例场景和断言要求发给 AI1 分钟后产出的脚本基本就是项目里能直接用的风格。这就相当于把每个人“调教 AI”的经验沉淀到了组织层而不是靠个人封印在各自对话窗口里。7. 写在最后的一点实在话这一路用 AI 生成接口自动化脚本我最深的感受是工具确实解放了生产力但真正让脚本工程化、可维护的依然是那些不 sexy 的功夫——接口文档整理得清不清楚、用例场景考虑得全不全、日志和报告设计得好不好用。AI 在中间解决的是“从需求到代码”这一段重复劳动而一个测试工程师的不可替代性在于你能不能把“需求”这件事本身定义得足够清晰。对我个人来说现在每天从 Apifox 调通接口到生成一套可跑、可看报告、可进 CI 的自动化用例时间从过去的三四个小时压缩到了半小时左右。省下来的时间我没有拿去摸鱼而是花在了设计更复杂的接口场景、排查线上偶发问题、梳理更完善的测试数据上。说白了AI 确实做到了让我 1 分钟拿到脚本但拿到脚本之后怎么用出价值那才是咱们真正的手艺。如果你也想往这个方向走我的建议很朴素先拿自己最熟的一个接口把文章里的三段式提示词套上去试试跑通了再逐步扩大范围。不用怕 AI 写得不够好你要怕的是自己连让它写得更好的一分钟都不愿意花。