我创建了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=*
问题得到解决。 :)
答案 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,再次 - 提供更多细节以获得现场答案。