当前位置: 首页 > news >正文

基于Postman的Redfish接口自动化测试实战

1. 为什么选择Postman做Redfish接口测试

第一次接触Redfish接口测试时,我尝试过直接写Python脚本,也用过curl命令,但发现维护成本太高。直到用Postman做了个完整测试流程,才发现这简直是硬件工程师的瑞士军刀。Postman最吸引我的地方在于它能像搭积木一样组织测试步骤,还能自动保存认证token、环境变量这些关键信息。

Redfish作为服务器硬件管理的RESTful接口标准,天生适合用Postman来测试。比如查询服务器资产时,传统方式要手动拼接HTTP请求,而Postman只需要保存一个GET请求模板,下次换个IP就能直接测试新设备。实测下来,用Postman做BIOS参数修改的效率比命令行高3倍以上,特别是需要反复测试不同启动顺序的场景。

对于刚接触Redfish的运维人员,Postman的图形界面比代码更友好。我带的实习生上周还在问怎么解析JSON响应,这周已经能用Tests脚本自动提取token了。当然老手会更喜欢它的自动化能力——后面我会详细演示如何把零散操作串成完整测试流。

2. 环境配置与认证流程

2.1 必须关闭的SSL验证陷阱

新手最容易卡在第一步证书验证。服务器BMC通常用自签名证书,需要在File→Settings→General里关闭"SSL certificate verification"。这个设置藏在三级菜单里,我见过不少同事花了半小时才找到。有个取巧的方法:直接在Postman地址栏输入"postman://settings"能快速跳转到设置页。

更稳妥的做法是导入BMC的CA证书。曾经有次测试环境突然报证书错误,后来发现是BMC证书过期了。所以我现在会先在Chrome访问BMC界面,导出证书后再配置到Postman的Certificates选项里。

2.2 会话管理的三个关键点

登录接口的Tests脚本值得仔细设计:

var Token = postman.getResponseHeader("X-Auth-Token"); pm.globals.set("X-Auth-Token", Token); pm.globals.set("SessionLocation", postman.getResponseHeader("Location"));

这里我踩过两个坑:一是忘记检查响应状态码,导致无效token被存入全局变量;二是漏存SessionLocation,后续操作会报403错误。建议在Tests里加上状态码校验:

pm.test("Status code is 201", function() { pm.response.to.have.status(201); });

3. 构建端到端测试流程

3.1 硬件资产信息闭环验证

获取系统信息不只是发个GET请求那么简单。完整的资产校验应该包含:

  • 验证关键字段存在性(如SerialNumber)
  • 检查内存总量是否匹配预期
  • 对比PCIe设备列表与采购清单

我常用的断言脚本示例:

var jsonData = pm.response.json(); pm.test("Check serial number", function() { pm.expect(jsonData.SerialNumber).to.be.a('string').and.not.empty; }); pm.test("Verify memory size", function() { pm.expect(jsonData.MemorySummary.TotalSystemMemoryGB).to.be.above(64); });

3.2 电源控制的安全策略

服务器上下电操作需要特别注意:

  1. 生产环境必须先用GracefulShutdown
  2. 测试脚本要包含状态检查间隔
  3. 强制重启前确保存储设备已卸载

我设计的状态检查流程:

function checkPowerState(expected) { pm.sendRequest({ url: pm.variables.get("deviceip") + "/redfish/v1/Systems/1", method: 'GET', header: { 'X-Auth-Token': pm.globals.get("X-Auth-Token") } }, function (err, res) { if (res.json().PowerState !== expected) { setTimeout(() => checkPowerState(expected), 5000); } }); }

4. 用户与网络配置实战

4.1 用户管理的ETag陷阱

修改用户信息时必须处理ETag,这个细节文档里很少强调。完整流程应该是:

  1. GET获取用户当前ETag
  2. 在PATCH请求头携带If-Match
  3. 失败时自动重试获取新ETag

我写的自动更新ETag脚本:

if (pm.response.code === 412) { pm.sendRequest({ url: pm.request.url, method: 'GET', headers: { 'X-Auth-Token': pm.globals.get("X-Auth-Token") } }, (err, res) => { const newETag = res.headers.get('ETag'); pm.globals.set("ETag", newETag); postman.setNextRequest(pm.info.requestName); }); }

4.2 网络配置的原子性操作

修改BMC管理地址时,遇到过配置不同步的问题。现在我会:

  1. 先获取当前所有网口配置
  2. 批量更新IPv4和IPv6设置
  3. 最后验证连通性

关键请求体结构:

{ "IPv4Addresses": [{ "Address": "192.168.1.100", "SubnetMask": "255.255.255.0", "Gateway": "192.168.1.1" }], "IPv6Addresses": [{ "Address": "2001:db8::1", "PrefixLength": 64 }] }

5. BIOS设置的自动化技巧

5.1 启动顺序的智能修改

修改BootTypeOrder时要注意不同厂商的实现差异。戴尔服务器要求完整列出所有启动项,而惠普只需要修改需要调整的项。我的兼容性处理方案:

const vendor = pm.variables.get("vendor"); let body = {}; if (vendor === "Dell") { body = { "Attributes": { "BootTypeOrder0": "HardDiskDrive", "BootTypeOrder1": "DVDROMDrive", "BootTypeOrder2": "PXE" } }; } else { body = { "Attributes": { "BootTypeOrder1": "DVDROMDrive" } }; }

5.2 批量修改BIOS参数

