📎 本文档由「无人机·无人船知识平台 https://venerable-salmiakki-0dcc98.netlify.app」整理 · 条款核对日期:2026-11-09
内容来源说明(核对日期 2026-11-09)
- 🟢 可溯源/通用工程常识:测试金字塔(单元/集成/系统/回归分层)、脚本化测试、自动判据、CI 触发的测试自动化,为软件/嵌入式工程领域的通用做法。
- 🟡 经验/建议值 :阈值容忍窗口、回归节奏、门禁项、最小可行自动化集等,为行业通行做法与经验区间,需结合自身产品与团队确认。
- 🔴 待核实:涉及具体测试框架版本号、云 CI 平台、私有平台的,本文不编造;具体版本与选型以现行官方文档与本单位现状为准。
本文不编造测试框架具体版本号、云 CI 配置、内部系统名;阈值与回归节奏为建议框架而非固定标准。本篇聚焦"如何把测试跑起来并自动判定",与《测试与校核》(测什么、判据)、《仿真与验证》(仿真层级)互补。
- 一、测试自动化为什么重要
- 二、自动化测试的类型
- 三、脚本化测试
- 四、自动化判据
- 五、仿真测试自动化
- [SITL/HITL 自动跑测](#SITL/HITL 自动跑测)
- 故障注入自动化
- [六、CI 集成与定时运行](#六、CI 集成与定时运行)
- 七、测试数据与报告
- 八、落地路径与规范
- 九、常见问题
- 十、小结
问题
一、测试自动化为什么重要
手动测试靠人一次次重复,费时、易漏、难追溯。测试自动化把"反复执行 + 判定"交给脚本/工具,让人聚焦在设计和分析上。
一句话:「手动测试告诉你这次有没有问题,自动化测试告诉你改动之后有没有把之前好的弄坏」。
手动测试的瓶颈
- 耗时长、重复枯燥、容易遗漏。
- 结果靠人记录,难以统一量化。
- 回归(验证旧功能没坏)成本高。
自动化的价值
- 可重复:同一用例随时重跑。
- 可追溯:结果自动留档。
- 回归快:改动后自动验证受影响面。
二、自动化测试的类型
测试金字塔分层
从底到顶,量多→量少、快→慢(行业通用模型):
| 层级 | 对象 | 特点 |
|---|---|---|
| 单元测试 | 单个函数/模块 | 快、多、低成本 |
| 集成测试 | 模块间协作 | 中量 |
| 系统测试 | 整机/全流程 | 慢、少、成本高 |
| 回归测试 | 已验证功能 | 保障旧功 |
下图直观展示测试金字塔的分层与投入比例(越靠底层用例越多、执行越快):
#mermaid-svg-SBvesQ4l9o66bJUL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SBvesQ4l9o66bJUL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SBvesQ4l9o66bJUL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SBvesQ4l9o66bJUL .error-icon{fill:#552222;}#mermaid-svg-SBvesQ4l9o66bJUL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SBvesQ4l9o66bJUL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SBvesQ4l9o66bJUL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SBvesQ4l9o66bJUL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SBvesQ4l9o66bJUL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SBvesQ4l9o66bJUL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SBvesQ4l9o66bJUL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SBvesQ4l9o66bJUL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SBvesQ4l9o66bJUL .marker.cross{stroke:#333333;}#mermaid-svg-SBvesQ4l9o66bJUL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SBvesQ4l9o66bJUL p{margin:0;}#mermaid-svg-SBvesQ4l9o66bJUL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SBvesQ4l9o66bJUL .cluster-label text{fill:#333;}#mermaid-svg-SBvesQ4l9o66bJUL .cluster-label span{color:#333;}#mermaid-svg-SBvesQ4l9o66bJUL .cluster-label span p{background-color:transparent;}#mermaid-svg-SBvesQ4l9o66bJUL .label text,#mermaid-svg-SBvesQ4l9o66bJUL span{fill:#333;color:#333;}#mermaid-svg-SBvesQ4l9o66bJUL .node rect,#mermaid-svg-SBvesQ4l9o66bJUL .node circle,#mermaid-svg-SBvesQ4l9o66bJUL .node ellipse,#mermaid-svg-SBvesQ4l9o66bJUL .node polygon,#mermaid-svg-SBvesQ4l9o66bJUL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SBvesQ4l9o66bJUL .rough-node .label text,#mermaid-svg-SBvesQ4l9o66bJUL .node .label text,#mermaid-svg-SBvesQ4l9o66bJUL .image-shape .label,#mermaid-svg-SBvesQ4l9o66bJUL .icon-shape .label{text-anchor:middle;}#mermaid-svg-SBvesQ4l9o66bJUL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SBvesQ4l9o66bJUL .rough-node .label,#mermaid-svg-SBvesQ4l9o66bJUL .node .label,#mermaid-svg-SBvesQ4l9o66bJUL .image-shape .label,#mermaid-svg-SBvesQ4l9o66bJUL .icon-shape .label{text-align:center;}#mermaid-svg-SBvesQ4l9o66bJUL .node.clickable{cursor:pointer;}#mermaid-svg-SBvesQ4l9o66bJUL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SBvesQ4l9o66bJUL .arrowheadPath{fill:#333333;}#mermaid-svg-SBvesQ4l9o66bJUL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SBvesQ4l9o66bJUL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SBvesQ4l9o66bJUL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SBvesQ4l9o66bJUL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SBvesQ4l9o66bJUL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SBvesQ4l9o66bJUL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SBvesQ4l9o66bJUL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SBvesQ4l9o66bJUL .cluster text{fill:#333;}#mermaid-svg-SBvesQ4l9o66bJUL .cluster span{color:#333;}#mermaid-svg-SBvesQ4l9o66bJUL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SBvesQ4l9o66bJUL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SBvesQ4l9o66bJUL rect.text{fill:none;stroke-width:0;}#mermaid-svg-SBvesQ4l9o66bJUL .icon-shape,#mermaid-svg-SBvesQ4l9o66bJUL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SBvesQ4l9o66bJUL .icon-shape p,#mermaid-svg-SBvesQ4l9o66bJUL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SBvesQ4l9o66bJUL .icon-shape .label rect,#mermaid-svg-SBvesQ4l9o66bJUL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SBvesQ4l9o66bJUL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SBvesQ4l9o66bJUL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SBvesQ4l9o66bJUL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统测试 / 回归测试
少而慢 · 成本高
集成测试
中量 · 中等成本
单元测试
多而快 · 低成本
底座:用例数量最多、执行最快
能 |
🟢 可溯源:测试金字塔为软件工程通用模型,具体分层命名各团队可略有差异。
各层要点
- 单元:逻辑判断、参数校验、边界条件。
- 集成:模块对接、协议交互(见《MAVLink 协议》)。
- 系统/回归:接《测试与校核》的单机/编队/环境用例。
三、脚本化测试
测试脚本
- 把测试步骤写成可重复执行的脚本,替代"手工点一遍"。
- 脚本带初始化/运行/清理/归档四段结构。
参数化与批量
- 同一用例参数化(不同阈值、不同场景),一次写好批量跑。
- 批量场景(多机/多配置)复用脚本(衔接《批量生产与质检SOP》)。
复用已有工具
- 优先复用平台已有工具:抓包(《MAVLink 抓包与自研工具实战》)、遥测分析(《遥测数据分析工具》)、构建脚本(《工程工具链建设》)。
- 避免重复造轮子,脚本统一纳入版本管理。
四、自动化判据
判定通过/失败
- 每个用例定义明确的通过/失败判据,脚本自动判定,不靠人肉眼。
- 判据形式:数值阈值、状态标志、日志关键字段。
阈值与容忍窗口
- 动态量(位置、姿态、电压)设容忍窗口,而非精确等于。
- 🟡 建议:阈值初值可参考经验区间,再结合实测定标;具体数值需结合产品确认(衔接《测试与校核》判据)。
五、仿真测试自动化
SITL/HITL 自动跑测
- 在仿真环境(软件在环 SITL / 硬件在环 HITL)自动跑既定场景(衔接《仿真与验证》)。
- 仿真回归快、成本低,适合大量反复测试。
故障注入自动化
- 自动注入故障(断信号、限供电、异常输入)验证容错(衔接《故障注入方法论》)。
- 故障用例纳入回归集,确保容错不退化。
六、CI 集成与定时运行
自动触发
- 提交/合并代码时自动触发相关测试(衔接《工程工具链建设》的 CI)。
- 让 CI 结果成为是否可合并的门禁之一。
定时回归
- 定期(如每日/每周)跑完整回归集,发现渐进退化。
- 🟡 建议:回归节奏视成本与改动频率而定,不设固定值。
CI 门禁衔接
- 门禁项建议:构建通过 + 静态检查 + 冒烟/关键用例(衔接《工程工具链建设》CI 门禁思路)。
七、测试数据与报告
结果归档
- 每次运行自动归档:用例、结果、日志、时间。
- 失败用例可复现、可追溯。
趋势分析
- 汇总通过率/失败分布,分析共性(衔接《遥测数据分析工具》的统计分析思路)。
- 高频失败反向推动定位与修复。
八、落地路径与规范
最小可行自动化集
- 起步不必全自动,先跑通最小可行集 :
- 关键回归用例脚本化
- 自动判据 + 结果归档
- 提交时自动跑关键用例
- 之后逐步扩展覆盖。
🟢 可溯源:先最小可行、再渐进扩展是工程落地通行思路。
渐进推进
- 优先自动化高频、易错、影响大的用例。
- 规范写入交接/培训,工具换
。
九、常见问题
Q:测试自动化该从哪开始?
A:从"高频 + 回归压力大 + 判据清晰"的用例开始,先最小可行集,再扩展。
Q:自动化判据定不准怎么办?
A:先用经验区间做初值,结合实测结果标定;不是盲目追求精确的自动判定就能提升质量。
Q:自动化测试和手动测试什么关系?
A:自动化承担可重复、高频的回归;手动/人工聚焦新场景、异常与判断性工作,二者互补。
Q:仿真自动化能完全替代真机吗?
A:不能。仿真回归快适合反复验证,但真机/系统级仍不可少(衔接《测试与校核》《仿真与验证》)。
Q:脚本和测试结果怎么管?
A:脚本入版本管理,结果自动归档;CI 让每次改
十、小结
- 手动与自动化互补:自动化承担可重复、高频的回归,手动/人工聚焦新场景、异常与判断性工作,二者不是替代关系(见「一、测试自动化为什么重要」)。
- 按测试金字塔分层投入:单元多而快、集成居中、系统/回归少而慢,按层分配用例与成本(见「二、自动化测试的类型」)。
- 从最小可行自动化集起步:先把关键回归用例脚本化、配上自动判据与结果归档、提交时自动跑关键用例,再逐步扩展覆盖(见「三、脚本化测试」「四、自动化判据」「八、落地路径与规范」)。
- CI 门禁衔接:让构建通过 + 静态检查 + 冒烟/关键用例成为可合并的门槛,并配合定时回归发现渐进退化(见「六、CI 集成与定时运行」)。
- 结果归档与趋势分析 :每次运行自动留档用例、结果、日志与时间,汇总通过率与失败分布,用高频失败反向推动定位与修复(见「七、测试数据与报告」)。
动都有迹可循。