2017-03-01 51 views
0

我創建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

回答

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數據類型;要得到它,請使用此RF內置變量 - ${None}

HTH,並再次提供 - 提供更多詳細信息以接收現場答案。

+0

謝謝@Todor。該問題出現在ldap.SCOPE_ONELEVEL中。我無法直接從機器人測試用例中傳遞。它拋出這個錯誤。所以我做的是我從Robot TC傳遞了一個ONE,然後修改了python函數來選擇ldap.SCOPE_ONELEVEL。更新原始帖子。 – Arpitha

+0

這是一個可行的解決方案,很棒:) – Todor

相關問題