它来了!全程0手写代码开发AI用例生成平台,实现DeepSeek编写测试用例+Qwen智能评审用例!
前言
这是AI编程实战-用AI开发测试平台的系列文章。
本篇将继续分享:如何用AI编程助手(主要是Claude Code),优化前一篇开发的需求分析、自动生成用例功能,真正做到基于AI自动生成测试用例,其中:DeepSeek负责编写测试用例,Qwen大模型负责用例评审。这次要优化和开发的功能清单包括:
- 需求分析、编写用例:
- 支持手动输入需求描述,支持上传TXT、Word、PDF格式的需求文件(既有功能保持不变)
- 提交后自动调用DeepSeek大模型,智能分析需求,编写测试用例(本次优化调整)
- 智能用例评审:
- DeepSeek编写用例后,调用Qwen大模型评审用例,对用例进行评审补充(本次新增功能)
- AI生成用例记录:
- 对于已生成的结构化需求,支持一键生成测试用例,并自动保存到用例生成记录列表中(本次优化调整)
- 用例弃用和采纳功能:
- 自动记录已生成的测试用例,并提供用例统计功能(本次优化调整)
- 支持用例“采纳”功能,采纳后自动导入(传统的)测试用例列表(本次优化调整)
- 支持用例“弃用”功能,弃用后自动删除条该用例(本次优化调整)
- AI模型配置:
- 自定义配置大模型接入商,调整大模型参数(本次新增功能)
- 提示词配置:
- 自定义配置编写用例的提示词、评审补充用例的提示词
一、重构需求分析及用例生成逻辑
之所以说是重构,是因为我们在《用AI开发测试平台4-开发需求分析、自动生成用例功能》中已经开发了需求分析和用例生成功能。但不知是Claude没有成功借鉴到开源项目“autogen_demo_v8”的“先生成结构化需求、再生成测试用例”的方案精髓,还是程序哪里编写逻辑有问题,需求分析、生成用例过程中始终没有真正调用大模型,每次生成的结构化需求都是固定套路,也就导致了后续生成的测试用例效果非常不理想。
所以,我决定彻底重构需求分析及用例生成逻辑。还记得之前分享过一个基于大模型的用例生成平台的开源项目AutoGenTestCase,我试用了一下,效果还可以。(详见:《一次基于AI大模型自动生成测试用例的开源项目试用体验总结》),所以这里决定参考这个项目的“大模型A编写用例、大模型B评审用例”的设计思路。下面是给AI编程工具的提示词:
请你调整现有的需求分析和用例生成逻辑,改为如下实现:
无需生成结构化需求,直接根据用户描述的需求或上传的需求文件中描述的内容,结合提示词,接入两个大模型,直接生成测试用例:
大模型A(接入DeepSeek的API)作为QA高级专家,负责编写测试用例
大模型B(接入千问大模型的API)作为资深测试经理,负责评审和补充测试用例
在需求分析菜单下单独编写一个页面“AI模型配置”,用于配置大模型,当用户填写有效的API Key保存后,后续编写和评审用例即可调用对应的大模型model参与工作
在需求分析菜单下再单独编写一个页面“提示词配置”,页面中给出“用例编写提示词”和“用例评审提示词”两个输入框,用于配置提示词。输入框中默认填充提示词,允许用户修改,提示词路径分别如下:
用例编写提示词:tester.md
用例评审提示词:tester_pro.md
上述模型配置项,如何结合提示词、调用DeepSeek模型编写用例,如何结合提示词、调用千问模型评审用例等实现,可以参考此项目:./AutoGenTestCase
历时十五分钟左右,Claude完成了所有后端功能和前端页面的开发,并自动完成了路由配置。整个过程中,我只参与了“确认”动作,没有手写或修改一行代码。

