当前位置: 首页 > 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.rkmt.cn/news/1402574.html

相关文章:

  • 3步掌握LeagueAkari:从LCU API到自动化对局管理的完整实践指南
  • 英文论文降AI只靠换词?错!亲测3种进阶方法,Turnitin从80%降至10%(附工具测评)
  • 2026南通市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 防水补漏3
  • ARM NEON SIMD技术:VMLSL与VMOV指令深度解析与优化实践
  • 生成式引擎优化的6个深坑:我踩过的和你正在踩的
  • 5分钟终极指南:Mermaid Live Editor免费在线图表编辑器完整使用教程
  • 2026年4月镀锌管采购攻略:精选厂家一览,20#无缝钢管/薄壁精密钢管/异型管/厚壁无缝钢管/方管,镀锌管公司推荐 - 品牌推荐师
  • 天龙八部单机版GM工具:专业游戏数据管理解决方案
  • MLCRP:基于重用距离谱与机器学习的GPU缓存性能快速建模
  • 从‘ANOVA’到‘Z-score’:用贾俊平《统计学》第七版词汇解锁你的第一个Kaggle数据分析项目
  • 从‘unwrap’函数到三维点云:Matlab四步相移条纹三维重建全流程拆解
  • MIT与斯坦福联手打造“地图导航仪“
  • 如何使用革命性开源工具5分钟快速获取PDF电子课本:智能解析下载终极指南
  • 基于TF-IDF与LightGBM的轻量级钓鱼邮件检测实战
  • 运营矩阵系统实战指南:从“人管号“到“系统管号“的效率跃迁
  • JavaQuestPlayer:一站式解决QSP游戏运行与开发的终极指南
  • 【他山之石】《蛤蟆先生去看心理医生》导读
  • JiYuTrainer:极域电子教室反控制终极指南与完整技术解析
  • 导师严选!盘点2026年最受欢迎的的降AIGC软件
  • novel-downloader:如何用开源工具永久保存你的数字阅读资产?
  • 如何用novelWriter提升小说创作效率:开源结构化写作工具终极指南
  • Virtual-ZPL-Printer:告别物理打印机,高效测试Zebra条码标签的智能解决方案
  • 告别库函数与CubeMX:用纯寄存器点亮STM32F103C8T6的LED(对比51单片机)
  • 小米智能家居接入HomeAssistant完整指南:一键实现全屋设备自动化控制
  • AltiumDesigner PCB案牍(2)——Gerber文件交付前的CAM350校验与常见陷阱规避
  • 如何快速使用八大网盘直链下载工具:浏览器脚本完整指南
  • 用ChatGPT设定年度目标前,你必须避开的7个认知陷阱(头部咨询公司内部培训材料流出)
  • 前端OCR实战踩坑记:Tesseract.js识别中文准确率低?试试这几个图像预处理技巧
  • harness与hermes-agent的区别
  • Cloud Document Converter:解锁飞书文档与Markdown的无缝转换