通过Redfish可以一次修改多个BIOS设置,但要注意参数依赖关系。比如修改虚拟化设置后需要同时调整性能配置。我通常会先GET当前设置,用脚本生成差异化的PATCH请求:

const current = pm.response.json(); const modified = JSON.parse(JSON.stringify(current)); modified.Attributes["IntelVTForDirectedIO"] = "Enabled"; modified.Attributes["ProcTurboMode"] = "Enabled"; pm.variables.set("biosSettings", JSON.stringify(modified));

6. 集成到CI/CD流水线

6.1 Newman的进阶用法

用Newman跑自动化测试时,建议:

  • 使用--global-var传入设备IP
  • 设置--timeout-request防止卡死
  • 配合--reporters html生成可视化报告

我的常用命令组合:

newman run Redfish_Test_Collection.json \ --global-var "deviceip=192.168.1.100" \ --timeout-request 60000 \ --reporters cli,html \ --reporter-html-export report.html

6.2 异常处理的最佳实践

在Jenkins pipeline中,我增加了这些容错机制:

  1. 测试前ping检查设备在线状态
  2. 失败时自动收集BMC日志
  3. 电源操作后强制等待冷却期

示例Jenkinsfile片段:

post { always { archiveArtifacts artifacts: 'newman/*.html' } failure { sshagent(['bmc-creds']) { sh 'ipmitool sel elist > bmc_logs.txt' } } }

7. 性能优化与调试技巧

7.1 请求缓存的妙用

对于只读操作如资产查询,可以启用Postman的缓存功能。在Pre-request Script中添加:

const cacheKey = pm.request.url.toString(); const cached = pm.cache.get(cacheKey); if (cached) { pm.request.headers.add({key: 'If-None-Match', value: cached.etag}); }

然后在Tests里更新缓存:

if (pm.response.code === 304) { const cached = pm.cache.get(pm.request.url.toString()); pm.test("Using cached data", () => {}); } else if (pm.response.code === 200) { pm.cache.set(pm.request.url.toString(), { data: pm.response.json(), etag: pm.response.headers.get('ETag') }); }

7.2 真实场景的负载测试

用Postman模拟并发请求时,要注意Redfish接口的限流策略。我的压力测试方案:

  1. 阶梯式增加并发数
  2. 监控BMC的CPU利用率
  3. 自动降级机制

使用Postman的setNextRequest可以构建复杂场景:

// 压力测试控制逻辑 if (pm.iterationData.get('concurrent') < 10) { postman.setNextRequest('Get_System_Info'); pm.iterationData.set('concurrent', pm.iterationData.get('concurrent') + 1); }
http://www.jsqmd.com/news/896568/

相关文章:

  • AltiumDesigner PCB案牍(2)——Gerber文件交付前的CAM350校验与常见陷阱规避
  • Virtual-ZPL-Printer:告别物理打印机,高效测试Zebra条码标签的智能解决方案
  • 2026南通市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 防水补漏3
  • 【力扣100题】53.最长回文子串
  • 基于4T2M TCAM的无损软PUF设计:硬件安全新范式
  • 安培环路定律|磁路计算核心公式 + 工程应用
  • 多人协作表格哪个好用?2026年最新工具答案来了
  • 2026年4月镀锌管采购攻略:精选厂家一览,20#无缝钢管/薄壁精密钢管/异型管/厚壁无缝钢管/方管,镀锌管公司推荐 - 品牌推荐师
  • 2026降AI率工具红黑榜:AI智能降重工具怎么选?清单来了 - 降AI小能手
  • 毕业答辩效率神器|告别熬夜改PPT,百考通AI一站式搞定答辩演示文稿
  • 魔兽世界API与宏命令工具:终极免费指南与实用技巧
  • 国际机票代理哪家强?实测3家龙头:第一名武汉圣擎,售后无人能及! - 土星买买买
  • 如何快速完成音频格式转换:免费工具FlicFlac的完整指南
  • 2026年反渗透水处理设备厂家怎么选?标杆企业全景洞察与应用深度解析 - 深度智识库
  • 告别笨重的串口助手:用SEGGER RTT Viewer实时抓取单片机日志的完整配置流程
  • 从‘unwrap’函数到三维点云:Matlab四步相移条纹三维重建全流程拆解
  • 保姆级教程:在Ubuntu 22.04上用SCons为CanMV K230大小核交叉编译CoreMark(附完整SConstruct文件)
  • 2026济宁市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 防水补漏3
  • 3个被忽略的习惯断点,正在悄悄废掉你的ChatGPT生产力:即刻启用「Prompt-Action-Review」三阶追踪表
  • 3步搞定Nginx配置美化:新手也能快速上手的终极指南
  • STM32CubeMX实战指南:定时器中断精准控制与多场景应用
  • Windows软件测试员的效率神器:用Python uiautomation + Inspect.exe实现‘所见即所得’的控件抓取与回放
  • 基于MCP协议自建DORA指标仪表盘:从数据驱动到效能闭环
  • 【他山之石】《被讨厌的勇气》导读
  • 从问答到执行:Claude Code如何实现一键式智能安全审计
  • 使用容器提供postgresql RESTful API服务 - Fan
  • 如何用novelWriter提升小说创作效率:开源结构化写作工具终极指南
  • 毕业答辩高效通关:用百考通AI 30分钟搞定专业答辩PPT
  • 构建容错性强的AI应用时如何借助Taotoken的路由与容灾能力
  • harness与hermes-agent的区别