告别 Postman?我用AI编程构建了自己的接口测试工具

2025-12-10 16:43:27
文章摘要
用AI编程构建一个类Postman的接口测试工具

前言

Postman 几乎是开发与测试领域最受欢迎的接口调试工具。过去,我也曾梦想能仿照它打造一套属于自己的工具,融入个人的理念与特色功能。然而受限于编程能力,这个想法一直停留在构想阶段。

但近年来,随着 AI 大模型的迅猛发展,人与人之间的编码能力差距正被迅速拉平。更令人振奋的是,“氛围编程”(Vibe Coding)悄然兴起——人们不再需要亲手写下每一行代码,只需用自然语言清晰表达想法,就能参与到工具或平台的开发中。如今,开发不再只是程序员的专属,每个人都有机会成为创造者。

这不,我基于原有的“AI测试用例生成平台”,借助 AI(主要为 Claude Code)进一步开发了一套类 Postman 的接口测试功能。在实现核心能力的基础上,融入了多项自主创新的特色功能,推动平台从“测试用例管理”向真正意义上的“一体化测试平台”迈进了一大步。

从本篇开始我们就将进入接口测试的开发之旅,后续的文章也会持续记录和分享接口测试相关功能的开发过程。欢迎持续关注!

接口测试平台初步规划的功能清单如下:

  1. 项目管理:创建和展示接口测试项目,目前规划支持HTTP和Websocket两种类型;
  2. 接口管理:集合和接口列表,提供新增、查看、编辑、删除接口功能;
  3. 自动化测试:创建测试套件,在测试套件中关联待测试的接口;
  4. 请求历史:展示所有发起过请求的历史记录;
  5. 环境管理:支持全局变量(对所有项目生效)和局部变量(只对关联项目生效);
  6. 测试报告:集成Allure开源测试报告插件,一键生成测试报告;
  7. 定时任务:支持创建Cron表达式、固定时间间隔、一次性执行等多种类型的定时任务;
  8. 邮件通知:支持配置多种形式的通知,例如邮箱、企微机器人,定时任务执行后,自动发送通知;


一、开发接口测试功能

这里我们在原AI用例生成平台的基础上直接新增一个“接口测试”的一级菜单入口,用于管理和使用接口测试相关功能。由于是首次开发接口测试模块,所以一次性输入的需求不要过多,这里我们先开发:项目管理、接口管理、自动化测试、请求历史、环境管理这些基本功能。下面是给大模型的需求明细:

请你在testhub_platform项目(路径:/Users/xxxx/claude_home/testhub_platform)的基础上,新增一个“接口测试”的一级菜单,你可以结合apifox和Postman的优秀设计,帮我开发实现一套接口测试功能。这个接口测试需要提供以下功能:

  1. 项目管理:展示创建的所有项目,列表字段包括:项目名称、项目类型、项目状态、负责人、开始日期、结束日期
  2. 新建项目:点击新建项目按钮,弹出新增项目弹框,字段包括:项目名称(必填)、项目描述(非必填)、项目类型(必填,选项包括:HTTP、Websocket,单选)、项目状态(必填,单选,选项包括:未开始、进行中、已结束)、负责人(下拉单选,必填,下拉数据范围为当前系统所有账号)、团队成员(下拉选择、多选,下拉数据范围为当前系统所有账号)、开始日期、结束日期
  3. 项目列表默认带一个示例项目,可以借鉴apifox的宠物店示例项目
  4. 接口管理:支持手动新增接口,页面风格、功能流程及字段参考Postman
  5. 自动化测试:参考apifox页面及功能实现
  6. 请求历史:分为HTTP和Websocket两个tab页,分别展示各自的接口请求历史,点击后进入接口历史详情
  7. 环境管理:包含全局环境变量和局部环境变量,风格和设计实现参考Postman,其中“全局环境变量”,针对所有项目生效;“局部环境变量”针对关联项目生效。

历史半小时左右,Claude完成了接口测试功能的开发:

按照以往的经验来看,Claude刚刚开发完成的新功能,通常点哪哪报错。

不出意外,当打开项目管理页面时,就出现了报错!

自动化测试因为也要调用项目列表接口,所以也出现了报错。