功能和页面都已开发完成,接下来就是验证功能是否可用,以及不断优化调整、打磨细节。
1.解决AI模型配置页面点击添加配置没有反应
就在我满怀期待地打开AI模型配置页面,想要配置大模型时,就发现点击“添加配置”按钮没有反应这个严重问题!
不过有了前面那么多次“AI刚一开发完成后、功能不可用或各种报错”的经验,对于这种情况我也习以为常了。直接丢给大模型解决吧:
AI模型配置页面,点击"添加配置"没有反应.请你修复这个问题
Claude给出的解释是由于scoped样式的问题。
再次测试,可以正常弹出模型配置弹框:

2.修复保存配置失败问题
弹框是可以弹出了,不过保存配置又报错400,反正过程总不会那么一帆风顺。
继续丢给大模型:
太好了,点击添加配置可以正常弹出弹框了.不过保存配置的时候失败了,报错400 Bad Request,接口响应信息:{"model_type":["“” 不是合法选项。"],"role":["“” 不是合法选项。"]}
Claude修复完成后,再次验证,保存配置成功。

3.修复千问模型调用失败问题
DeepSeek已经配置成功并测试连接成功,但是测试千问模型连接时,报错连接失败了。
把报错情况和报错信息丢给Claude:
通义千问模型测试连接失败了,错误信息:连接测试失败: 千问API调用失败: Client error '400 Bad Request' for url 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400
你用我保存的配置,帮我测试连接一下

原来是我配置的“qwq-32b”模型只支持流模式,而代码中stream没有开启。Claude查原因、修复问题、测试验证一气呵成。
我回到页面上,再次测试,连接成功。

4.修复提示词页面添加配置按钮点击无反应
前面刚一开发完成时,大模型配置页面的添加模型配置按钮点击无反应。这里提示词配置页面,点击“添加配置”也没反应。
问题反馈给Claude:
提示词配置页面,点击"添加配置" "加载默认提示词" 均无任何反应

刷新页面,查看添加配置弹框,正常弹出。
我把编写用例和评审用例的默认提示词分别提前配置在了项目的本地md文件中,在前面功能开发中,已经和Claude提前作了说明。
这里点击“加载默认提示词”,弹框正常弹出、内容正常加载展示。
确认加载后,列表数据回显正常:

5.增加基于DeepSeek+千问大模型生成测试用例
前面的配置工作都已完成,接下来就是验证最核心的用例生成功能。但是当我打开原有的“需求分析”页面,输入需求并提交时,发现还是原有的功能逻辑。也就是说Claude并没有完全按照我给出的提示词中需求进行开发,漏掉了“DeepSeek编写用例、千问评审用例”的功能部分。
所以还是如前面所说,大模型并不是无可挑剔的,它也会漏需求,也会刚一开发完成就一堆bug,也会改完一个问题就带出另一个问题......不管它在工作报告中汇报得如何完美,我们都一定要亲自验证一遍才行。
没办法,继续让大模型开发吧:
请你调整需求分析菜单功能中的需求分析和用例生成逻辑,无需生成结构化需求,直接根据用户描述的需求或上传的需求文件中描述的内容,“开始分析需求”按钮改为“生成测试用例”,点击后直接生成测试用例,其中:
读取提示词配置中的用例编写提示词+AI模型配置中的测试用例编写专家,用于编写测试用例;
读取提示词配置中的用例评审提示词+AI模型配置中的测试评审专家,用于评审和补充测试用例;

刷新后再次查看页面样式,按钮名称已经修改生效。
6.解决用例生成失败接口报错400问题
我们来测试一下它的用例生成功能。不出意外,首次使用,生成失败了,接口状态码400。

