如何在 python 函数中将 ldap 对象转换为整数?

How can I convert an ldap object to integer in a python function?

我创建了 python 函数来搜索 ldap 对象,如下所示:

def my_search(l, baseDN, searchScope=ldap.SCOPE_ONELEVEL, searchFilter="objectClass=*", retrieveAttributes=None):
    logger.console("Reachedhere")
    try:
        logger.console("Reachedhereinsidetry\n")
        ldap_result_id =       l.search_s(baseDN,searchScope,searchFilter,retrieveAttributes)
        logger.console("Gotresult\n")

所以我现在在机器人测试用例中调用这个关键字:

*** Settings ***
Documentation     This testsuite checks the LDAP functionalities of DB nodes.
Resource          ../../COMMON/Libraries/SDL-DB-COMMON-LIB.txt
Library           ../../COMMON/Libraries/pythonldap.py

*** Test Cases ***
Perform Ldap Operations
    ${ldapObj}    ldapopen    ${DB_1_EXT_APP_IP}
    Log to Console    ${ldapObj}
    ${SearchReturn}    my_search    ${ldapObj}    "uid=5000000,ds=CRIBER,o=D,dc=CN"    ldap.SCOPE_ONELEVEL    "objectClass=*"    None

当我 运行 这个 TC 时,它在搜索中抛出一个错误,如下所示:

TypeError: an integer is required

错误肯定在 "ldap_result_id = l.search_s(baseDN,searchScope,searchFilter,retrieveAttributes)" 行,因为我可以打印之前的评论。

这里有什么问题?

这里的问题是不能像上面那样从 Robot 传递的范围级别。我所做的更改是:

def my_search(l, baseDN, searchScopeLevel, searchFilter="objectClass=*", retrieveAttributes=None):
try:
    if searchScopeLevel == 'ONE':
        searchScope=ldap.SCOPE_ONELEVEL
    elif searchScopeLevel == 'BASE':
        searchScope=ldap.SCOPE_BASE
    elif searchScopeLevel == 'SUB':
        searchScope=ldap.SCOPE_SUBTREE
    ldap_result_id = l.search(baseDN,searchScope,searchFilter,retrieveAttributes)

机器人 TC 变化:

*** Test Cases ***
Perform Ldap Operations
    ${ldapObj}    ldapopen    ${DB_1_EXT_APP_IP}
    ${SearchReturn}    my_search    ${ldapObj}        uid=205000000,ds=CRIBER,o=DEFT,dc=C    ONE    objectClass=*

问题已解决。 :)

假设在 my_search 方法中引发了异常 - 默认情况下,RF 中方法的参数被转换为字符串。因此这个调用:

${SearchReturn}    my_search    ${ldapObj}    "uid=2620105000000,ds=SUBSCRIBER,o=DEFAULT,dc=C-NTDB"    ldap.SCOPE_ONELEVEL    "objectClass=*"    None

有一些问题:

  • baseDN 参数将有一个实际值 "uid=2620105000000,ds=SUBSCRIBER,o=DEFAULT,dc=C-NTDB" - 即包含引号,因此可能不是您想要的;删除它们
  • searchFilter 相同 - 删除调用中的引号
  • searchScope,这可能是您的问题,将收到值 ldap.SCOPE_ONELEVEL - 具有此内容的字符串。这很可能是在您的 ldap 模块中定义的常量;最安全的做法是提供该 const 的整数值——整数以 </code> 格式给出,但这很难持续。也许您可以将它和 <code>COMMON/Libraries/pythonldap.py 库中的其他常量导出,并在测试用例中使用它
  • 最后,retrieveAttributes 参数将接收字符串文字 "None",而不是您可能想要的 None 数据类型;要得到它,请使用这个 RF 内置变量 - ${None}

HTH,再次 - 提供更多详细信息以接收现场答复。