环境管理列表也报错加载项目列表失败,看来问题源头就出现在了这个项目列表接口

问题比较多,急也没用,我们一个个来定位修复吧!


1.修复项目管理列表接口404

首先是接口测试,点击项目管理,提示加载项目列表失败,接口http://localhost:3000/api/api/api-testing/projects/报错404。

看控制台接口报错信息,应该是接口请求路径多了一个“/api”前缀。

这里问题比较简单,我们就不让大模型修改了,直接找到前端的vue文件,删掉对应接口路径中多余的“/api”前缀。

刷新页面,项目管理列表不再报错。


2.修复项目管理页面,刷新后报错404

但是项目管理页面,刷新后还是报错404。

项目管理页面,路由http://localhost:3000/api-testing/projects,刷新后页面404,注意不是接口404

Claude很快找到了问题并完成了修复,原来是vite配置中的设置“/api”会拦截这个路由请求,误认为是接口请求。

这个问题解决了,但与此同时,又出现了“加载项目列表失败”和“加载用户列表失败”的问题,并且都是接口404报错。

很好,你成功解决了刷新后找不到项目管理页面的问题。但是现在又出现了“加载项目列表失败”和“加载用户列表失败”的问题,接口http://localhost:3000/api/api-testing/projects/?page=1&page_size=20http://localhost:3000/api/api-testing/users/均报错404

Claude很快找到了问题所在,但是它提供的解决方案,又改回了“刷新页面找不到项目管理页面”时的代码,改回去肯定又会还原这个bug。难道死循环、出不来了?

果不其然,Claude这么一改,B问题解决,又把A问题还原回去了。

又抛给它,重新改了一版,现在访问正常了。

页面刷新后没有404,接口也没有报错404.


3.测试新建项目

新建项目弹框的各字段信息与我们之前需求中要求的一致,例如下拉选择、必填项、下拉数据范围、单选多选等。

提交创建,也能够创建成功。


二、测试接口管理页面相关功能

1.修复接口管理页面报错加载项目失败

访问接口管理页面,报错“加载项目失败”,接口报错404。还是和接口请求路径有关,接口路径中多了一个“/api”的前缀。

精准反馈给Claude:

访问接口管理页面,报错“加载项目失败”,接口报错404,http://localhost:3000/api/api/api-testing/projects/接口路径多了一个“/api”前缀。

Claude真是个老六啊!修改过程中,还能自我反思,并自我改正回来。

问题就出在这些vue文件上,不同文件的接口请求路径不一致,修改这些文件,去掉多余的“/api”前缀就可以了。还好Claude没有误入歧途、及时调整了回来。佩服!

重新刷新页面后,接口管理没有再报错获取项目失败,这个问题是修复了。

但是又报了“加载环境失败”和“加载集合失败”的报错,看接口请求也是多了“/api”前缀,都是同一类问题

这一次,为了彻底杜绝此类问题,我们直接来手动修改这几个vue文件,把所有接口请求路径中多余的“/api”前缀全部去掉!

再次刷新接口管理页面,没有再出现接口404相关的报错,集合也能够成功创建。其他几个tab页自动化测试、请求历史、环境管理也能够正常访问。


2.新增“添加接口”按钮

接口管理页面有一个很致命的问题:没有添加接口的按钮入口!看来Claude在开发需求时还是丢三落四了。

接口管理页面没有添加接口的按钮入口,请你添加一个“添加接口”的按钮入口。

我这里只是简单地输入了一个添加“添加接口”按钮的指令,并没有给出明确的需求明细,可以看到,Claude也贴心地把表单字段、功能流程都一并想到了。

Claude很快完成了页面功能开发,但开发出来的效果明显不是我想要的(Claude:怪我喽?)。


3.改造创建接口页面

我看示例项目中的接口页面是按照要求仿写的Postman的,这里就直接让Claude参考这个页面来改造实现。

请你改造创建接口页面,点击添加按钮,不弹出添加弹框,直接进入空接口页面,样式参考“获取宠物列表”页面样式

创建新接口的样式已经修改,但是创建失败了。

点击“创建新接口”,提示创建失败,http://localhost:3000/api/api-testing/requests/接口状态码400,响应信息{"body":["该字段不能为 null。"]}

