跳转到主要内容
你在评估一个 SQL 生成功能,手上有 80 个“问题 + 期望结果”的样例。每条的检查逻辑都一样:发问题、跑 SQL、比结果。给每条写一个文件,改一次检查逻辑就要改 80 处。 数据驱动测试让你只写一份逻辑,用测试集生成多条评估用例。意图分类、检索问答、工具选择这类大量同构的测试都适合这样写。

从一个文件导出一组评估用例

把样例放进数组,用 map 给每一行生成一个 defineEval,再把整个数组作为默认导出。检查逻辑只写一次,改它时所有样例一起生效:

确认每条评估用例的 ID

导出数组时,NiceEval 按位置给每条编号。如果文件是 evals/sql.eval.ts,生成的 ID 是:
序号补零到固定宽度,方便引用和按前缀筛选。注意数组顺序一变,同一个样例的 ID 也会跟着变。 数据源已经带有稳定的 case、issue 或 benchmark ID 时,改为导出一个对象,用这些 ID 作 key:
文件是 evals/swelancer.eval.ts、key 是 15193 时,ID 就是 swelancer/15193。key 必须是一个非空的路径片段:不能是 . 或 ..,不能含 /、\\ 或控制字符。NiceEval 按 key 的字典序排列,数据源返回的顺序变了,运行顺序和 ID 都不变。 运行前可以用 pnpm exec niceeval exp local sql --dry 确认生成了哪些 ID、一共多少条。

从 YAML 或 JSON 读取测试集

样例多了以后,放进单独的数据文件更好维护。用 loadYaml 或 loadJson 读取,并传入一个校验函数:
loadYaml 和 loadJson 必须传入校验函数(decoder)。文件内容只在校验函数里以未知类型出现;校验通过后,返回值就是带类型的数据,可以直接使用。数据文件格式不对时,校验函数会报错,这个评估文件加载失败。

只跑测试集里的一部分

在 Experiment 后面写评估用例 ID 前缀,就能只跑其中几条:
跑完后用 pnpm exec niceeval show 在终端查看结果,或用 pnpm exec niceeval view 在浏览器里查看。每条样例都是独立的评估用例,失败的那几条会单独列出。

选择测试集还是独立文件

每条样例的流程完全一样,只有输入和预期输出不同。
测试集适合用大量同类样例覆盖一个功能,独立的评估用例文件适合流程复杂的场景。