ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从零搭建低代码AI测试平台:核心架构与实操避坑指南

从零搭建低代码AI测试平台:核心架构与实操避坑指南 做了这么多年测试开发我见过太多测试平台项目从立项到烂尾的全过程。最典型的一种死法是平台搭得特别重要让测试人员填一堆表单、写一串配置脚本结果业务测试同事一打开就犯怵最后平台沦为只有创建者自己用的“个人工具”。但反过来如果完全不做平台靠Excel管用例、靠人肉回归一旦项目迭代加快测试又成了瓶颈。低代码AI测试平台就是在这种两难里挤出来的一条路——它把测试平台的搭建门槛从“请一个会写代码的开发”降到了“懂业务逻辑的测试也能上手”同时把AI塞进测试设计、用例生成、结果分析这些最耗人力的环节里。这篇文章我就用一次完整的实操过程聊聊怎么从零搭一套能用的低代码AI测试平台以及中途会踩到哪些坑。1. 低代码AI测试平台整体设计与思路拆解1.1 什么是低代码AI测试平台先给这个概念画个像。低代码AI测试平台本质上是两件事的结合第一件用低代码的方式把测试平台常见的功能模块用例管理、测试执行、缺陷跟踪、报告展示做出来让使用者通过可视化配置、拖拽编排来完成以前需要写代码才能完成的事情第二件把AI能力嵌入到测试的生命周期里比如用大模型帮你生成测试用例、用AI做测试结果归因分析、用自然语言描述自动化步骤然后映射成可执行的操作。这里要特别强调一下低代码不代表不用写任何代码而是把代码的“密度”降到最低。比如你可以在可视化界面上拖出一个“请求”节点、一个“断言”节点、一个“写入数据库”节点再用连线把它们串起来这就算一个接口测试用例。真正需要写代码的地方是自定义断言逻辑、复杂的参数处理这部分可以选择性地用少量脚本去补。AI在里面的角色也很清晰。它不负责替你决定测什么而是帮你扩大覆盖面、降低重复劳动。比如你往平台里丢一个接口的OpenAPI文档AI能快速补一批边界值用例你跑完一轮测试拿到一堆失败日志AI能帮你把相同根因的失败聚成一类而不是让你一条条去翻。1.2 为什么选择低代码路线我最早做测试平台的时候是老老实实用传统方式开发的——后端Java Spring Boot前端Vue权限模型、工作流引擎、定时任务这些全部自己写。做到一半发现进度跟不上因为测试平台的业务需求变化实在太快今天要加一个环境维度明天要支持新的协议后天又要对接CI流水线中的某个插件。每加一个需求前端要改页面后端要加接口数据库要加字段整套流程走下来一个小需求也得一两天。换成低代码路线之后逻辑就变了。前端用低代码表单引擎新增字段直接在页面上拖一拖流程编排用可视化的节点连线新增步骤不需要改代码业务逻辑尽量通过配置规则去实现。这样一来平台本身的迭代速度能跟上业务变化的速度测试同事提的需求当天就能在测试环境看到效果。而且低代码平台的维护成本低很多。传统平台最大的隐藏成本是人员流动——写平台的人走了剩下的同事看着几万行代码无从下手。低代码平台的配置项都存在数据库或JSON文件里业务测试人员能看懂、能修改甚至能自己维护一部分不再依赖“平台开发大神”。1.3 AI该切入哪些测试环节AI不是万金油在测试平台里更不能乱贴标签。我见过有人非要在每个按钮旁边都放一个“AI助手”结果没一个好用。我的实践经验是AI在测试平台里真正能落地、见效快的场景集中在下面几个测试用例生成。这是AI最成熟的应用点。喂给AI对应的接口定义、需求描述、历史缺陷数据让它产出符合团队规范的测试用例。这种方式能覆盖到人脑容易忽略的边界场景比如超长字符串、空值、并发请求、异常编码等。失败用例自动聚类。测试执行完之后经常会有一大片失败原因可能是同一个服务挂了、同一个数据库连接异常、或者同一个字段断言错误。AI可以把这些失败信息做语义聚类直接告诉你是哪几个用例其实是同一个根因省掉大量人工排查时间。自然语言转自动化步骤。比如你输入“登录→创建项目→上传图片→验证图片显示”AI能把这一步拆解成具体的操作序列映射到平台已有的自动化关键字或者接口调用。这块要做得特别稳不容易但作为低代码平台中的“加速器”已经很有价值。测试数据智能生成。根据字段类型和业务规则AI能生成一批符合规则的模拟数据用在做接口入参校验、页面表单测试的时候非常省力。我的建议是第一版只选其中两个场景切入不要贪多。最容易出效果的是用例生成失败聚类因为它们对测试平台现有流程的侵入度最低哪怕AI偶尔不给力也不会阻碍正常的测试工作流。2. 平台架构选型与核心模块解析2.1 低代码框架选型对比低代码AI测试平台不是一定要从零开始搭前端很多低代码框架可以拿来即用。我自己试过几种组合简单分享下选型时的考虑。先说前端低代码框架。如果你的平台偏表单密集型用例编辑、配置页面、数据维护用阿里的Formily或者Amis很合适。Amis特别好上手它通过JSON配置就能生成一个完整的后台页面对于内部测试平台这种不需要对外炫酷的页面来说效率极高。如果你的平台需要比较强的自定义交互流程比如拖拽式流程编排、画布连线可以考虑用LogicFlow或者Ant Design X6做底子。后者在流程图编辑这块非常成熟节点之间的连线、撤销重做、缩略图、泳道这些功能都有现成方案。后端这块要看你们团队的熟悉度。Python系推荐FastAPI写脚本和对接AI模型都很顺畅Java系推荐Spring Boot Flowable适合对流程引擎有强需求的场景但开发成本会高一些。我的建议是后端尽量轻很多逻辑可以放在“规则配置”里而不要写死在代码里。我用的这套是Amis FastAPI PostgreSQL Redis的组合AI部分通过HTTP方式调用大模型服务。选Amis的原因是平台里大量页面都是表单和表格Amis的JSON Schema配置正好覆盖了这些场景改动响应很快选FastAPI是因为它自带OpenAPI文档方便我用AI去生成接口测试用例——这个后面会细讲。2.2 核心数据模型怎么设计测试平台的数据模型是整个系统的心脏。设计得不好后面AI写用例、做分析都会很拧巴。我这里分享一下经过几轮迭代后沉淀下来的核心模型。第一块是项目与环境。项目表记录测试对象的基本信息和归属团队环境表存不同环境dev/test/staging/prod的基础URL、数据库连接信息、各种鉴权配置。AI在生成用例的时候需要知道环境信息才可能生成带正确域名和参数的请求。第二块是用例模型。这里的关键决策是“用例步骤”独立成表。因为接口测试用例往往不止一个请求而是多个请求串联后面一个请求的参数可能依赖前面一个请求的响应。所以用例表存基础信息用例步骤表存每一步的类型HTTP请求、数据库校验、等待、循环、脚本、参数、排序和依赖关系。AI生成用例时也是往这两张表里填充数据。第三块是执行记录与结果。执行记录表存某次测试运行的整体信息触发者、执行时间、耗时、结论执行步骤结果表存每一步的状态和输出详情。这里要注意把断言的实际值和期望值都存下来AI做失败分析时就靠这个。第四块是数据字典与公共变量。这个很容易被忽略但非常重要。把环境相关变量、全局变量、用例间共享参数放在这里一方面让AI生成用例时能引用规范参数名另一方面避免把敏感信息硬编码在用例里。2.3 AI服务如何与平台解耦AI能力如果和测试平台强耦合会带来一个很实际问题大模型API不稳定、版本更新快你把AI逻辑直接嵌到平台的业务代码里每次换模型你都得改一遍主流程。所以我的做法是把AI单独拆成一个“测试智能服务”独立部署通过HTTP和消息队列跟主平台通信。这个智能服务对外暴露几个接口生成测试用例、失败用例聚类、自然语言转测试步骤、生成测试数据。主平台调用这些接口时把上下文信息接口文档、历史用例、失败详情传过去智能服务负责跟大模型交互、做提示词拼接、处理返回结果然后把结构化结果传回主平台。这样做有三点好处一是主平台稳定AI服务挂了不影响正常的手工测试和用例管理二是换模型方便只要智能服务内部修改模型适配层外部接口不变平台其他部分完全不用动三是可以复用同样的AI服务可以给其他工具用比如性能测试平台、安全测试平台都能接。当然解耦也有代价就是需要维护一个额外的服务。但对比AI迭代的速度这个代价完全值得。3. 实操过程从零搭建低代码AI测试平台的完整步骤3.1 第一步搭建基础环境和项目骨架为了让大家能跟着操作我这里用一个简化但完整的示例来演示。假设我们要搭一个面向接口测试的低代码AI测试平台需要具备用例管理、可视化步骤编排、AI生成用例、执行测试、报告展示这几个核心功能。环境准备一台Linux服务器或本地开发机建议8GB内存以上Python 3.10PostgreSQL 14Redis 6Node.js 16用于Amis前端页面构建后端项目结构ai-test-platform/ ├── app/ │ ├── main.py # FastAPI入口 │ ├── models/ # SQLAlchemy模型 │ ├── routers/ # API路由 │ ├── schemas/ # Pydantic数据模型 │ ├── services/ # 业务逻辑 │ │ ├── executor.py # 测试执行引擎 │ │ └── ai_service.py # AI服务调用 │ └── core/ │ ├── config.py # 配置管理 │ └── database.py # 数据库连接 ├── frontend/ # Amis页面JSON配置 ├── ai-engine/ # 独立的AI智能服务 └── requirements.txt初始化数据库时核心表结构可以这样建简化版CREATE TABLE project ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE test_case ( id SERIAL PRIMARY KEY, project_id INT REFERENCES project(id), name VARCHAR(200) NOT NULL, priority VARCHAR(10) DEFAULT P2, status VARCHAR(20) DEFAULT active, created_by VARCHAR(50), created_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE test_case_step ( id SERIAL PRIMARY KEY, case_id INT REFERENCES test_case(id), step_order INT NOT NULL, step_type VARCHAR(20) NOT NULL, -- http_request, db_check, script, wait config JSONB NOT NULL, -- 存放请求地址、方法、参数、断言等 created_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE test_execution ( id SERIAL PRIMARY KEY, case_id INT REFERENCES test_case(id), trigger_type VARCHAR(20) DEFAULT manual, status VARCHAR(20), total_time_ms INT, conclusion TEXT, executed_at TIMESTAMP DEFAULT NOW() );注意config字段用JSONB这样可以灵活保存不同步骤类型的配置不需要为每一种步骤建单独的表。AI生成的内容也直接塞到这个JSONB里数据结构足够灵活。3.2 第二步用Amis搭建可视化界面Amis的玩法核心是配置JSON写一个包含列表查询和编辑弹窗的页面只需要几十行JSON。测试平台的用例管理页面核心是一个表格加一个编辑表单。用Amis的crud组件可以直接生成增删改查页面表单部分通过form组件配置字段即可。举个例子用例编辑弹窗的JSON大概是这样的{ type: dialog, title: 编辑用例, body: { type: form, api: /api/case/save, body: [ { type: input-text, name: name, label: 用例名称, required: true }, { type: select, name: priority, label: 优先级, options: [ {label: P0, value: P0}, {label: P1, value: P1}, {label: P2, value: P2} ] }, { type: textarea, name: description, label: 用例描述 } ] } }如果只是做基础用例管理这些配置就已经够用了。但低代码AI测试平台最核心的交互是“用例步骤编排”。我的做法是用正反向两个面板左侧是步骤类型列表HTTP请求、数据库校验、等待、Python脚本等中间是画布右侧是当前选中步骤的参数配置。这个界面用Amis自带的组件比较难实现我是用Amis的custom组件嵌入了LogicFlow来实现步骤连线编排再由Amis负责整个页面的布局和数据管理。这里分享一个经验低代码框架混用是完全可以的。Amis适合做结构化的表单和表格LogicFlow适合做画布类交互两者通过Amis的custom组件桥接各取所长比硬在一个框架里抠功能要快得多。3.3 第三步搭建AI智能服务AI服务是平台里最有含金量的一环。先定义接口协议我用的是/api/ai/generate-cases和/api/ai/cluster-failures这两个核心接口。生成用例的提示词设计很关键。我的做法是先让用户选定要测的接口或者输入一段需求描述然后我们把它和接口文档信息、已有用例样本一起拼接成提示词发送给大模型。提示词结构如下你是一个资深测试工程师。请根据下面的接口定义和业务规则生成尽量完整的测试用例。 要求 1. 覆盖正向、反向、边界、异常场景 2. 每个用例包含用例名、步骤列表每个步骤包含请求方法、路径、参数、断言 3. 输出为JSON格式符合如下schema [{name: 用例名称, steps: [{method: GET, path: /api/users/{id}, params: {}, assertions: [{type: status_code, expected: 200}]}]}] 接口定义 {openapi_schema} 业务规则补充 {rule_description}这里有几个细节要注意第一大模型的输出不稳定一定要做JSON解析容错。我通常会让模型先输出纯净JSON不做任何多余解释然后后端用json.loads尝试解析如果失败再做一次“提取JSON片段”的补救处理再不行就报错让用户重新生成。第二生成结果一定不能直接入库必须让用户确认后再保存。因为AI生成的内容可能有幻觉比如接口路径根本不存在、参数名写错、断言条件不符合业务逻辑。让测试人员做最后一道确认既安全又能倒逼AI生成质量的提升用户发现问题可以反哺优化提示词。第三参数处理。AI生成的接口路径里可能带了{id}这种模板变量需要转换成平台能识别的变量引用方式比如${{global.userId}}这个转换逻辑放在AI服务端免得用例库里面存了一堆不规范的模板语法。失败聚类功能实现起来更有意思。测试执行完成后把所有失败步骤的响应体、断言信息、错误信息收集起来批量发给AI服务让它做语义分组以下是一次测试执行中产生的失败结果。请根据错误原因进行聚类把根因相同的结果归为一组。 每组给出代表性错误信息、推断的根因、涉及用例列表。 失败结果 {failures_json}返回结果是一个分组列表前端展示的时候直接在报告页面里按组折叠显示。实测下来AI聚类对于“数据库连接失败”这种系统级错误识别得很准对于断言错误这种业务级错误也能给出相对合理的归纳能节省至少一半的失败信息排查时间。3.4 第四步实现测试执行引擎低代码平台的测试执行引擎本质上是“配置解释器”——把数据库里的步骤配置读出来按顺序执行并记录结果。我用的是Python的httpx和async实现并发执行。核心执行流程从数据库加载用例及步骤列表。解析全局变量、环境变量和用例内共享变量注入到步骤的请求参数中。按step_order顺序执行每一步。每一步执行完成后把返回值中用户指定要保存的字段写入共享变量区。执行断言判断该步骤是否通过。如果某一步失败可以选择“中止用例”或“忽略并继续”。记录每一步的请求、响应、耗时和断言结果。有一个很容易被忽略的点步骤依赖处理。比如一个步骤的请求参数里需要前面某一步的响应体中的token字段这时用户需要在可视化的配置里写类似${{steps[2].response.data.token}}这样的表达式。低代码平台要做得顺手必须有一套简单明了的“变量引用语法”并且支持在UI上进行可视化点选来生成这种引用而不是让用户手敲语法。我在实际实现里把变量引用语法简化成两种${{global.xxx}}表示全局变量${{steps.N.response.data.xxx}}表示引用第N步的响应。如果用户觉得这种引用方式太底层我会在界面上提供可视化映射选择需要引用的字段、选择来源步骤自动生成表达式。3.5 第五步执行测试并生成智能报告执行完测试之后报告模块要响应两个角色的需求测试执行人需要快速知道哪些用例挂了、挂在哪一步测试负责人需要了解整体质量趋势、高频失败用例。所以报告既要有明细视图也要有统计视图。明细视图就是常规的用例列表步骤详情的树形展开这里不赘述。统计视图的价值在于趋势和归因。我把每次执行的核心指标存到一张execution_summary表里包括用例总数、成功数、失败数、阻塞数、失败率、平均耗时等。有了这张表前端可以通过低代码图表组件比如Amis内置的chart直接绘制失败率趋势折线图不用写任何代码。智能报告指的是把AI聚类结果嵌入到报告中。执行完成后报告页自动展示“AI失败分析”哪些失败是同一根因、建议优先排查哪个服务、是否有历史相似失败的记录。这块实现要控制好成本不可能每次执行都把所有失败日志全部发给大模型。我的做法是只对“新增失败”做一个增量聚类历史已有的失败模式通过向量相似度去匹配命中就直接复用历史结论。3.6 低代码扩展集成uni-app和CI流水线写到这里多提一句低代码AI测试平台绝不是一个孤立的工具它一定要嵌入整个研发流程里才有价值。在实践中我把平台的执行触发器接到了CI流水线里实现了合并代码后自动触发冒烟测试。做法很简单在GitLab CI的test阶段加一个步骤调用平台提供的execute接口传入项目ID和用例筛选条件即可。还有一个典型的扩展场景如果你们的业务涉及移动端可以考虑结合uniapp低代码开发把测试平台生成的回归结果推送给移动开发人员。uniapp是比较流行的一套跨端开发框架当测试平台里有失败用例时通过webhook把失败信息发给相关人员的小程序或企业微信应用通知这样移动端开发同学不用登录平台也能及时收到反馈。这些都算不上复杂的技术但价值非常直接——平台用起来越“顺手”坚持用的人就越多平台的数据资产就越有价值。4. 常见问题与排查技巧实录实操过程中我踩过不少坑也帮别人排查过不少问题。这里整理成一张速查表配上一些经验性的说明。问题现象可能原因排查思路与解决办法AI生成的用例JSON解析失败大模型输出搀杂了解释性文字增加“只输出JSON不要解释”等强制指令后端做JSON片段提取兜底AI生成的接口路径不存在模型依赖过时的接口文档在提示词中强调以传入的OpenAPI文档为准加上项目内历史用例作为few-shot参考步骤间的数据传递取不到值变量引用语法写错或引用步骤执行失败在执行引擎中增加变量求解日志允许用户在UI上可视化点选引用字段用例并发执行时共享变量错乱Redis或内存缓存被并发覆盖执行时有隔离策略将变量放到每次运行独立的context对象中避免把变量写入全局缓存Amis渲染大数据量表格卡顿一次性加载了过多用例数据开启服务端分页默认筛选项按项目隔离低代码平台权限混乱没有设计好角色权限模型尽早引入RBAC至少区分管理员/测试负责人/测试执行人/只读访客四类角色AI失败聚类不准提示词中没有提供足够的失败上下文把请求体、响应体、断言信息、错误堆栈都传给AI限制只聚类同一次执行内的失败测试执行超时某个接口本身响应慢在步骤配置中支持自定义超时时间全局设置单步骤超时上限这里重点说三个高频问题。第一个是AI生成用例需要人审。很多团队上了AI测试平台之后希望AI完全替代人工设计用例这是个过于理想化的目标。AI可能是很好的灵感池但绝对不是可靠的需求来源。尤其是涉及复杂业务规则的时候AI往往会生成一些看起来像那么回事、但用不了的用例。所以平台一定要有“AI草稿→人工确认→入库”的流程这是底线。第二个是变量作用域与命名的规范。低代码平台用起来杂乱的根源往往不是代码能力而是变量体系混乱。建议从第一天开始就严格约定变量命名规范全局变量用project_前缀、环境变量用env_前缀、用例内部变量用case_前缀。AI生成用例时也要求严格遵循这个命名规范否则变量引用会出现各种“隐形地雷”排查起来相当头疼。第三个是AI调用的成本控制。把大模型服务接进来之后钱是以肉眼可见速度消耗的。我的实践做法是给每个项目设置AI调用限额普通用户的生成请求默认走低成本模型只有复杂分析任务才走顶级模型生成结果做缓存相同接口定义在短时间内重复生成直接返回缓存结果历史执行结果的AI聚类增量执行避免每次全量重算。结尾这套低代码AI测试平台搭建下来最大的感受是测试平台本身的技术难度其实不大难点在于怎么让平台真正被人用起来。低代码解决了“平台改不动、没人维护”的问题AI解决了“测试设计靠经验堆、失败排查靠体力翻”的问题两条线一结合一个轻量但完整的智能化测试中台就有了雏形。如果你们团队正准备做类似的事情我的建议是别一上来就追求大而全先想清楚最痛的三个场景把它做成闭环也别迷信AI能力AI生成的东西一定要有人在环上把关更别忽略非功能性需求权限、审计、数据隔离这些看起来不性感的模块往往决定了平台能不能在团队里长期走下去。我使用这套模式大概三个多月后测试用例的创建效率上来了是一方面更值钱的是失败排查的时间明显缩短了——原来一次全量回归挂了30个用例光翻日志就对根因对到头晕现在AI先把同类失败归到一起一眼就能看出这次是哪一个服务搞事情。这种效率变化才是低代码AI测试平台真正的价值。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进