
我现在在做一套中后台页面的测试代码生成 agent 。这个场景是前端的代码与测试代码都是二次封装的内部库(已经建了内部库的 skills )
也就是说,这不是一个“面对任意前端页面自由发挥”的问题,而是一个:
前端代码有固定规律、测试代码也有固定框架的场景里,怎么借助 AI 做测试生成。
{ component: 'CustomInput', fieldName: 'fieldCode', label: '字段 A', rules: z .string({ message: t('请输入字段 A') }) .min(1, t('请输入字段 A')) .max(20, t('最多输入 20 个字符')) .regex(/^[A-Za-z0-9\\-. *+\\/%$]+$/, t('格式不符合要求')), rulesBlur: z.string().superRefine(async (value, ctx) => { const checkResult = await verifyFieldUniqueness('fieldCode', value) if (!checkResult?.passed && checkResult?.msg) { return ctx.addIssue({ code: 'custom', message: t(checkResult?.msg), }) } }), } 这类页面里,很多逻辑不是散落在各处,而是通过字段配置表达:
test('列表查询', async ({ page, tableLocator, searchLocator, formActions, selectActions, datePickerActions, }) => { const search = searchLocator.createSearchArea(TABLE_ID) const table = tableLocator.createTable(TABLE_ID) await formActions.fillInput(search.getInput('keyword'), '示例关键字') await datePickerActions.setDate(search.getField('period', 'custom-period'), '202601') await selectActions.selectFromTableByIndex(search.getSelect('category'), 1) await search.getQueryButton().click() const row = await table.getRowData(0, ['displayName']) expect(row.displayName).not.toBeUndefined() }) 也就是说,测试代码本身用的是内部封装的测试库,不是直接裸写 Playwright 。
我最想解决的,不是“怎么生成一份测试代码”,而是:
测试数据不希望写死,而是尽量基于页面当前运行时的表格数据,再借助 AI 去推断。
也就是:
而是尽量来自:
因为在很多中后台页面里:
我更希望是:
而不是让生成器或 LLM 一开始就直接猜测试值。
比如:
这种场景下,是给 AI 更多源码片段更好,还是给:
这种“证据包”更合理?
我现在倾向于:
但不确定这种拆法是不是更稳。
如果有做过类似:
很想听听大家的经验,尤其是这种:
前端代码和测试代码都有固定规律,而且测试数据尽量不写死,而是依赖页面当前运行时表格数据 + AI 推断
的场景下,怎么划分:
1 Jgege 6 天前 看到你提到的『包』方案,你的拆法(代事,AI 推),我方向是的,但在落地我建引入一 Intermediate Representation (IR) : Schema 而非代:既然你是二次封的件,那建不要直接 AI 原始,而是前端配置成的 JSON Schema 。AI 理化的定性高於理混的源。 劫持( Data Injection ):你心的死,我建在 Playwright 面封一 context.inject(tableData) 的 Hook 。AI 生成的代只需用 Hook 指定字段名,具的真值由 Runtime 在行注入。 AI 的界在於『作序列』而非『值』: AI 定『哪』、『哪字段』。至於校(如 A > B ),在件的 Metadata 定好名,AI 只需要出哪。 你目前卡的校,本是 Constraint Solving 。如果想更,我可以考用 LangChain 的 Structured Output 制 AI 出固定格式的指令,而不是完整的本。 |
2 licoded 6 天前 做起来才能发现具体问题吧 在实践中去学习探索 看起来你这个场景属于人工经验已经积累得非常充分了,且没有太多需要 ai 的地方 或者说 工作流程设计划分已经比较清楚,需要 ai 去完成地方也比较清楚 所以,干就完了! |