测试用例
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 失败的实际原因
综合以上分析,当前失败的直接原因可定性为:
-
测试用例实际执行时 ,Administrator 数据行的
valid_status_code被作为字符串[200,204]传递给Add IP Address。 -
Add IP Address未检测到HTTP_OK,因此未进行扩展,直接将此字符串原样传递。 -
调用
Redfish.Patch时,使用valid_status_codes=[${valid_status_codes}],将字符串[200,204]包装成嵌套列表[[200,204]]。 -
BMC 返回 204,但 Redfish 库无法将 204 与嵌套列表中的允许状态码正确匹配,抛出
ValueError。
重点强调 :
目前没有证据表明 Add IP Address 中 valid_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 执行失败的问题。