再次创建一个“获取版本列表”接口,用来查询我们本项目下的所有版本,创建成功。


4.验证发送接口请求功能

接口已经成功创建了,接下来就是验证发送接口请求。

我们先在环境管理中创建一个“测试环境”的局部环境,关联项目选择我们前面创建的“测试新建项目”,添加基础URL,用来发起请求。

添加成功,列表显示正常。这里关联项目没有带出数据,暂时先不管这个问题,先保证环境变量可用,发起请求没问题。

我们把前面新建的“获取版本列表”发送请求,环境选择“测试环境”,但是发送请求失败了

仔细观察一下,原来是地址栏中默认的URL变量用的是“base_url”,而我们前面在测试环境的局部环境下添加的是“test_url”,所以要把地址栏中的改为“test_url”。

再次发送请求,出现了401,未认证。说明接口发起是没问题的,已经达到了后台服务,只是后台有认证机制,返回了401.

原来是我们在测试接口中忘记带上请求标头中的Authorization字段,导致请求发出后,后台无法认证。

在接口请求的请求头中我们也加上Authorization字段。但是还是返回401未认证。查看“/execute”接口请求体会发现,它并没有携带我们添加的请求头信息。

在让大模型解决问题的过程中,直到我看到下面这个提示,我才发现是我保存错地方了。头部的认证信息authorization,应该保存到headers,我保存到params里去了。无语了,原来困扰了两天的问题,竟然是由于我操作不当、犯了如此低级失误引起的。说出来真是贻笑大方!

再次发起请求,成功获取到响应信息。


5.测试添加Post接口

上面是添加的Get类型的接口,这里就以本系统项目中的“添加版本号”接口为例,来测试一下Post类型的接口。参数如下:

{"name":"6.5.8.8","description":"CTI6.5.8.8版本","project_ids":[5],"is_baseline":false}

请求虽然发送成功,不过还是返回了错误提示:

看来下Django后台日志,咦,怎么把参数都拼接到URL地址里了。这里我意识到,我又保存错地方了......

应该把参数放到body里保存,再次发起请求,发送成功,响应信息正常。

查看版本号列表,存在新添加的接口,测试通过。这次算是最顺利的一次。


6.修复描述框不可输入问题

经过测试发现,接口详情页的描述框无法输入任何内容,这里需要修复它。

接口详情页的“Description”描述框无法输入任何内容,请你修复这个问题。

Claude改错位置了,它给整个接口加了一个描述框。所以,这里也给我们提了个醒,给大模型的提示词一定要精确,让它能够精准地识别到我们的意图。

重新给它来一个更精确的描述:

接口管理-接口详情页面,Params和Headers下的Description描述框无法键入任何内容,请你修复这个问题。另外把前面一次接口详情页新加的“请求描述”框去掉。

刷新页面后,重新键入,保存成功,测试通过。


7.修复集合编辑不可用

右键集合,弹出如下菜单,其中编辑按钮点击后无反应。

接口管理中,鼠标放在已创建的集合上,右键弹出的菜单中,“编辑”按钮点击后无反应。编辑左侧集合树不用提供对话框,点击"编辑"按钮,集合名称变为可编辑态,允许用户修改集合名称即可。

刷新页面后,再次编辑,集合变为可编辑态,修改名称后保存,修改生效。


三、接口管理功能完善与问题修复

1.完善集合和接口的删除功能

集合树及菜单提供的删除功能,点击后无效。应该是一开始Claude写的一个类似于占位符的菜单,并不起到具体作用。这里我们来完善这个功能。

接口管理页面左侧的集合树以及接口,邮件弹出的删除功能无效,请你完善这个功能.

删除集合,弹出二次确认弹框,确认后成功从列表删除,测试通过。


2.修复增删改接口或集合后左侧栏自动收起问题

目前无论是新增、编辑、删除集合或接口,左侧的集合都会自动收起。下面来优化这个功能。

目前无论是新增、编辑、删除集合或接口,左侧的集合都会自动收起。请你去掉这个自动收起效果,但是要及时更新集合或接口列表。

刷新页面,测试,问题还是存在。问题重新抛给Claude:

目前新增、编辑、删除集合或接口,仍然会自动收起集合,请继续修复。

再次测试,集合没有自动收起。


3.修复更新集合名称、错修改接口名字

不过这里也发现另一个离谱问题就是:更新集合名称,结果最后修改的是接口的名字。

编辑集合名称,保存后,接口名字被修改。

过往的经验告诉我们,大模型不完全靠谱,千万别什么都信它,一定要自己亲自试试才行!

编辑集合名称,保存后,第一个集合的第一条接口的接口名字被修改,请修复这个问题。

再次测试,集合名称更新正常,列表也没有自动收起,验证通过!


4.修复接口详情中保存Description字段不生效问题

接口Headers中,字段填写Description保存,刷新后数据丢失,说明没有保存成功。交给大模型解决:

接口Headers中,字段填写的Description没有保存成功。

刷新后,重新测试,验证通过。


四、自动化测试功能完善与问题修复

1.修复保存测试套件没有保存执行环境数据

接口自动化测试页面,创建测试套件,保存后再次编辑,执行环境字段数据丢失。

创建测试套件,填写相应信息,选择了执行环境,保存后再次编辑,执行环境字段数据丢失。

刷新页面后,测试套件关联的执行环境成功显示:


2.修复测试套件添加接口失败问题

添加请求到测试套件,报错添加失败了。

添加请求到测试套件,http://localhost:3000/api/api-testing/test-suites/1/add-requests/接口状态码404

添加请求到测试套件是正常了,但是移除请求也出现了同样的404问题。

从测试套件中移除请求,接口http://localhost:3000/api/api-testing/test-suite-requests/1/响应码404,请你修复这个问题。

Claude修复通过,再次测试移除接口,移除正常。不过要刷新后才能更新。


3.测试套件中接口列表增加自动刷新

接上面,目前测试套件的接口请求列表,新增或移除接口没有自动更新,需要手动刷新页面后才能更新显示。这里给它加一个自动刷新功能:

测试套件的接口请求列表,新增或移除接口没有自动更新,给它加一个自动刷新功能.

再次新增、移除接口,列表自动刷新成功!


4.修复测试套件执行失败问题

测试套件新增、移除接口都正常,接下来就要验证测试套件能否够正常运行。

选择执行测试套件,执行失败了。执行结果中可以直接看到报错信息,将报错信息丢给Claude解决即可。

运行测试套件,执行失败了,错误信息“'list' object has no attribute 'items'”

原来是前面修复接口headers问题时修改了数据格式,但测试套件中没有同步修改。

再次测试,全部测试通过!


5.测试套件添加接口增加已勾选状态关联

目前给测试套件中添加接口,没有关联已勾选状态。例如已添加了“添加版本号”接口,点击添加请求,弹出的列表中,已关联的“添加版本号”接口是已勾选状态,其他未关联的接口也是已勾选状态。

我们给这个地方做个优化:

测试套件中点击添加请求,弹出的接口列表中,去掉默认全选状态,只预先勾选已关联的接口。

再来测试一下,接口勾选情况并没有完全对应上,理论上这个“添加版本号”接口应该是已勾选状态才对。

打开接口选择对话框时,弹出的列表中,套件中已有的接口没有展示为已勾选状态.

交给大模型重新修复后,接口已勾选状态对应正常。


6.修复执行历史中耗时统计始终为0的问题

执行历史列表,无论测试套件执行成功或是失败,耗时统计一直为0,这里把它改为统计平均耗时。

测试套件详情页,执行历史列表,将“耗时”改为“平均耗时”,同时统计逻辑改为统计该次执行过程中所有请求的平均耗时。

刷新页面,执行历史中“平均耗时”字段及统计数据展示正确。


五、请求历史页面测试与问题修复

请求历史菜单页没有什么特别的功能,就是记录每次的请求历史。不过这里有两个功能“查看详情”和“重新发送”还是要简单看下:

1.请求详情弹框数据展示正常;

2.添加版本号接口点击“重新发送”,请求也没问题;



六、环境管理功能测试与问题修复

前面几个项目管理、接口管理、自动化测试、请求历史的基本功能我们都已测试、修复问题完成,接下来就是要重点测试和打磨“环境管理”相关功能。