把报错信息丢给Claude:
生成测试用例失败了,接口http://localhost:3000/api/requirement-analysis/api/testcase-generation/generate/状态码400,响应信息如下:
{
"writer_model_config": [
"类型错误。期望为主键,获得的类型为 AIModelConfig。"
],
"reviewer_model_config": [
"类型错误。期望为主键,获得的类型为 AIModelConfig。"
],
"writer_prompt_config": [
"类型错误。期望为主键,获得的类型为 PromptConfig。"
],
"reviewer_prompt_config": [
"类型错误。期望为主键,获得的类型为 PromptConfig。"
]
}
Claude很快找到了问题所在,原来是后端创建任务时,错传了配置对象本身。
Claude修复后,生成用例接口不再报错了,不过生成任务ID后,后续的轮询任务报错404。
像这种404报错,我们前面遇到过很多次,大概率是因为接口请求路径的问题。继续反馈给Claude解决:
接口http://localhost:3000/api/requirement-analysis/api/testcase-generation/TASK_18DB1A04/报错404,响应信息{"detail":"未找到。"}.
Claude修复后,生成测试用例过程中,页面还是报错服务器错误,查询生成进度接口报错500,问题一个接一个。
生成测试用例过程中,页面报错服务器错误,接口http://localhost:3000/api/requirement-analysis/api/testcase-generation/TASK_11FE3F1C/progress/状态码500

报错信息丢给大模型后,我已经没心情管它是什么原因了。直接验证生成用例功能,好在这次用例生成正常,同我们前面需求定义的一致:
- 第一部分是“AI编写的测试用例”,也就是调用DeepSeek大模型编写的用例;
- 第二部分是“AI评审意见”,也就是调用Qwen大模型进行用例评审后给出的评审意见;
- 第三部分是“最终测试用例”,也就是对用例评审修改后进行的用例汇总;

7.修改需求分析菜单名称
“需求分析”还是之前取的名字了,现在来看显然不合适了,所以我准备将一级菜单“需求分析”改为“AI用例生成”,二级菜单的“需求分析”改为“用例生成”。
请将一级菜单“需求分析”改为“智能用例生成”,二级菜单的“需求分析”改为“AI用例生成”,并将修改后的“AI用例生成”菜单放在“提示词配置”菜单的后面一个位置。
一到下午三点以后Claude就歇菜了,这个优化是我在PyCharm中用通义灵码插件完成的。

下面是给通义灵码的任务指令:
当前打开的testhub_platform项目,请先激活虚拟环境,路径是/Users/chenjigang/claude_home/testhub_platform/.venv,然后帮我把一级菜单“需求分析”改为“智能用例生成”,二级菜单的“需求分析”改为“AI用例生成”,并将修改后的“AI用例生成”菜单放在“提示词配置”菜单的后面一个位置。中间如果接口调用过程中有涉及到认证的,可以使用账号testadmin,密码admin123进行登录认证.
灵码也挺快的,首次使用,很快就熟悉了项目代码,找到要调整的位置,完成了“预修改”。之所以说是“预修改”,是因为灵码并没有像Claude那样,直接更新文件,也没有弹出人机交互的确认操作,还是需要人为主动地去操作变更:先点击“应用”,再“接受”。
如果每次只简单地修改一两个文件,手动去确认还能接受;如果修改的是一个复杂功能,需要更新一堆文件,挨个手动去确认那可就太折磨人了!

另一个比较遗憾的地方是,灵码并不能直接和计算机交互,像一些在命令行运行的重启操作还是要由人来进行。这也是通义灵码对比Claude这类工具稍显不足的地方。
不管怎样,还是第一次用灵码完成了修改:

8.增加用例下载和保存到用例记录功能
继续用灵码完成下载用例相关功能需求:
claude_home/testhub_platform项目,请先激活虚拟环境,路径是/Users/chenjigang/claude_home/testhub_platform/.venv,中间如果接口调用过程中有涉及到认证的,可以使用账号testadmin,密码admin123进行登录认证.
请在AI生成用例页面,当AI自动生成用例完成后,在最底部加上“下载测试用例(.xlsx)”和“保存到用例记录”两个按钮:
用户点击“下载测试用例(.xlsx)”后,将“最终测试用例”内容写入.xlsx文件,并自动保存到本地;
用户点击“保存到用例记录”后,将“最终测试用例”内容导入到“AI生成用例记录”列表
灵码很快完成了前端代码的编写,一共修改了3个文件,也就意味着我要手动操作确认三次。另外也可以从灵码最后的响应信息中看到,它并没有完成后端API的编写。难道我还需要明确提出“同时编写前端页面和后端业务逻辑”?未免有点不够智能。
改动得越频繁,就越要手动来回确认,并且还不能一次性实现我的需求,用起来真实太麻烦了。好在Claude又恢复正常了,还是换回Claude吧。
Claude很快开发完了后端功能。不过随之而来的问题就是生成用例卡在评审环节,始终无法展示最终的用例。继续让Claude修复这个问题:
目前AI生成测试用例卡在了用例评审环节,无法生成最终的测试用例并展示

