JCode添加批量测试,一键同步运行6个Claude Code
JCode 作为自用 Claude Code 启动器,一键切换 6 大 CodingPlan 平台,这个功能我基本满意了。

但是,我还是想提升一下测试效率。
所以,我决定添加一个批量测试功能。
界面如下:

可以一键启动 N 个 Claude Code,每个 CC 载入不同的国产模型。
然后自动在后台运行,界面上有实时反馈和信息汇总。
这些 CC 全部拥有独立的模型、工作目录、配置目录,互相隔离,中途不需我授权!
这个功能已经开发完成。

我只要勾选平台,然后输入需求,选择好保存路径,就可以一键启动批量测试了。
启动之后会有实时输出:

同时有对比视图:

这样我的测试效率就高到💥爆炸了。

原先的做法是一个一个创建文件夹,打开 Claude Code,然后输入提示词,然后按回车给授权,再收集结果。
现在一次性搞定,而且可以直观地查看不同平台和不同模型的响应时间,以及 Tokens 消耗量。
功能和演示大概是这样,下面分享一下这个设计过程。
我是先和 Web 版的 Sonnet 大概聊了一下可行性,基本上已经聊得差不多了,就准备开始开发。
然后💥:

Opus 4.6 死活启动不了,一直报 529 错误。我好害怕,不会是账号嗝屁了吧。
但是从查询的结果和提示信息来看,应该是API过载了。

Anthropic 最近疯狂更新,导致他们家的产品基本都在动不动就掉线的状态中。
此时此刻,Opus 4.6 就歇菜了。
这,直接把我锁死了!
Opus 吸一口,就再也回不去了。
这个时候,Sonnet 4.6 居然是正常的~~!
所以这次的开发任务就被迫落在了它身上,没想到也搞完了。只是有一个小 Bug。
插曲说完了。
然后我(指挥 Sonnet)整理了这次功能开发的关键信息,有兴趣的可以研究研究。
一、需求背景
JCode 作为多平台 Claude Code 启动器,支持配置多个 AI 平台(阿里云百炼、火山方舟、MiniMax 等)。这次的文档主要介绍新增的批量测试功能。
批量测试功能的目标是:
- 使用同一个 Prompt,并发驱动所有已配置平台的 Claude Code 执行
- 在界面上实时显示各平台的流式输出
- 自动保存产物和日志到指定目录
- 提供对比视图(响应时间、Token 用量、状态)便于横向评估各模型能力
二、功能清单
| 功能 | 说明 |
|---|---|
| 平台勾选 | 复用现有平台配置,多选卡片(展示平台名 + 默认模型) |
| 提示词输入 | 多行 textarea |
| 全自动运行 | 携带 --dangerously-skip-permissions,无需人工确认任何权限 |
| 并发执行 | 所有选中平台同时启动,互不阻塞 |
| 实时输出 | 每个平台独立 panel,流式追加文字;工具调用蓝色标注 |
| 对比视图 | 表格:平台 / 模型 / 响应时间 / Token 用量↑↓ / 状态徽章 |
| 统计栏 | 已完成数量、最快响应时间、平均输出 Token、保存路径 |
| 保存目录 | 必须手动选择(记住上次路径),未选时运行按钮禁用 |
| 停止测试 | 强制结束所有进行中的子进程(含进程树) |
| 错误诊断 | stderr 内容直接显示在输出面板并写入 dev.log |
三、业务流程
用户选择平台 → 输入 Prompt → 选择保存目录 → 点击「运行批量测试」
↓
前端 invoke("start_batch_test", { platformIds, prompt, saveDir, runId })
↓
Rust 后端并发(每平台独立线程):
1. 从 Credential Manager 读取 API Key
2. 解析 config_dir(支持 ~/... 和简写)
3. ensure_config_dir:创建目录 + 写 .claude.json(跳过 onboarding + 预授权 Key)
4. 创建产物目录:<saveDir>/<runId>/<平台名>/
5. 写入 prompt.txt
6. 启动 claude 子进程(后台无窗口)
7. 逐行读取 stdout(stream-json 格式)
8. 解析 JSON → emit 事件到前端
9. 同步写 dev.log
↓
所有平台完成 → emit("batch_complete") → 前端停止运行状态
停止流程
用户点击「停止测试」
↓
前端 invoke("stop_batch_test", { runId })
↓
Rust 从进程注册表取出所有 PID
↓
Windows: taskkill /F /T /PID(杀整棵进程树)
↓
子进程 stdout EOF → 线程退出 → emit("stopped")
四、文件保存结构
<batchSaveDir>/ ← Settings 记住的目录,每次手动选择
20260327_1629/ ← 本次批量测试的 runId(时间戳格式)
prompt.txt ← 本次测试的完整 Prompt
阿里云百炼/ ← 平台名子目录(也是 claude 的工作目录)
dev.log ← stream-json 原始日志 + stderr 诊断信息
<claude 生成的文件...> ← 代码、网页等产物直接落在此处
火山方舟/
dev.log
<claude 生成的文件...>
MiniMax/
...
关键设计:
current_dir设为平台子目录,Claude Code 生成的所有文件自然落到对应模型的目录下,无需额外处理。
五、关键技术实现
5.1 Claude Code 调用命令
claude \
-p "<prompt>" \
--dangerously-skip-permissions \
--output-format stream-json \
--verbose \
--model <defaultModel> # 仅当平台配置了 defaultModel 时追加
[extraArgs...] # 平台配置的额外参数
注意:--output-format stream-json 必须配合 --verbose 才能工作,否则报错:
When using --print, --output-format=stream-json requires --verbose
5.2 环境变量注入
每个平台独立设置,互不干扰:
| 环境变量 | 来源 | 说明 |
|---|---|---|
ANTHROPIC_API_KEY | Windows Credential Manager | 每平台独立存储 |
ANTHROPIC_BASE_URL | 平台配置 baseUrl | 为空则不设置(使用默认) |
CLAUDE_CONFIG_DIR | 平台配置 configDir 解析后 | 隔离各平台的 Claude 配置 |
5.3 stream-json 解析
Claude Code 以 NDJSON(每行一个 JSON 对象)输出,关键消息类型:
| 类型 | 处理 |
|---|---|
assistant + content text | emit text 事件,前端追加到输出面板 |
assistant + content tool_use | emit tool 事件,格式化为 [Write] path 等,蓝色显示 |
result (subtype: success) | emit done,携带 duration_ms、usage.input_tokens、usage.output_tokens |
result (subtype: error_during_execution) | emit error |
5.4 并发与进程管理
// 全局进程注册表
pub struct BatchTestState {
pub processes: Arc<Mutex<HashMap<String, Vec<u32>>>>, // run_id → PIDs
}
- 每个平台通过
tauri::async_runtime::spawn_blocking在独立线程中执行 - 进程启动后立即将 PID 注册到
BatchTestState - 停止时通过 run_id 查找所有 PID 并
taskkill /F /T
5.5 错误诊断机制
stdout 为空时(进程异常退出),读取 stderr 内容:
- 有 stderr → 发送
error事件,内容显示在 UI 面板,同时写入dev.log - 无 stderr → 判断为用户主动停止,发送
stopped事件
这个功能整体来说比较简单,只要有了这个文档,大概率一次就能搞定了。
目前已经可以做到,快速切换模型和平台,一键启动,以及批量测试不同模型和平台,对我来说已经够用了。
3 月份,我写了两个工具,一个是 Web 版的 CodingPlanTest,一个桌面版的 JCode。
这两个项目全部由 Claude Code 完成。
Opus 针对这种级别的项目,是信手拈来,非常轻松。我是全程自然语言编程,没看过也没改过一行代码,也不用任何 IDE。需求文档、升级文档、问题记录这些文档会比较多一点,方便后期更新。
然后把国内外的模型都测了一圈,对不同模型的实力也基本有数了。
四月份可能就要减少更新,干其它事情去了,要应用去了。
JCode 最新版,我也已经发网盘了,有需要的可以自取。
主要更新
新增多平台支持与模型管理功能
- 为平台配置添加 models 字段,支持预设模型列表
- 新增百度云、OpenRouter、DeepSeek、小米Mimo平台预设及图标
- 在平台编辑页实现可视化模型管理界面
- 修复窗口恢复时标题栏按钮悬停状态残留问题
- 更新备份/导入导出逻辑以支持 models 字段
新增批量测试功能,支持并发运行多个平台并实时对比结果
- 新增批量测试页面,支持多选平台、输入提示词、选择保存目录
- 实现并发执行 Claude Code 并实时显示流式输出,支持工具调用高亮
- 添加对比视图,展示各平台响应时间、Token 用量和状态
- 支持停止测试功能,可强制终止所有进行中的进程
- 自动保存测试结果和日志到指定目录结构
- 更新版本号至 0.6.0,添加相关依赖和路由配置
这篇文章是一个多星期前写的!
因为一直有新模型出来,都没机会发出来,快拖到四月中旬了!
当你想做一些事情的时候,时间总是不够的!
所以效率尤为重要,好的模型和工具尤为重要。
这个工具对我而言是有巨大的效率提升的:

这个工具我只是做着玩的,一切以自己的需求为核心指引。目前用着还不错!
因为中途有不少人问我要这个软件,所以我再发一次链接。
如果大家有同样的需求,可以拿去玩!
相关文章:
手搓CCSwitch高定版,一键切换六大CodingPlan
软件获取:
我写这一篇文章的成本可不低哦,需要花钱买各大平台的 API,然后花时间消耗 Opus,再花时间写代码,然后再写成文章。
我是把设计过程毫无保留的发出来了!
所以我还是希望它能获得传播,让更多人看到:我努力过💪!
我知道搞技术的都不太喜欢互动凑热闹。
默默点个赞,不影响社交链,但对我来说是一种激励!