SuperAPI AI 工具集

implement-conformance-testing-script

测试与质量

查看项目

更新于 10-16 09:51

技能介绍

用途:该 Skill 为任意编程语言生成一个可执行的一致性测试运行脚本,遵循统一且与语言无关的模式。参考实现位于 assets/ 下:run_conformance_tests_java.sh、run_conformance_tests_python.sh 及对应 .ps1(PowerShell)版本,编写前需先阅读这两类参考脚本,确保产出是同一模式在目标语言工具链与用户 shell 环境下的忠实移植。

两种变体:若项目 test_scripts/ 中已存在 prepare_environment_<lang>.sh/.ps1(或 config.yaml 的 prepare-environment-script 指向的脚本),则输出 activate-only 变体:校验并激活已准备好的环境,不在脚本内暂存构建或安装依赖。若不存在 prepare 脚本,则输出 install-inline 变体:暂存构建、安装依赖并运行测试。原因是该脚本由渲染器按功能规格反复调用(N 个规格约调用 N 次),install-inline 会重复支付安装成本,适合规格少或依赖便宜的场合;activate-only 是生产方案,prepare 每次渲染只付一次安装成本。选错会导致 prepare 的成果被清空或重复,或校验失败。

选择 shell:macOS、Linux、WSL 及 Linux CI 默认用 Bash(.sh);原生 Windows 用 PowerShell(.ps1);无法判断时应询问用户。

共用步骤:校验所需运行时/构建工具(含版本)是否存在,失败退出码 69;校验两个位置参数 <build_folder> 与 <conformance_tests_folder>,缺失则打印用法并退出 69;在切换目录前用变量保存原始 pwd(current_dir/$PWD)。

install-inline 的步骤 4–7:定义并清空重建工作目录 .tmp/<lang><arg1>;递归复制 <build_folder> 内容进去(不复制一致性测试);cd 进入该目录(失败退出 69);在 .tmp/<lang><arg1> 内建立隔离依赖位置(如 ./.venv、./node_modules、./.m2 等)并安装依赖,不得写入源目录、全局缓存或其他位置,安装失败立即传播退出码。

activate-only 的步骤 4–5:校验工作目录 .tmp/<lang><arg1> 及其隔离位置(如 .venv/bin/activate、.m2/、node_modules/、.gocache/、.cargo/)存在,缺失则提示先运行 prepare_environment<lang> 并退出 69,不得静默回退为内联创建;然后 cd 进入工作目录,失败退出 69。激活方式按语言:Python 执行 source .venv/bin/activate;Java 设置 MAVEN_LOCAL_REPO="$(pwd)/.m2";Node/Go/Rust 只需在测试命令中传入与 prepare 相同的隔离参数/环境变量。

共用步骤 8:以 $current_dir/<conformance_tests_folder> 运行标准测试命令,最终退出码即测试命令返回值(“未发现测试”除外)。测试命令对 $2 只读,产物(缓存、JUnit XML、覆盖率报告、编译测试类等)必须落在工作目录内,必要时显式指定输出目录参数。

硬性规则:$1 与 $2 均为只读输入,禁止在其中安装依赖、写 venv/node_modules/.m2/.gocache/.cargo、以它们为 cwd 运行测试,或写入日志、缓存、构建产物。

“未发现测试”检测:需针对目标语言测试运行器静默通过空测试集的情况做等价判断(如 Python unittest 的 "Ran 0 tests in"、jest 的 "No tests found"、go test 的 "no test files"/"no tests to run"、cargo test 的 "running 0 tests";Maven 通常自身报错,无需额外检查),命中则退出 1。

约定:退出码 69 表示不可恢复的调用错误,1 表示未发现测试,其余非零码来自测试命令。工作目录命名为 .tmp/<lang>_<arg1>,使用第一个参数而非一致性测试目录。日志要求尽可能详尽:每步前打印横幅与各变量实际值、执行前回显命令、打印解析后的绝对路径与工具链 --version、原样展示安装/激活输出、打印所用变体及原因、失败时打印即将运行的命令与相关环境变量、结尾打印包含变体、测试命令、退出码、current_dir 与工作目录的摘要;切勿以简洁牺牲详细。必须在 cd 前捕获 current_dir。

限制:资料未提供具体收费、价格、平台支持范围或实际效果数据;官方说明文本为空。该 Skill 依赖 plain-forge 的 prepare_environment 机制与 .tmp 暂存约定,缺失这些前提时须改选 install-inline 变体。