第一,测试依赖于测试机器测试环境构建。除了拉取代码,还需要按照说明安装一些基本的工具,例如ipmitool之类的命令;如果是GUI测试,可能还需要安装浏览器和对应的驱动
第二,测试本身有很多外部依赖。例如LDAP NTP等测试需要给真实的BMC设备配置能通过网络连接上的外部服务器
第三,测试用例本身可能存在问题。例如预期不符合等。需要具体问题具体分析,可能是用例过时,可能是用例使用了部分平台特有的关键字,或者BMC固件有改动,预期结果需要修改。或者BMC固件确认存在bug需要修复。等等
第四,没有按照用例本身的设计去使用。例如测试要求提供host os的ip 账号密码等等,在测试带内ipmi测试的时候需要在host os测执行一些命令,如果这些参数没提供,或者提供了但是实际上不生效,这时候就没办法开启测试
因此,openbmc-test-automation测试社区的测试用例如果执行失败了,要综合分析,最好就是自己跑一遍结合日志具体分析。因为一个用例测试失败了,有多个方面的原因。
四类失败原因与分析方法整合
| 分类 | 对应分析脚本中的根因 | 典型失败阶段 | 排查优先级 |
|---|---|---|---|
| 第一类:测试环境/构建未就绪 | 前置条件不满足(环境层面) | Setup / 测试主体开头 | 最高 |
| 第二类:外部依赖未配置 | 前置条件不满足(依赖层面) | Setup / 特定测试步骤 | 最高 |
| 第三类:测试用例本身有问题 | 测试预期不符合 / 需人工确认 | 测试主体(断言阶段) | 中 |
| 第四类:参数未提供或不生效 | 测试参数未传递/变量问题 | Setup / 测试主体 | 高 |
🔍 第一类:测试环境与构建依赖
核心判断 :失败发生在测试执行的最早期 ,消息通常包含 Command not found、No such file、ImportError、浏览器驱动缺失等。
排查清单:
| 依赖类型 | 需确认项 | 典型错误 |
|---|---|---|
| 基础工具 | ipmitool、expect、dmidecode、nmcli 是否安装 |
ipmitool: command not found |
| Python 环境 | Python 3.x、pip install -r requirements.txt 是否执行 |
ModuleNotFoundError: No module named 'redfish' |
| GUI 测试 | 浏览器及 WebDriver 是否安装配置 | WebDriverException: Message: 'chromedriver' executable needs to be in PATH |
| 权限 | ipmitool、dmidecode 是否需要 sudo |
Permission denied |
定位方法 :在 output.xml 中搜索失败用例的第一个失败关键字 ,检查其消息是否指向环境层面。FFDC 收集的日志(BMC_journalctl.txt、OS_dmesg.txt 等)也可以辅助判断是否是环境问题。
🔗 第二类:外部依赖未配置
核心判断 :环境构建正常,但测试连接不到外部服务 ,消息通常包含 Connection refused、Timeout、unreachable。
典型场景:
-
LDAP 测试 :BMC 需要能通过网络访问到真实的 LDAP 服务器。如果 LDAP 服务器地址不可达或配置错误,所有 LDAP 登录测试都会失败。有一个真实案例:OpenBMC 的 LDAP 测试用例因为传入了无效的 LDAP URI(
Invalid_LDAP_Server_URI),BMC 在格式校验阶段就返回了400 Bad Request,测试根本没走到登录验证步骤。 -
NTP 测试:需要 BMC 能连接到 NTP 服务器进行时间同步。
-
SOL 测试:需要 BMC 的 SOL 功能已激活,且网络路由正确。
-
虚拟介质测试:需要 ISO URL 从 BMC 网络可达,且认证信息正确。
定位方法 :检查 output.xml 中失败消息是否包含网络层面的错误。同时确认测试配置文件中 BMC_HOST、外部服务器地址等参数是否正确。
🧩 第三类:测试用例本身的问题
这是最复杂的一类,需要具体问题具体分析。常见子类型:
| 子类型 | 特征 | 示例 |
|---|---|---|
| 用例过时 | BMC 固件已更新,旧断言不再适用 | 旧版本返回 200,新版本返回 204 |
| 平台特有关键字 | 某平台专有,其他平台不支持 | pldmtool 仅适用于支持 PLDM 的平台 |
| 预期结果需修改 | BMC 行为变更,原预期不再正确 | Redfish 字段名或结构变化 |
| BMC 固件 Bug | 用例正确,固件确实有问题 | 需要提 Bug 修复 |
LDAP 案例的启示 :OpenBMC 的 LDAP 测试中,Verify LDAP Config Creation Without BASE DN 用例预期"不传 BaseDN 时 LDAP 登录应失败",但 BMC 固件实际上不接受空的 BaseDN 列表 ,直接返回 400 Bad Request 和 PropertyValueNotInList 错误。这说明用例的预期与固件实际行为之间存在偏差,需要确认是固件 Bug 还是预期需要更新。
定位方法 :在 output.xml 中查看断言失败的具体消息(expected vs actual),结合 BMC 固件版本和变更日志判断。
⚙️ 第四类:参数未传递或不生效
核心判断 :失败消息通常包含 Variable '${x}' not found、Expected N arguments, got M、Missing argument 等。
典型场景:
-
带内 IPMI 测试:需要在 Host OS 上执行命令,要求提供 Host OS 的 IP、账号、密码。如果这些参数未提供,或提供了但 SSH 连接不生效,测试无法启动。
-
配置文件中参数格式错误 :SBMR-ACS 的文档明确指出,配置文件中的配置错误是测试失败最常见的来源,配置文件使用 Robot Framework 的参数语法,需要精确的格式。
-
变量作用域问题:变量未正确传递到子关键字或 Setup/Teardown 中。
定位方法 :检查 output.xml 中的失败消息,同时核对测试配置文件(如 config 文件或 --variable 命令行参数)中的值是否正确传入。