Claude完成了修复,但是我看到Django后台日志报一个语法错误,再次交给Claude处理:
Django后台日志报错:SyntaxError: 'await' outside async function

测试生成用例,失败报错了,继续丢给Claude:
生成测试用例过程中报错:测试用例生成失败: cannot access local variable 'asyncio' where it is not associated with a value

Claude又告诉我完全修复完成、没问题了。我承认Claude很强大,但是它所谓的没问题了我只信一半,还是要来亲自试一试才行。果然......我信你个鬼,又TM报错了!

生成测试用例失败,报错信息:测试用例生成失败: cannot access local variable 'asyncio' where it is not associated with a value

我怀疑可能是前面用灵码写了一半,但是它只写了前端页面实现,没有写后端接口,后来又用Claude开发后端,就导致后端逻辑与前端页面匹配不上、阴差阳错地出现了这个问题!
你看,用AI工具开发一个“用例下载”功能,开发完后把原来正常的功能搞坏了,随后修改bug,改完一个问题又连续带出另一个问题,前前后后折腾了一个多小时......
看来查问题不仅要关注前后端运行日志,还要时刻关注控制台相关信息。
反正不管怎样,现在是能正常使用了!
底部也正常显示了前面让它新增的两个按钮:

9.修复测试用例下载失败问题
正当我怀着激动的心情验证下载用例功能时,它立马就来了个“下载测试用例失败”的报错。
从来就没有一次PASS过,唉,丢给大模型处理吧:
点击下载测试用例,报错:下载测试用例失败: Failed to fetch dynamically imported module: http://localhost:3000/node_modules/.vite/deps/xlsx.js?v=22e86493

再次测试,可以成功下载到本地了。
10.调整测试用例下载内容
我打开下载后的测试用例文件发现,它把AI生成测试用例的整个过程记录下来了,而我想要的仅仅是最终测试用例内容写入Excel。
难道是我前面表达的不够细致?重新让大模型改一下。
现在测试用例已经可以成功下载了.不过我打开xlsx文件发现,你记录的是生成测试用例的整个过程,而我想要的是仅仅记录最终版的测试用例内容,请你调整一下写入Excel文件的内容.注意要做到各行、列对齐.
这次改完有点进步吧,没有保存其他无用信息,但是各列直接错位了。
继续让Claude修复:
下载下来的测试用例内容,目前还存在一些问题:
首先,标题和各列之间没有一一对应;
其次,操作步骤和预期结果没有写入文件。
请你继续修复,将生成的“最终测试用例”内容中的测试用例部分,按照各列一一对应的关系,写入.xlsx文件,无需记录“最后总结”和“建议”部分的内容。
Claude改造完,问题还是没有彻底解决。这里不得不再次搬出AutoGenTestCase项目的下载测试用例逻辑给Claude作为参考:
请你参考项目/Users/xxxx/git_project/AutoGenTestCase 测试用例生成完成后、下载测试用例,将用例内容写入.xlsx文件的逻辑,将/Users/xxxx/claude_home/testhub_platform项目的下载测试用例逻辑改造一下,只记录生成的“最终测试用例”内容中的测试用例部分,按照各列一一对应的关系,写入.xlsx文件,无需记录“最后总结”和“建议”部分的内容。
这样改造后,数据和格式确实是都对应上了。

11.修复测试用例文件缺少“操作步骤”字段
查看用例文件,总觉得少了点什么:没有"操作步骤"字段。交给Claude:
testhub_platform项目的下载测试用例,没有"操作步骤"的数据,请你把操作步骤数据也写入.xlsx文件.
虽然有前面的上下文作参考,但这次Claude还是曲解我的意思了,它把测试用例列表页也加上了导出Excel功能。不过也不算坏事,省得后面再开发了。

