| 名称 | hsb-test |
| 描述 | 在Holoscan Sensor Bridge(HSB)硬件上执行QA测试计划。读取用户提供的测试文档,根据用户设置筛选测试,确定哪些测试可以自动运行,执行这些测试并通过/失败评估,生成结构化测试结果报告。 |
| 作者 | “Holoscan Team holoscan-team@nvidia.com” |
| 开源协议 | “Apache-2.0” |
| 版本 | “1.0.0” tags: - holoscan-sensor-bridge - hsb - testing tools: - Read - Write - Edit - Grep - Glob - Bash disable-model-invocation: true allowed-tools: Read,Write,Edit,MultiEdit,Grep,Glob,Bash metadata: |
| 作者 | “Holoscan Team holoscan-team@nvidia.com” team: holoscan tags: - holoscan-sensor-bridge - hsb - testing agents: - claude-code - codex |
HSB QA测试运行器
当用户希望在一块HSB板和开发套件上执行QA测试计划时,使用此技能。该技能读取测试文档(本地文件或网页链接),过滤出可在用户特定硬件设置上自动运行的测试,逐项执行这些测试并给出通过/失败评估,最终生成一份全面的测试结果报告。
本技能假定开发套件已经配置完成(SSH、演示容器已构建、主机已配置、板卡已连接)。如果配置未完成,它会主动建议先调用 /hsb-setup。
此工作流在演示容器内运行测试应用程序。仅在用户明确调用时运行。
开始前——必需的门禁(按顺序先执行)
门禁1——读取环境变量。 在执行任何其他操作前,检查以下变量,并向用户打印其解析值:
SSH_TARGET 远程开发套件登录地址(如 nvidia@192.168.1.50)。如果未设置,请询问用户。
REMOTE_ROOT 远程工作目录(如 /home/nvidia)。如果未设置,请询问用户。
REMOTE_SUDO sudo / sudo -n / ""——如果未设置,默认使用 sudo。
REMOTE_SSH_OPTS 其他SSH选项(可选)。
HSB_PLATFORM 平台提示(可选)。
SSH_TARGET 和 REMOTE_ROOT 为必填项。如果任一缺失,请停止并询问用户。
门禁2——展示阶段计划,请求测试文档,并获得确认。 在执行任何操作前:
- 展示阶段计划:
HSB 测试 — 阶段计划
阶段0:验证开发套件SSH、板卡ping及演示容器可用性
阶段1:获取测试文档,确认设置,构建可执行测试计划
阶段2:执行测试,记录通过/失败,分析失败原因
阶段3:生成测试结果报告(可选择保存)
阶段4:清理测试产物
-
如果用户尚未提供测试文档路径或URL,请停止并询问用户,不要继续到阶段0或任何阶段,直到用户提供:
请提供您的测试文档的路径或URL:。如果用户已经指定了特定测试(例如“仅连接性检查”),则说明将运行哪些阶段以及跳过哪些阶段,并说明测试将按用户的平台/板卡/传感器配置进行过滤,并分类为可自动化测试和手动测试。 -
明确询问:
是否可以进入阶段0?[Y/n]——在用户确认前,不要开始阶段0。
本技能必须完成的工作
- 验证开发套件可通过SSH访问,HSB板已连接且有响应,演示容器可用。读取当前FPGA版本和板卡标识。验证传感器/摄像头类型以及使用的hsb开发套件和发布仓库——可通过已设置的环境变量获取,或询问用户。如果配置未就绪,建议调用
/hsb-setup准备开发套件。 - 从用户处获取测试计划文档(文件路径或URL)。确认在阶段0中收集的设置信息(仓库位置、HSB版本、平台、板卡类型、传感器)。研究测试计划和仓库的
examples/目录,以确定哪些测试可以自动运行。跳过手动测试和需要额外设备的测试。展示可执行的测试计划,等待用户批准。 - 按顺序执行每个测试用例。对于每个测试:运行应用程序,根据测试计划中的标准评估通过/失败,记录结果。如果失败,分析日志,建议修复方法,并让用户决定如何继续,然后运行下一个测试。
- 生成结构化测试结果报告,包含每个测试的通过/失败状态、遇到的问题及修复措施。提供保存报告的选项。
- 清理所有测试产物(容器、临时文件、会话状态)。
Linux/Windows友好包装变量
复用其他HSB技能中的环境变量:
SSH_TARGET用于远程登录目标(例如nvidia@agx-thor-host)REMOTE_ROOT用于远程工作目录REMOTE_SUDO用于特权命令REMOTE_SSH_OPTS用于额外SSH选项HSB_PLATFORM作为可选的平台提示
如果这些变量已设置,通知用户这些设置并直接使用,不再询问。
在阶段0之前,打印解析后的远程执行设置。
强制交互模式
会话中首次运行(无先前验证)
当不存在有效会话状态时,展示完整阶段计划:
- 阶段0:验证板卡连接、演示容器就绪及用户设置(发布仓库、平台、传感器/摄像头)
- 阶段1:获取测试计划,确认设置,构建可执行测试列表
- 阶段2:执行测试计划并逐项给出通过/失败评估
- 阶段3:生成测试结果报告(可选择保存)
- 阶段4:清理
然后逐个阶段执行。
同一会话中的后续运行(快速路径)
当会话状态文件(/tmp/.claude_hsb_test_session/state.sh)存在 且 包含 _SESSION_VERIFIED=true 时,本技能跳过阶段0和阶段1的设置确认,因为连接、硬件、发布仓库、平台和传感器/摄像头都已经验证过。而是通知用户并直接进入测试计划输入:
会话已验证——跳过连接检查。
SSH目标: $SSH_TARGET
发布仓库: /home/work/holoscan-sensor-bridge (HSB vX.X.X)
平台: AGX Thor
板卡: HSB Lattice | FPGA: XXXX
传感器: 双IMX274
直接进入测试计划输入。
然后执行:
- 阶段1(测试计划输入和测试列表构建——跳过设置确认)
- 阶段2:执行测试计划
- 阶段3:测试结果报告
- 阶段4:清理
何时从头重新运行阶段0
在以下情况必须重新运行阶段0(忽略快速路径):
- 新会话:远程主机上不存在会话状态文件,或开始了一个新的Claude Code会话。
- 执行失败提示连接丢失:如果阶段2失败并出现指示板卡或开发套件不可达的症状(ping失败、SSH超时、容器启动失败、出现
No such device错误),则从会话状态中清除_SESSION_VERIFIED并重新运行阶段0,然后再重试。 - 用户明确要求:如果用户说“重新验证”、“重新开始”、“从头运行”,或调用
/hsb-test --full,则从头运行阶段0。
参见 ## 阶段门禁 了解完整的确认协议。
如果某些操作失败,不要直接倾倒原始日志。而是总结:
- 失败的确切命令
- 可能的原因
- 推荐的可行操作
- 问题是否阻塞
阶段详情
请参阅 references/phase-details.md 获取完整的分阶段步骤说明。
执行规则
SSH heredoc模式
与其他HSB技能一样,使用相同的持久SSH会话模型。每个阶段作为一个SSH heredoc块运行:
ssh -o BatchMode=yes $REMOTE_SSH_OPTS $SSH_TARGET bash -s <<'REMOTE'
set -e
# 从上一阶段恢复状态
source /tmp/.claude_hsb_test_session/state.sh 2>/dev/null || true
cd "${_CLAUDE_CWD:-__REMOTE_ROOT__}"
# 阶段命令
echo "=== 阶段N:描述 ==="
command1
command2
# 为下一阶段保存状态(如果已设置,保留 _SESSION_VERIFIED)
_PREV_VERIFIED="${_SESSION_VERIFIED:-}"
mkdir -p /tmp/.claude_hsb_test_session
{
echo "export _CLAUDE_CWD=\"$(pwd)\""
echo "export PATH=\"$PATH\""
echo "export REPO_DIR=\"$REPO_DIR\""
echo "export VERSION=\"$VERSION\""
echo "export HSB_PLATFORM=\"$HSB_PLATFORM\""
echo "export BOARD_TYPE=\"$BOARD_TYPE\""
echo "export SENSORS=\"$SENSORS\""
echo "export FPGA_VERSION=\"$FPGA_VERSION\""
echo "export TEST_PLAN_SOURCE=\"$TEST_PLAN_SOURCE\""
[ "$_PREV_VERIFIED" = "true" ] && echo "export _SESSION_VERIFIED=true"
} > /tmp/.claude_hsb_test_session/state.sh
REMOTE
在组合heredoc时,将 __REMOTE_ROOT__ 替换为 $REMOTE_ROOT 的字面值。
测试使用的容器
测试命令在演示容器内运行。使用带超时强制监管的分离模式具名容器。
每个测试的默认超时时间:120秒(2分钟)。可通过以下方式覆盖:
- 技能调用时使用
--timeout N(适用于所有测试) - 测试计划中指定的单测超时
每个测试容器后的清理
每次测试运行后,停止并移除容器。清理模式见 references/phase-details.md。
会话拆除
由阶段4处理。如果工作流程在阶段4之前中止:
docker ps --filter "name=hsb_test_" --format '{{.Names}}' | xargs -r docker stop -t 2 2>/dev/null || true
ssh -o BatchMode=yes $REMOTE_SSH_OPTS $SSH_TARGET "rm -rf /tmp/.claude_hsb_test_session"
阶段门禁——阶段间用户确认
每完成一个阶段(阶段0–3)后,务必在开始下一阶段前请求用户确认。
例外:当 --y(自动批准模式)激活时,跳过阶段门禁。参见“自动批准模式 (--y)”一节。
例外:阶段4(清理)在阶段3后自动运行,无需门禁。
是否进入阶段 <N+1>(<阶段描述>)?[Y/n]
用户响应处理
本技能中的所有提示都要求用户给出明确输入。绝不要把空白或仅回车视为选择——重新提示用户。
- “y”、“yes”、“Y”、“ok”、“go”、“continue”、“next” → 进入下一阶段。
- “n”、“no”、“stop”、“abort” → 停止执行。打印:
然后执行会话拆除。QA测试已在阶段N后暂停。 您可以重新调用技能来继续。 - 任何其他文本 → 将其视为关于当前阶段的问题或指令。先回答,然后重新提示。
- “retry” → 重新执行当前阶段,再次展示摘要,然后重新提示。
例外
- 阶段4(清理)是最终阶段——在阶段3完成后或用户拒绝运行另一个测试计划后自动运行。
- 如果某个阶段FAILED且无法恢复,则停止并清晰报告,然后执行清理。
内置帮助(--help)
如果 $ARGUMENTS 包含 --help 或 -h,打印以下内容并停止:
HSB QA测试运行器技能
用法
/hsb-test [选项]
选项
--help, -h 显示此帮助信息并退出
--verbose 显示每个阶段的完整原始命令输出
--y 自动批准所有阶段门禁并跳过
失败时的交互式调试。不建议使用——继续前会显示
确认警告。所有输出保存到带时间戳的日志文件中。
--timeout N 设置每个测试的运行时长(秒)(默认:120s)。
测试在N秒后或可以确定通过/失败时停止,以先到者为准。
--full 即使会话已验证,也强制从阶段0进行完整验证
环境变量(调用技能前设置)
SSH_TARGET 远程登录目标(如 ubuntu@10.0.0.1)
REMOTE_ROOT 远程工作目录
REMOTE_SUDO 提权方式:'sudo'、'sudo -n' 或 ''
REMOTE_SSH_OPTS 额外SSH选项
HSB_PLATFORM 平台提示
工作流阶段
阶段0 验证板卡连接、演示容器就绪
以及用户设置(发布仓库、平台、传感器/摄像头)
(同一会话内重复运行时跳过)
阶段1 获取测试计划,确认设置,构建可执行测试列表
(重复运行时跳过设置确认)
阶段2 执行测试计划并逐项给出通过/失败评估
阶段3 生成并可选择保存测试结果报告
阶段4 清理(自动)
示例
/hsb-test
/hsb-test --verbose
/hsb-test --timeout 60
/hsb-test --y
/hsb-test --y --timeout 60
/hsb-test --full
/hsb-test --help
调用示例
/hsb-test/hsb-test --verbose/hsb-test --timeout 60/hsb-test --timeout 60 --verbose/hsb-test --y/hsb-test --y --timeout 60/hsb-test --full/hsb-test --full --verbose/hsb-test --help
详细程度模式(--verbose)
本技能支持 --verbose 标志:
检测标志
检查 $ARGUMENTS(斜杠命令后的文本)是否包含:--help / -h、--verbose、--y、--timeout N 或 --full(不区分大小写)。在进一步解析前剥离所有标志(及值)。
出现 --full 时,忽略任何缓存的会话状态,从头运行阶段0。
详细模式(设置时)
- 显示每个SSH命令的完整原始输出
- 内联显示测试应用的完整输出(所有stdout/stderr)
- 显示详细的分阶段状态块
简洁模式(默认,不带 --verbose)
- 每个阶段后显示项目符号摘要
- 隐藏原始命令输出
- 显示关键测试输出行(启动、错误、通过/失败指示器),但不显示每一行
- 用4行格式(症状、原因、处理措施、是否阻塞)显示问题
自动批准模式(--y)
本技能支持 --y 标志,它跳过所有阶段门禁,从开始到结束运行整个工作流程,而不在阶段之间等待用户确认。这不建议用于QA测试。
确认警告
检测到 --y 时,显示警告并要求用户确认:
⚠ 警告:已启用自动批准模式 (--y)。
不建议将其用于QA测试。所有阶段门禁将被跳过,
整个测试计划将连续执行,不会在阶段或测试之间暂停,
也不会请求您的确认。
您将无法审查中间结果、在失败时干预或中止测试。
所有输出将保存到带时间戳的日志文件中。
注意:在自动批准模式下,您仍必须在阶段1中提供测试计划。
失败的测试会记录,但不会进行交互式调试——
测试会自动继续到下一个测试。
输入“yes”确认自动批准模式,或输入其他内容取消:
- 如果用户回答 “yes”(完全匹配,不区分大小写)→ 启用自动批准模式。
- 任何其他回答 → 取消自动批准模式并以交互方式运行。
当 --y 激活时的行为
- 阶段门禁被跳过,不进行阶段间确认。
- 测试计划批准被跳过——自动执行生成的测试计划。
- 失败测试不会暂停——失败被记录,测试自动继续到下一个测试用例。
- 测试之间不会出现提示——测试连续执行。
- 默认超时适用——每个测试120秒;或如果指定了
--timeout N,则用N。 - 日志文件:开始时在
$REMOTE_ROOT/或当前目录创建hsb-test-log-YYYY-MM-DD-HHMMSS.md。 - 阶段摘要仍会实时显示。
- 阻塞性连接失败仍会停止工作流并触发重新验证。
与其他标志组合
--y --verbose:自动批准并提供完整原始输出。--y --timeout N:自动批准并指定自定义测试超时。--y --full:自动批准并强制从阶段0进行完整验证。
超时处理(--timeout)
本技能支持 --timeout N 标志,其中N是每个测试运行的秒数。
行为
- 设置时:每个测试最多运行N秒,然后停止。根据窗口期间收集的输出评估通过/失败。
- 未设置时:每个测试最多运行120秒(2分钟)——或直到可以从输出确定通过/失败,以先到者为准。
- 单测覆盖:如果测试计划为特定测试指定了超时,则该值优先于默认值和
--timeout标志。
验证
- N必须是正整数。
- 最小值:5秒。
- 最大值:3600秒(1小时)。
- 如果无效,则显示错误并要求用户提供有效的超时。