1.修复全局变量添加后无法选择到问题

这里我添加了一个全局变量“开发环境”,它的作用域是全局的。也就是说,所有项目的接口详情页,选择环境时都应该能选择到它。

但是在接口管理中,选择环境时却没有这个选项。

我在全局变量中添加了一个名为“开发环境”的环境,它的作用域是全局的,理论上应该所有项目的接口在选择环境时都能选择到它才对,但是目前下拉选项里没有这个选项。

Claude汇报修复完成,我重启后台服务,刷新页面,重新测试发现接口详情中,选择环境时,下拉选项还是搜不到全局变量。从汇报结果来看,它应该是没修改对位置。它修改的是新建、编辑测试套件时的下拉数据范围,而不是接口管理-接口详情中选择环境的下拉数据范围。

没关系,一开始我也没考虑到测试套件这边的下拉框,也算是弄巧成拙了。再次让它修复完善即可:

请你把接口管理-接口详情,选择环境的下拉框数据范围也修改为同样的逻辑。

刷新页面后,再次测试,数据下拉展示正确。


2.解决选择全局变量后,请求发送失败问题

全局变量是可以选择了,但是不要高兴太早,选择全局变量后,请求发送失败了,接口报400错误。我就说没那么顺利。

我又检查了一遍全局变量“开发环境”的变量名。你猜怎么着?原来是我变量名写错了......接口中用的是“test_url”,全局变量中定义的是“base_url”。

将开发环境中的变量名“base_url”修改为“test_url”,再次发起请求,发送成功,接口成功返回数据!


3.修复局部环境列表不显示关联项目问题

新建局部环境变量时选择了关联项目,提交后局部环境变量列表中、查看变量详情,关联项目字段无内容。

新建局部环境变量时选择了关联项目,局部环境变量列表中、查看变量详情,关联项目字段值未回显

很好,关联项目已经正常显示。


4.修复局部环境变量复制接口400报错

就在前面修复完了未回显关联项目问题后,我看到全局环境变量和局部环境变量列表都有个“复制”按钮,于是就简单试试,全局变量复制功能正常,局部环境复制失败了。接口响应码400,返回信息“局部环境变量必须关联项目”。有点莫名其妙,我看接口报文里明明传了关联项项目的。

局部环境变量列表点击“复制”,接口http://localhost:3000/api/api-testing/environments/响应状态码400,响应信息:{"project":["局部环境变量必须关联项目"]}

Claude修改后,复制局部环境变量依然报错400。我看到复制全部变量接口中带了一堆冗余参数。

把这个信息提供给Claude,去掉冗余信息后,测试还是有问题。

后台把前后台所有日志信息都丢给大模型分析,结果还是没有修复成功。

一个小小的问题折腾了一小时,就在我实在是没耐心搞下去、想要放弃的时候,做了最后一次尝试,Claude在代码中加入了调试信息后,我在Django日志中发现了问题所在:

DEBUG project: None (type: <class 'NoneType'>)

project为空,说明后台还是没有接收到project字段值!害人不浅啊!

终于找到了问题所在,再次修复后,复制局部变量成功,验证通过。也是不容易......

不过,局部环境变量复制失败问题修复后,关联项目字段值又不显示了。先不管了,这个问题遗留处理吧。


小结

历时三天,终于完成了类 Postman 接口测试平台的核心功能开发,初步实现了项目管理、接口管理、自动化测试、请求历史记录和环境管理等基础模块。虽然距离真正替代 Postman 还有很长的路要走,但这是一个令人兴奋的起点。

值得一提的是,这是首次尝试完全借助 AI 编程(Claude Code)完成一个完整工具的开发。初期生成的代码虽能跑通流程,但也暴露出不少问题:需求理解存在偏差、功能实现不完整、边界处理缺失……这提醒我们,AI 生成代码只是起点,真正的价值在于后续的持续测试、迭代优化与细节打磨。

接下来,我将持续更新「AI 编程实战:用 AI 打造自己的测试平台」系列,敬请期待!

欢迎关注,一起探索 AI 时代的开发新范式!

声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。
标签:
大模型
Claude