如何将一个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=*
而且问题得到解决。 :)
答
假定在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,并再次提供 - 提供更多详细信息以接收现场答案。
请至少在my_search关键字中提供一些细节,至少在哪里会引起错误猜测。由于这里存在字符限制,将会出现明显问题的答案,但以这种细节为准,这是一个疯狂的猜测。 – Todor