但AI生成用例后,导出的测试用例文件还是没有“操作步骤”字段。继续交给大模型处理:
太棒了!测试用例列表页面导出数据正常,但是AI用例生成页面导出的用例文件中还是没有“操作步骤”字段。
改了两次发现导出文件中还是没有“操作步骤”字段。重新检查了提示词,发现原来是提示词这里没有定义“操作步骤”字段。看来Claude也是“巧妇难为无米之炊”。
在给提示词中加上“操作步骤”字段后,再次生成,AI生成的测试用例以及导出的用例文件中都成功添加了“操作步骤”字段及数据:

至此,用例下载问题全部解决!
二、增加AI生成用例任务后置处理
在经过反复权衡后,我决定放弃原来做的“AI生成用例记录”相关功能。并不是不要这个列表,而是改为展示AI生成用例记录的数据。
现在我需要你改造AI生成用例记录功能,列表字段修改:
保留任务ID、关联需求、状态、生成时间、操作,去掉用例标题、优先级字段。字段说明:
任务ID:AI用例生成任务的唯一任务ID
关联需求:用户在AI用例生成页面输入需求描述时填写的“需求标题”,如果是上传需求文件,则取需求文件的名称
状态:AI用例生成的任务状态,包含:需求分析中、用例编写中、用例评审中、已完成
操作栏按钮说明:
查看详情:名字不变
采纳:名字改为“一键采纳”
弃用:名字改为“一键弃用”
功能逻辑说明:
当AI生成用例任务创建后,自动在AI生成用例记录列表记录展示该任务,并在每次任务状态更新时更新列表中的任务状态:需求分析中、用例编写中、用例评审中、已完成,分别对应用例生成过程中的:需求分析、用例编写、用例评审、完成这几个状态。列表每页默认10条记录数据,支持分页查看;
当用户点击AI用例生成页面操作栏的“查看详情”,当任务处于需求分析中、用例编写中、用例评审中三个状态时,点击查看详情,给出提示“用例正在生成中,请稍后查看!”,当任务处于已完成状态,点击查看详情,在新标签页打开查看任务详情页面,展示此任务下生成的“最终测试用例”的用例列表,列表字段与下载测试用例字段内容保持一致;列表每页默认10条用例数据,支持分页查看;每条用例前面都增加一个勾选框,同时支持列表全选,顶部增加“一键采纳”和“一键弃用”按钮,当用户多选或全选后,这两个按钮由置灰变为可点击状态:
点击一键采纳,则所选用例均导入“测试用例”列表,关联项目为生成用例时所选的关联项目,如果用户生成用例时没选项目,则导入后默认为“默认项目”,版本号默认为“基线版本”;
点击一键弃用,则自动删除所选用例;
AI用例生成-查看任务详情页面,每条用例后面都带有“查看详情”、“采纳”、“弃用”按钮:
当用户点击“查看详情”,弹出弹框,展示当前用例详情,可以直接复用现有的AI生成用例记录-操作-查看详情弹框中的字段内容与样式;
点击“采纳”,则导入当前用例到“测试用例”列表,关联项目为生成用例时所选的关联项目,如果用户生成用例时没选项目,则导入后默认为“默认项目”,版本号默认为“基线版本”;
点击“弃用”,则自动删除当前用例;
这样一改,就是对原来的AI用例生成记录的完全重构了。预计问题会比较多。
历时十分钟多点,Claude改造完成:
先来看任务列表页面:

再来看看任务详情页面,先不管功能正确性,起码在页面样式和数据展示上面,已经达到了我预期的90%,查看测试用例详情也没问题。
1.修复AI生成用例记录列表页面默认数量展示问题
前面生成的用例次数不够多,等后面用例生成记录超过10条数据,就发现了这个问题。
AI生成用例记录每页默认10条数据,但现在展示的是20条

