)
测试用例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.LogoutRedfish.Login ${LDAP_USER} ${LDAP_USER_PASSWORD}${test_gateway} Get BMC Default GatewayAdd 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关键字内部的这句代码robotframeworkRedfish.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保持一致即期望单个状态码避免后续调用者误解。六、建议最终修改后的代码模板关键字定义robotframeworkUpdate 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 执行失败的问题。