我已经创建了Python函数,以通过LDAP对象进行搜索:
def my_search(l, baseDN, searchScope=ldap.SCOPE_ONELEVEL, searchFilter="objectClass=*", retrieveAttributes=None):
logger.console("Reachedhere")
try:
logger.console("Reachedhereinsidetryn")
ldap_result_id = l.search_s(baseDN,searchScope,searchFilter,retrieveAttributes)
logger.console("Gotresultn")
所以我现在在机器人测试柜中调用此关键字:
*** 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(基于搜索,搜索filter,retrieveatTributes)"中,因为我能够打印早期的注释。
这里有什么问题?
这里的问题是范围级别,该范围无法按照机器人的方式传递。我所做的更改是:
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模块中定义的常数;最安全的赌注是,它将以${1}
的格式提供该const整数的整数价值,但这几乎是可持续的。也许您可以将其导出和COMMON/Libraries/pythonldap.py
库中的其他常数,并在测试用例中使用它 - 最后,
retrieveAttributes
参数将接收字符串文字"无",而不是您可能想要的None
数据类型。要获得它,请使用此RF内置变量-${None}
hth,再次提供更多详细信息以接收现场答案。