如何在 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,再次 - 提供更多详细信息以接收现场答复。
我创建了 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,再次 - 提供更多详细信息以接收现场答复。