Claude修复完成,刷新页面,数据每页展示为10条数据。
2.优化AI生成用例记录列表页面布局
列表数据问题解决了,不过页面布局实在是有点丑,关联需求字段宽度过大,而操作栏的三个按钮则分成了三行,这里做个调整。
AI生成用例记录列表页面布局请按如下要求调整:
关联需求字段宽度过大,缩短一半,支持自动换行显示;
操作栏按钮调整为在一行显示
“已完成”状态显示为绿色背景,“失败”状态显示为红色背景,“需求分析中”显示为黄色背景,“用例评审中”显示为蓝色背景;
这么一改完,看着舒服多了。不过按钮只显示了两个,还有一个“一键弃用”按钮没显示出来。
AI生成用例记录列表页面,操作栏按钮只显示了两个,还有一个“一键弃用”按钮没显示出来。请你将“关联需求”字段宽度减少一半,并增加操作栏宽度,保证三个按钮在一行显示
列表布局优化后的最终效果如下:

3.修复AI生成用例记录列表只统计当前页数据问题
当前顶部任务统计只统计当前页的数据,我想要把它调整为统计所有数据。
AI生成用例记录列表只统计当前页数据,请你调整为统计所有数据,不管切换到第几页,顶部数据统计始终不变。

Claude修改完成后,顶部数据统计正确。切换到第二页,数据也统计正常。
4.测试查看任务详情功能
我手动输入了一些需求描述,提交生成测试用例。
按照前面一开始开发时的需求约定:“当任务处于需求分析中、用例编写中、用例评审中三个状态时,点击查看详情,给出提示“用例正在生成中,请稍后查看!”。
刚好当前任务正处于“用例编写中”,点击后成功弹出相应提示,测试通过!

任务完成后,再次点击“查看详情”,成功在新标签页打开任务详情页面,展示该任务下生成的测试用例列表。与前面需求要求的一致,测试通过!
5.测试“采纳”用例功能
我们随机选择一条AI生成的用例,来测试“采纳”功能。
二次确认后,可以看到,AI生成的用例已经导入测试用例列表。

查看导入的用例详情,数据展示正常。这两块功能一次测试通过,真是难得啊!
6.修复采纳用例后自动删除该条用例的问题
不过这里也存在一个问题就是:采纳用例后,该条用例数据在任务详情中就查看不到了。不知道是自动隐藏了还是删除了。前面我只是要求弃用后删除该条用例,并没有要求采纳后也删除该条用例。所以这里还是需要再调整下。
在查看任务详情页面,采纳用例后,该条用例数据在任务详情中就查看不到了.这里调整为,不管是单条采纳还是批量采纳,该条用例都始终保留.已采纳的用例允许多次采纳.

再次测试,采纳后,数据依然保留,验证通过;测试弃用功能也没问题,弃用后,该条数据不在列表中显示。
7.任务详情中批量采纳失败问题修复
单条数据可以正常采纳,但是当我使用批量采纳的时候,还是报错了404。这种404的问题出现很多次了,要么是接口路径错误,要么是后台没有实现这个接口功能。
将报错信息丢给大模型处理:
批量采纳接口http://localhost:3000/api/requirement-analysis/api/testcase-generation/TASK_D8783A41/batch-adopt-selected/报错404
找到问题了,原来是前端调用的接口路径缺少了“/api”前缀。
但我试了一下,接口还是报错404,继续丢给大模型。
不知咋的,Claude这次只给出了解决方案,并没有直接帮我修改文件。于是我自己在工程中找到了这个vue文件,将“batch-adopt-selected”改为了“batch_adopt_selected”:
但是重新请求后又报错500了......但起码从报错信息来看,不是接口路径不对的问题了,而是导入的时候'project_id'为空导致,应该是导入时没这个字段值、但Django模型又没有赋默认值的问题,说明和前面修改的问题无关。
继续把报错信息丢给Claude:
我按照你的提示把前端TaskDetail.vue中的接口请求路径改为了`/api/requirement-analysis/api/testcase-generation/${this.taskId}/batch_adopt_selected/`,但是此时批量采纳接口又报错500,Django后台日志提示:导入选中测试用例失败: (1048, "Column 'project_id' cannot be null")
ERROR 2025-08-06 10:20:55,057 log 91444 6138425344 Internal Server Error: /api/requirement-analysis/api/testcase-generation/TASK_FD6D357D/batch_adopt_selected/
ERROR 2025-08-06 10:20:55,058 basehttp 91444 6138425344 "POST /api/requirement-analysis/api/testcase-generation/TASK_FD6D357D/batch_adopt_selected/ HTTP/1.1" 500 84
Claude的解决方案是自动创建了一个默认项目:
前面我们在给Claude的需求描述时,是让它填充“默认项目”,可能是系统中没有这个默认项目它才创建的,不管怎样,先解决问题就行,后续不满意再调整吧。
再来测试一下一键采纳功能。刚选了第1、2两条,成功采纳了:

