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

时间:2017-03-01 11:39:43

标签: python robotframework python-ldap

我创建了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")

所以我现在在Robot Testcase中调用此关键字,如下所示:

*** 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=*

问题得到解决。 :)

1 个答案:

答案 0 :(得分:1)

假设在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的整数值 - 整数以${1}格式给出,但这几乎不可持续。也许您可以将它和COMMON/Libraries/pythonldap.py库中的其他常量导出,并在测试用例中使用它
  • 最后,retrieveAttributes参数将接收字符串文字" None",而不是您可能想要的None数据类型;要获得它,请使用此RF内置变量 - ${None}

HTH,再次 - 提供更多细节以获得现场答案。