十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

看懂软件架构再谈测试:ETestDEV5架构详解与工程实践

看懂软件架构再谈测试:ETestDEV5架构详解与工程实践 1. 先聊清楚软件架构到底是什么以及为什么测试工程师也得懂“架构不匹配”这几个字基本是所有用国产操作系统的同事都踩过的坑。你在统信 UOS 上双击一个 .deb 包系统弹出一句“软件包架构不匹配”不少人第一反应是“这软件是不是坏了”其实根本没坏只是安装包是amd64的你机器是arm64的。同理想查一个安卓软件支持哪些 CPU 架构你会去翻 APK 里的lib目录看到armeabi-v7a、arm64-v8a、x86这些文件夹就知道它在哪些设备上能跑。上面这两个问题本质都是“软件架构”的冰山一角——运行平台层面的架构匹配。但如果只把架构理解到这里那你大概率做不好工具选型也理解不了 ETestDEV5 这种测试开发环境为什么要在多个节点上部署、为什么脚本引擎要和界面分离、为什么换个总线板卡不需要重装整个软件。我是做嵌入式软件测试的一直用 ETestDEV5 做装备软件的接口测试、半实物仿真和自动化回归。说句实在话第一次接触这个工具时我也闹过笑话我以为它就是个类似“带界面的串口助手”的东西结果看系统结构图才发现它是一个完整的分布式测试开发架构。这直接决定它怎么装、怎么配、怎么用、出问题怎么看日志。所以这篇教程我打算换个思路不急着给你摆操作步骤而是先带你把 ETestDEV5 的软件架构看清楚再把不同架构特性对应的使用场景串起来。等你理解了它为什么长这样再去看官方文档或做项目部署你会有一种“哦原来这里这么设计是这个原因”的通透感。这对刚接触 ETestDEV5 的测试工程师、项目经理甚至是想拿它做二次开发的同事都会有帮助。简单交代一下 ETestDEV5 是干什么的它是面向嵌入式系统测试的集成开发环境主要用来做测试用例设计、测试脚本开发、测试任务执行、测试数据采集和测试报告生成。它可以连接被测设备也可以连接仿真设备支持多种总线接口和协议能在实验室做闭环测试也能搬到外场做实时测试。它本质上不是一个“仪器软件”而是一个“测试系统开发平台”。这点想清楚后面的架构讲解才顺理成章。2. ETestDEV5 的架构要怎么拆我建议按四个层次来看你要完整理解一套软件系统的架构不能只盯着一张系统框图看。我的习惯是把它拆成四个层次运行平台层、核心服务层、工具链层、扩展接口层。ETestDEV5 也是按这个思路去拆最清楚。2.1 运行平台层为什么它能跨系统部署先看最底下这层。ETestDEV5 是跨平台的我在 Windows 10、Windows Server 2019、银河麒麟、统信 UOS 上都跑过。这意味着它不能依赖某个特定的操作系统 API 来写业务逻辑基础框架做了平台适配。你在装软件时安装包会区分x86_64和aarch64版本这和前面我们聊的“软件包架构不匹配”直接相关——你拿 x86 的安装包去塞到飞腾处理器arm64的机器上系统一定不认。这一层还做了一个很关键的事硬件接口的抽象。嵌入式测试往往要接各种总线设备串口、CAN、1553B、ARINC429、以太网、反射内存网等。如果每种板卡都直接往主程序里塞驱动那软件会变得又大又脆。ETestDEV5 的做法是在运行平台层提供一套统一的“总线设备抽象接口”具体板卡的驱动以独立组件的方式挂载进来。我实测过用一个第三方 USB-CAN 适配器和用板载 PCIe-CAN 卡软件上层脚本不需要改只是底层驱动组件不同。2.2 核心服务层真正干活的引擎都在这一层核心服务层是 ETestDEV5 最重的一层我之前花了很久才搞明白各部分是怎么协作的。这里面至少有五个核心组件工程管理服务负责管理你的测试工程。一个测试工程包括测试用例、测试脚本、设备资源绑定关系、变量定义、协议配置等。它不是简单地在磁盘上存文件而是维护了一套结构化的工程模型这样你在界面里建一个用例脚本编辑器里能自动感知到关联的变量和参数做“用例与脚本联动”。脚本执行引擎是灵魂。ETestDEV5 支持 Python 和标准 C 语言混合开发测试脚本。为什么强调这是“引擎”而不是“解释器”因为它不只是把脚本拿去解析执行还负责调度、中断、异常处理、实时性控制。在跑半实物仿真测试时你经常要按毫秒级去发送激励数据这就要求引擎具备高精度的定时能力而不是简单地while True sleep。数据采集与回放服务负责管理测试过程中的数据。你从总线上抓到的每一帧报文、每一个信号变化都会打上时间戳并存储。这个服务还支持一边采集一边画曲线便于实时监视。更关键的是回放功能——测试结束后你可以把历史数据重新加载对比分析故障时刻的波形和数据。资源部署服务是分布式部署的技术基础。它维护了“当前测试域里有哪几个节点、每个节点上装了哪些驱动组件、哪个节点负责哪块采集任务”这类元信息。你在总控界面上部署任务时它负责把测试脚本和资源描述分发到各个执行节点。日志与报告服务负责记录系统运行全过程的状态信息并生成测试报告。ETestDEV5 的报告不只是简单地从用例表格里导出而是把执行日志、数据采集结果、断言结果、实时曲线拼接成一份带证据链的完整报告这点对装备软件测试来说很关键因为评审时要求“每条结论都有原始记录支撑”。2.3 工具链层你天天打交道的图形界面工具链层就是你打开 ETestDEV5 后看到的那些窗口和编辑器。包括测试工程导航视图、用例编辑器表格化、脚本编辑器代码编辑支持语法高亮/自动补全/单步调试、面板设计器拖拽方式设计测试操作面板、数据曲线显示工具等。这层是基于 Eclipse RCP 技术构建的。很多做嵌入式开发的老工程师一听到 Eclipse 可能会有“是不是很臃肿”的顾虑但 RCPRich Client Platform的好处是它只把需要的部分打包成桌面客户端模块化程度高而且插件生态成熟。你会发现 ETestDEV5 的界面风格很“IDE 化”打开工程树、双击脚本文件、点调试按钮——这套交互逻辑写过代码的人都熟悉上手成本相对低。工具链层里我最常用的其实是“面板设计器”。你在测试时不想手动敲命令行来发指令而是想做一个像真实操控台一样的面板面板上有按钮、旋钮、状态灯、数值输入框那就在设计器里拖拽控件绑定脚本逻辑。这个能力在给甲方做测试演示时特别好用因为演示环境不能真拿命令行出来操作。2.4 扩展接口层二次开发能力决定了你的天花板最后一层是扩展接口层。ETestDEV5 提供了一套 API 和插件机制允许你按项目需求去扩展。比如你有一个非常规的非标总线设备官方驱动列表里没有你可以通过它提供的接口写一个自定义驱动组件把它注册到系统里。再比如你希望测试结束后自动把报告归档到单位的质量管理系统也可以通过后置处理脚本调用 REST API 完成推送。我见过一些单位直接用这套接口把 ETestDEV5 嵌到自己的自动化测试平台里——底层由 ETestDEV5 负责激励和采集上层平台负责测试流程调度和数据分析。这种情况下ETestDEV5 已经不只是“工具”而是整个测试系统里的“执行引擎”。3. 三个关键架构设计取舍看明白你就懂了大半上面四层只是把“长什么样”说清了但我觉得真正有价值的是理解它为什么这么设计。我梳理了三个我认为最重要的架构决策每个都对应着实际项目中的痛点。3.1 脚本执行引擎与界面分离到底图什么ETestDEV5 的界面工具和脚本执行引擎不是必须跑在同一个进程里。在分布式模式下引擎可以部署在单独的工控机上界面上执行任务时指令通过网络传给引擎节点。我第一次用这个特性是在一个外场联试任务中——测试工装摆在山洞测试间里人待在隔壁测控间。如果引擎必须跟界面跑在同一台机器上那人员就得一直待在测试间里守着既不安全也不方便。有了这种分离设计只需要在测控间的电脑上装界面客户端通过网络连接到测试间的执行服务端远程下发测试任务和监控状态。另外还有一个实际好处当你在界面里做曲线实时刷新时如果引擎和界面抢 CPU会影响激励时序的精度尤其是毫秒级定时发送的场景。分开之后执行节点专心保证时序界面节点专心做展示两边互不拖累。3.2 总线驱动独立适配避免了“一换板卡就要重装系统”的尴尬嵌入式测试最大的变量就是被测对象的接口类型。我做过一个项目前期联试用 1553B后期外场测试突然要求换成 CAN 接口。如果软件架构把总线驱动写死在主程序里这种变更几乎等于灾难。但 ETestDEV5 把总线驱动做成了“适配组件”模式换接口类型时只需要在目标节点安装对应的驱动组件在工程里替换设备资源绑定脚本中把设备句柄对应的通道参数改一下。当然脚本里对不同协议的具体处理逻辑还是要改的但至少系统平台本身不需要动数据采集的通用流程也不需要重写。我自己的体会是这种“软硬解耦”在装备软件测试领域特别重要因为被测设备的接口形态实在太发散谁也没法保证整个项目周期不换一种总线。3.3 选择“脚本 表格用例”双层描述模型平衡高效与规范ETestDEV5 的测试设计有两条路线一条是偏白盒的脚本开发路线用 Python/C 写详细逻辑另一条是偏管理规范的表格化用例设计路线用例步骤、预期结果、前置条件等以表格字段来组织。这两者在工程里是能关联的——表格用例可以挂接自动化脚本作为脚本执行的“外部描述”。为什么这么设计因为国内装备软件测试有很强的合规要求——你光有脚本不行评审专家要看用例设计文档要能说清楚“你这步脚本对应的是哪个需求条目、预期结果是什么”。而如果只让工程师填表格自动化和复杂逻辑又没法承载。所以双层描述模型是我觉得 ETestDEV5 很聪明的地方管理归管理执行归执行中间用关联机制打通。我测试时经常是这样一个流程先在表格用例里设计 30 个用例步骤每个步骤写明激励条件和预期结果然后挑出需要自动化执行的那几步写出对应的 Python 脚本并建立用例步骤与脚本片段的映射执行时表格用例负责按顺序驱动脚本负责精确激励和实时判定。4. 从架构反推使用场景什么样的测试任务最适合用 ETestDEV5理解了架构再来看使用场景会非常清晰。我归纳了五类典型场景这些都是我自己或身边同事实际做过的。4.1 场景一多总线接口设备的接口一致性测试很多嵌入式设备对外有不止一种接口比如一个飞控计算机它既有 RS422 串口用于调试、又有 1553B 总线用于与飞控面板通信。接口一致性测试要验证这些接口的电气特性、协议格式、时序关系是否符合需求规格。这类任务特别适合 ETestDEV5原因在于它的架构把这些接口都抽象成了统一的“总线通道”。你建工程时分别添加串口设备、1553B 板卡然后在测试脚本里用统一的 API 操作它们发数据、收数据、做比对。数据格式上它支持 ICD 描述文件导入——如果你有被测设备的结构化接口定义文档可以直接转成工程里的信号定义脚本里直接按信号名引用而不是手工对字节偏移非常省事。4.2 场景二半实物仿真闭环测试半实物仿真就是把真实设备接入仿真回路用仿真模型代替不存在的周边设备形成一个闭环。比如你测试一个雷达数据处理机外场没有真实雷达就用仿真模型在局域网里向它发模拟目标点迹数据数据处理机处理后输出航迹结果再回传给仿真台。我在这类任务里会把 ETestDEV5 分成两个角色来用一边作为总线激励源按仿真模型生成的时序发送数据一边作为结果采集器监听被测设备输出的航迹报文实时判读。它的架构支持在同一个工程里启动多个采集任务和激励任务底层由资源部署服务协调各节点不会出现“采集器跑太快把 CPU 占满、激励时序被拖垮”的问题。4.3 场景三自动化回归测试软件迭代频繁时每次改版后都要重复跑接口测试用例人工点击和比对已经跟不上节奏。ETestDEV5 支持无人值守执行模式你可以把测试任务通过命令行或调度接口触发。比如每晚凌晨三点由 CI 服务器触发一次脚本执行跑完后自动生成报告并推送到项目共享目录。回归测试的核心诉求是“可重复、可追溯”。因为 ETestDEV5 的工程模型本身就是结构化的每次执行结果都会落成数据文件下一次执行可以快速和上一次比对——报文计数、校验和、响应时间等。我之前碰到过一个问题某版本升级后设备的某个通信字不在预期位置了但 UI 手动测试时不容易发现回归脚本里直接搜索该信号并断言立刻暴露。4.4 场景四外场测试与多点分布式采集大型装备的测试经常是“一台被测对象多个远距离测试点”。比如测试一个车载综合电子系统动力舱有一个测试点驾驶舱有一个测试点车尾的配电箱又一个测试点几个点之间距离可能几十米。这时候 ETestDEV5 的分布式部署能力就派上用场。每个测试点放一个工控机作为数据采集节点节点上安装对应的总线采集组件通过网络汇聚到总控节点。总控节点统一显示所有通道的数据既能分屏看每一路的实时曲线又能把多路数据按同一时间轴对齐分析。这个场景对架构的要求就是各节点时钟要同步、数据要统一回传、任务要能远程下发。ETestDEV5 在部署时提供时间同步配置项强烈建议在外场测试时提前做一次全节点对时否则回传数据的先后顺序会整理到你崩溃。4.5 场景五教学演示与技术验证如果你是高校或者研究所在做嵌入式测试技术教学或者要向甲方演示一个“测试方案可行性”ETestDEV5 也很合适。它图形化程度高、脚本门槛低学生不需要先去学底层总线那套知识也能快速做一个小闭环。我当时带团队做预研时就是用 ETestDEV5 搭了一个协议转换器的测试环境当天就让新来的同事在面板设计器上拖出了一个简易控制界面完成了数据的发送和回显验证。5. 架构带来的实操要求选型、安装、部署中的经验与坑架构优势说完下面聊点实际的。架构决定了你在真实项目里的操作姿势同时也会带来一些必须接受的约束。5.1 安装选型先查架构标识别等系统拒绝你了才去救我建议你在下载 ETestDEV5 安装包之前先确认目标机器的 CPU 架构和操作系统。Linux 系统下一条命令就能解决uname -m输出x86_64就选 x86_64 的安装包输出aarch64就选 arm64 的安装包。Windows 系统可以在“此电脑—属性”里看系统类型。这一步一定别省否则就会出现开头说到的“软件包架构不匹配”。另外ETestDEV5 在不同操作系统上的安装包后缀不一样统信 UOS 用.deb银河麒麟有时用.rpm有些版本提供通用安装脚本。我踩过的坑是在一台国产系统上同时装了多个架构的依赖库导致系统里同时存在libxxx.so的 x86 和 arm 版本动态加载时行为诡异。这种环境问题根源往往不是 ETestDEV5 本身而是系统级的多架构混合建议安装前先做一次干净的适配。5.2 分布式部署时主控节点和执行节点的责任要分清分布式模式虽然强大但部署时最容易乱。我在第一个分布式项目上吃了亏我把主控节点也接了一块总线板卡想着“反正都装了驱动一起采不更省事”结果采集任务负载一高主控的界面显示也跟着卡。后来我总结了一套相对稳的分工原则节点类型建议配置职责主控节点高分辨率显示器、性能中等即可界面显示、任务下发、报告处理执行节点看重 CPU 实时性、磁盘写入速度激励生成、数据采集、时序执行把主控从数据采集任务中摘出来之后远程操作的体验有明显好转。执行节点哪怕采集量很大主控这边依然能流畅翻看实时曲线。5.3 工程文件中的资源路径别写“死”分布式部署时最隐蔽的坑是脚本里的绝对路径。你在主控节点上写了一个脚本里面读文件用的是C:\data\input.bin这个路径在本地没问题。但当你把任务下发到执行节点时如果那个节点上没有这个路径脚本就会直接报错。我现在的习惯是在脚本里优先使用相对路径以工程文件所在目录为基准工程属性里设置一个“全局数据目录”各节点统一挂载共享存储下发脚本前先做一次“资源路径预检”确认引用文件在目标节点上可访问。由于 ETestDEV5 的工程模型是可导入导出的你要在多个节点间移动工程时建议不要直接打包整个工程目录传过去而是用它的工程导出功能生成描述文件在新节点上导入并重新映射路径。5.4 驱动组件加载失败时的排查链路正常启动后你打开设备资源管理器如果发现某个总线设备显示“驱动不可用”或“组件未加载”我的排查顺序是先看驱动组件是否安装到安装目录下的 components 路径查看对应的板卡驱动目录是否存在再看板卡硬件是否被系统识别Linux 下用lspci或lsusbWindows 下查看设备管理器确认 ETestDEV5 的日志文件注意区分系统日志和测试执行日志两个路径不同如果系统识别正常但 ETestDEV5 不识别优先怀疑权限问题——用 root 或管理员权限重新打开软件虽说我们不鼓励随便给管理员权限但在测试工控机上这是最常见的权宜之计最终回到组件版本是否与 ETestDEV5 版本匹配。这个链路走下去绝大多数驱动问题能在五分钟内锁定方向。5.5 时间同步问题影响数据分析结论在分布式采集场景下各节点打点的时间戳来自各自系统时钟。如果节点间的时钟偏移达到秒级后面对齐分析时你会看到“同一时刻”的数据明显错位。实际测试时我用 NTP 或手动对时的方式把所有节点统一到同一时间基准再开始测试任务。还有一个细节如果被测设备本身有自己的时间同步机制比如 1553B 总线的时间字建议在数据采集时记录总线时间字和系统时间戳的映射关系分析时以总线时间为主、系统时间戳为辅。6. 再分享一个我实际项目中的小经验最后说个实际项目里挺有用的小技巧。如果你需要长时间跑测试任务比如连续跑一整夜的压力测试不要只在界面上看结果。ETestDEV5 支持把实时数据同时写入本地文件这个功能在数据量大的时候很容易被忽略因为默认界面更吸引注意力。我建议是面向长时间任务把数据落盘打开按“日期节点通道”命名文件每 500MB 切换一个新文件避免单个文件超大影响后续分析。测试结束后先用脚本统计报文总帧数、错误帧数、最小/最大/平均响应时间再决定要不要全面打开曲线图。这样一方面能提前感知系统是否异常另一方面给评审准备数据时也更有底气。架构这个东西刚接触时总觉得抽象但一旦把它跟实际使用场景串起来你会发现每一层设计都有它针对的痛点。ETestDEV5 的架构谈不上花哨却把嵌入式系统测试里最核心的几件事——多总线接入、脚本自动化、分布式部署、数据回放——都稳稳地接住了。你照着这个思路去用大概率能少走点弯路。
返回列表