再来看看手工录入的测试用例列表,成功导入了这两条用例,并且关联项目也是前面Claude修改问题时默认创建的“AI生成用例项目”。
8.修复任务列表中一键采纳失败问题
再来试试任务列表中一键采纳功能,仍然报错404.
后端日志中打印的“/batch-adopt/”的接口路径还是用的“-”连接符,而不是“_”,说明前端vue文件还有地方没改全。
这次出错的位置不是任务详情,而是AI生成用例列表。所以就不是修改TaskDetail.vue文件了,而是修改GeneratedTestCaseList.vue文件。这里把“/batch-adopt/”的接口路径改为了“/batch_adopt/”。我看到一键弃用接口路径也存在同样的问题,想来前端调用的时候也存在接口404的情况,顺手也给它改了。
再来测试一下任务列表的“一键采纳”功能,和前面任务详情中批量采纳情况一致,刚改完接口路径、报错500了。问题仍然是出在导入时Django没有给默认值,'project_id'为空的问题。
有了前面单个用例采纳失败问题的解决经验,批量采纳失败问题,Claude解决起来应该会得心应手一些:
AI生成用例记录列表,使用一键采纳功能,/api/requirement-analysis/api/testcase-generation/TASK_89D6A48C/batch_adopt/ 接口报错500,Django提示“导入测试用例失败: (1048, "Column 'project_id' cannot be null")”。你也按照前面一次的解决思路,一键采纳时,关联项目默认为“AI生成用例项目”吧!
再来测试一键任务列表中的一键采纳功能,功能正常了。
然而,当我查看数据是否正常导入到测试用例列表时,发现虽然用例导入成功,但是数据字段对不上!它把用例所有字段内容都导入到标题里了。

AI生成用例记录列表,使用一键采纳功能,提示一键采纳成功.然而查看测试用例列表,发现各用例数据字段对应不上,请你修复这个问题!
再次测试一键导入功能,查看导入后的数据,这次字段对应上了。
9.修复一键弃用后,数据仍在列表显示的问题
弃用功能,经过测试后发现两个问题:
- 在AI生成用例记录列表中使用一键弃用功能后,该任务数据仍在列表中显示(这里应该是前面没有给出明确需求导致)
- 在任务详情中弃用单条用例或批量弃用后,该数据不再显示,但刷新页面后,该用例数据又重新显示

