如何将一个ldap对象转换为一个Python函数中的整数?

问题描述:

我创建Python函数通过如下LDAP对象搜索:如何将一个ldap对象转换为一个Python函数中的整数?

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(基本DN,SearchScope的,searchFilter,检索属性)“行,因为我可以打印先前的评论。

这里有什么问题?

这里的问题是无法通过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=* 

而且问题得到解决。 :)

+0

请至少在my_search关键字中提供一些细节,至少在哪里会引起错误猜测。由于这里存在字符限制,将会出现明显问题的答案,但以这种细节为准,这是一个疯狂的猜测。 – Todor

假定在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数据类型;要得到它,请使用此RF内置变量 - ${None}

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

+0

谢谢@Todor。该问题出现在ldap.SCOPE_ONELEVEL中。我无法直接从机器人测试用例中传递。它抛出这个错误。所以我做的是我从Robot TC传递了一个ONE,然后修改了python函数来选择ldap.SCOPE_ONELEVEL。更新原始帖子。 – Arpitha

+0

这是一个可行的解决方案,很棒:) – Todor