Configure IP Address Via Different User Roles And Verify(1)

测试用例

Configure IP Address Via Different User Roles And Verify

Documentation Configure IP address via different user roles and verify.

Tags Configure_IP_Address_Via_Different_User_Roles_And_Verify

Teardown Restore LDAP Privilege

Template Update LDAP User Role And Configure IP Address

Verify LDAP user with Administrator privilege is able to configure IP address.

{LDAP_TYPE} Administrator {GROUP_NAME} ${HTTP_OK},${HTTP_NO_CONTENT}

Verify LDAP user with ReadOnly privilege is forbidden to configure IP address.

{LDAP_TYPE} ReadOnly {GROUP_NAME} ${HTTP_FORBIDDEN}

Verify LDAP user with Operator privilege is able to configure IP address.

{LDAP_TYPE} Operator {GROUP_NAME} ${HTTP_FORBIDDEN}

模板关键字:

Update LDAP User Role And Configure IP Address

Documentation Update LDAP user role and configure IP address.

Arguments\] ${ldap_type} ${group_privilege} ${group_name} ${valid_status_code}=\[${HTTP_OK,${HTTP_NO_CONTENT}

Teardown Run Keywords Redfish.Logout AND Redfish.Login AND Delete IP Address ${test_ip}

Description of argument(s):

ldap_type The LDAP type ("ActiveDirectory" or "LDAP").

group_privilege The group privilege ("Administrator", "Operator" or "ReadOnly").

group_name The group name of user.

valid_status_code The expected valid status code.

Update LDAP Configuration With LDAP User Role And Group ${ldap_type}

... {group_privilege} {group_name}

Redfish.Logout

Redfish.Login {LDAP_USER} {LDAP_USER_PASSWORD}

${test_gateway}= Get BMC Default Gateway

Add IP Address {test_ip} {test_mask} {test_gateway} {valid_status_code}

问题一:admin返回了204状态码,符合预期但是测试失败

一、初始现象

测试套件redfish/account_service/test_ldap_configuration.robot

测试用例Configure IP Address Via Different User Roles And Verify

当前状态:仅启用 Administrator 数据行

测试数据行

robotframework

复制代码
[Template]  Update LDAP User Role And Configure IP Address
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  [${HTTP_OK},${HTTP_NO_CONTENT}]

执行流程

  • 测试用例调用模板关键字 Update LDAP User Role And Configure IP Address,后者内部调用 Add IP Address

  • Add IP Address 内部最终执行 Redfish.Patch 操作。

实际结果

  • BMC 返回 HTTP 204 No Content(符合预期,因为 Administrator 配置 IP 时,BMC 可能返回 200 或 204)。

  • 测试用例最终 FAIL,错误信息如下:

复制代码
ValueError: The HTTP status code was not valid:
status: 204
valid_status_codes:
  [0]:
    [0]: 200
    [1]: 204
  • 说明 Redfish 库收到的 valid_status_codes[[200,204]],而不是 [200,204],导致 204 被认为不合法。

二、最初对原因的初步判断

最初怀疑问题出在 Add IP Address 关键字内部的这句代码:

robotframework

复制代码
Redfish.Patch ... valid_status_codes=[${valid_status_codes}]

如果 ${valid_status_codes} 本身是列表 [200,204],再套一层 [ ] 就会变成 [[200,204]],从而导致校验失败。

但进一步分析后发现,这不能直接认定为底层关键字实现错误


三、实际代码关系分析

1. Update LDAP User Role And Configure IP Address 关键字定义

robotframework

复制代码
[Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}
...  ${valid_status_code}=[${HTTP_OK},${HTTP_NO_CONTENT}]
  • 该关键字仅将 valid_status_code 直接传递给 Add IP Address,未做任何处理。

2. Add IP Address 关键字定义

robotframework

复制代码
[Arguments]  ${ip}  ${subnet_mask}  ${gateway}
...  ${valid_status_codes}=${HTTP_OK}
  • 内部包含状态码转换逻辑:

robotframework

复制代码
${valid_status_codes}=  Set Variable If
...  '${valid_status_codes}' == '${HTTP_OK}'
...  ${HTTP_OK},${HTTP_NO_CONTENT}
...  ${valid_status_codes}
  • 设计意图 :调用方传入单个状态码(如 ${HTTP_OK}),Add IP Address 将其扩展为 200,204,再传递给 Redfish.Patch 时包装成列表 [200,204]

因此,valid_status_codes=[${valid_status_codes}] 本身不是错误 ,它是在将 keyword 内部处理好的 200,204 包装成 Redfish 库需要的列表格式。


四、Admin 失败的实际原因

综合以上分析,当前失败的直接原因可定性为:

  1. 测试用例实际执行时 ,Administrator 数据行的 valid_status_code 被作为字符串 [200,204] 传递给 Add IP Address

  2. Add IP Address 未检测到 HTTP_OK,因此未进行扩展,直接将此字符串原样传递。

  3. 调用 Redfish.Patch 时,使用 valid_status_codes=[${valid_status_codes}],将字符串 [200,204] 包装成嵌套列表 [[200,204]]

  4. BMC 返回 204,但 Redfish 库无法将 204 与嵌套列表中的允许状态码正确匹配,抛出 ValueError

重点强调

目前没有证据表明 Add IP Addressvalid_status_codes=[${valid_status_codes}] 本身存在缺陷。

真正的问题是调用约定没有被正确遵守------测试用例应当传入单个状态码,而不是列表或字符串形式的列表。


五、修改方式

1. 修改 Administrator 的 Template 数据行

修改前

robotframework

复制代码
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  [${HTTP_OK},${HTTP_NO_CONTENT}]

修改后

robotframework

复制代码
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  ${HTTP_OK}

理由 :利用 Add IP Address 现有逻辑,传入 200 后自动扩展为 200,204,仍然兼容 BMC 返回 200 或 204 的实现。

2. 同步调整 Update LDAP User Role And Configure IP Address 的默认值

修改前

robotframework

复制代码
[Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=[${HTTP_OK},${HTTP_NO_CONTENT}]

修改后

robotframework

复制代码
[Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=${HTTP_OK}

理由 :使上层关键字的参数语义与底层 Add IP Address 保持一致(即期望单个状态码),避免后续调用者误解。


六、建议最终修改后的代码

模板关键字定义

robotframework

复制代码
Update LDAP User Role And Configure IP Address
    [Documentation]  Update LDAP user role and configure IP address.
    [Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=${HTTP_OK}
    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login  AND  Delete IP Address  ${test_ip}

    Update LDAP Configuration With LDAP User Role And Group  ${ldap_type}
    ...  ${group_privilege}  ${group_name}

    Redfish.Logout
    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}

    ${test_gateway}=  Get BMC Default Gateway
    Add IP Address  ${test_ip}  ${test_mask}  ${test_gateway}  ${valid_status_code}

测试数据行

robotframework

复制代码
[Template]  Update LDAP User Role And Configure IP Address
# Verify LDAP user with Administrator privilege is able to configure IP address.
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  ${HTTP_OK}

总结:修改仅涉及测试用例层面的参数传递,不修改底层库,风险低、效果明确。此方案已通过实际验证,可有效解决 Administrator 执行失败的问题。

相关推荐
我爱吃土豆14 小时前
AI 编程工具远程开发指南:Codex 桌面版与 WorkBuddy 通过 SSH 连接云服务器实践
服务器·人工智能·ssh
一技安身5 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
Dawn-bit7 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发
新时代牛马7 小时前
Linux 定时任务:crontab、anacron 与systemd timer
linux·运维·服务器
IT摆渡者7 小时前
1panel 配置申请手动解析网站SSL证书
服务器·网络协议·ssl
疯狂打码的少年8 小时前
【计算机网络】子网掩码与子网划分计算(含CIDR表示法)
服务器·笔记·计算机网络·php
网硕互联的小客服8 小时前
怎样在CMD里用chkntfs /x C: 命令来取消磁盘自检?——原理与实践全解
运维·服务器·网络
布莱克6058 小时前
Linux 常用命令详解:从入门到实战
linux·运维·服务器
学习路上_write10 小时前
Linux黑马命令学习
linux·运维·服务器
那年窗外下的雪.10 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法