交给大模型来修改,重新明确需求:
弃用功能,经过测试后发现两个问题:
在AI生成用例记录列表中使用一键弃用功能后,该任务数据仍在列表中显示。请你调整为:一键弃用后,该任务数据自动删除,不在AI生成用例记录列表中显示,同时顶部任务统计也不再统计该条任务。
在任务详情中弃用或批量弃用后,该数据不再显示,但刷新页面后,该用例数据又重新显示。请你调整为:弃用或批量弃用后,自动删除该条用例,刷新页面后也不再显示。当该任务下的所有用例都被弃用后,自动返回到AI生成用例记录列表界面,同时该任务数据自动删除,不在AI生成用例记录列表中显示,同时顶部任务统计也不再统计该条任务。
任务列表中一键弃用测试正常,但是任务详情页面启用或批量弃用报错404,怀疑又是接口路径的问题。问题真是没完没了了!
之前还好好的,虽然业务逻辑不是我想要的,但是接口调用没问题。改了个业务逻辑就又出问题了,接口路径多了个“/api”前缀出来。
Claude改完又来问题了,也是无语了!
弃用单个测试用例时出错: The `request` argument must be an instance of `django.http.HttpRequest`, not `rest_framework.request.Request`.
ERROR 2025-08-06 11:48:25,030 log 56941 6132887552 Internal Server Error: /api/requirement-analysis/api/testcase-generation/TASK_FD6D35
7D/discard_single_case/
ERROR 2025-08-06 11:48:25,030 basehttp 56941 6132887552 "POST /api/requirement-analysis/api/testcase-generation/TASK_FD6D357D/discard_s
ingle_case/ HTTP/1.1" 500 136
10.修复弃用或批量弃用,用例编号变化问题
再次测试弃用功能,此时接口可以正常调用、不报错,数据也成功删除。但是,我发现了一个问题,弃用了第1条用例后,第2条用例的用例编号发生了变化,例如:从TC002变成了TC001.
弃用了第1条用例后,第2条用例的用例编号发生了变化,例如:从TC002变成了TC001.请你修复这个问题,保证用例编号不变.
它这么改完,查看任务详情,用例列表直接为空了:
查看任务详情,没有任何测试用例数据,接口/api/requirement-analysis/api/testcase-generation/TASK_4B5B545E/ 查不到数据
任务列表中一键弃用没问题了,任务详情也能查询到数据。但是弃用单条用例,报错400
弃用单条用例,接口http://localhost:3000/api/requirement-analysis/api/testcase-generation/TASK_DC282B3C/discard_single_case/报错400,响应信息:{"error":"测试用例索引 0 超出范围"}
弃用单条用例接口调用正常了,但是我发现弃用完单条用例后,所有测试用例编号都发生了变化,由"MEETING_"开头变为了"TC"开头,并且操作步骤的内容也变为空了,继续交给大模型修改。
再次验证,这次用例编号倒是没有变化,没有重新编号。但是操作步骤的内容统一变为了“参考测试目标执行相应操作”:
弃用单条用例后,用例编号倒是没有变化,没有重新编号。但是所有用例的操作步骤的字段内容统一变为了“参考测试目标执行相应操作”。
这次终于是全部修复完成了,弃用用例后:
- 用例编号保留了原来的编号,没有重新编号;
- 操作步骤也没有清空设置默认值;
- 刷新页面后,该条用例也没有重新显示;

11.修复批量采纳用例,没有携带关联项目字段值
在上面修复了一系列bug,再次系统地测试采纳和批量采纳功能的时候,又发现了一个问题:采纳任务A下的单条用例,导入到测试用例列表后,携带了关联项目字段值;批量采纳任务A下的用例时,导入到测试用例列表后,没有携带关联项目字段值,关联项目字段值默认为“AI生成用例项目”(任务A创建时实际是有关联项目数据的)。
重新测试批量采纳,导入测试用例列表后,关联项目正常展示。
至此,AI生成用例所有基本功能均已测试通过!
小结
在经历了两大项、合计22小项的功能优化、bug修复后,我们终于完成了对前面“需求分析、用例生成”功能的全部重构,实现了如下业务需求:
- 增加了AI模型配置页面,允许用户自定义配置大模型类型,并提供测试连接功能
- 增加了提示词配置页面,读取本地默认提示词文件,允许用户自定义修改用例生成和用例评审的提示词
- 保留既有的需求输入、上传需求文件功能,调整用例生成逻辑为:DeepSeek编写用例、Qwen评审用例
- 增加了下载测试用例功能,一键导出到.xlsx文件
- 调整AI生成用例记录列表数据,改为展示用例生成记录数据
- 增加查看任务详情页面,支持单条、批量、全部采纳和弃用用例功能,一键导入到手动录入的测试用例列表
下面通过一个视频来看下整体实现效果:


