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_KEYWindows Credential Manager每平台独立存储
ANTHROPIC_BASE_URL平台配置 baseUrl为空则不设置(使用默认)
CLAUDE_CONFIG_DIR平台配置 configDir 解析后隔离各平台的 Claude 配置

5.3 stream-json 解析

Claude Code 以 NDJSON(每行一个 JSON 对象)输出,关键消息类型:

类型处理
assistant + content textemit text 事件,前端追加到输出面板
assistant + content tool_useemit tool 事件,格式化为 [Write] path 等,蓝色显示
result (subtype: success)emit done,携带 duration_msusage.input_tokensusage.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

手搓 CodingPlan 照妖镜,TOKEN 燃烧器!

软件获取:

https://pan.quark.cn/s/1ca548308533

我写这一篇文章的成本可不低哦,需要花钱买各大平台的 API,然后花时间消耗 Opus,再花时间写代码,然后再写成文章。

我是把设计过程毫无保留的发出来了!

所以我还是希望它能获得传播,让更多人看到:我努力过💪!

我知道搞技术的都不太喜欢互动凑热闹。

默默点个赞,不影响社交链,但对我来说是一种激励!

 

小尾巴==========================
公众号:托尼不是塔克
交流群
知识星球
==============================

 



发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注