2017-10-10 43 views
0

這是我的函數:的Python {RobotFramework}函數返回3個值,但是,收集他們在3個變量獲得 「ValueError異常:值過多解壓」

def postTenant(self, data): 


    rt = True 
    result = 'No Error!' 
    ews_content = {} 
    Authorization_header = '' 
    for i in range(0, 5): 
     try: 
      # pushchannel_link = '/' + service + '/pushchannels' 
      link = "https://sereverapi/servername/abc" 
      h = httplib2.Http(disable_ssl_certificate_validation=True, timeout=60) 
      resp, content = h.request(link, 
             'POST', 
             data, 
             headers={'content-type': 'application/json'}) 
      print resp 
      print content 
      # print type(content) 
      print resp.status 
      if resp.status == 200: 
       rt = True 
       result = 'No Error!' 
       print "Tenant created" 
       ews_content = json.loads(content) 
       final = (((ews_content["connectinfo"])["authentication"])["basic"]) 
       auth = ('{}:{}'.format(str(final["user"]), str(final["password"]))) 
       auth_encoded = auth.encode('base64') 
       Authorization_header = 'Basic {}'.format(auth_encoded) 
       print 'Auth Header generated' 
       print Authorization_header 
       print type(Authorization_header) 
      elif resp.status == 409: 
       print "Conflict received" 
       rt = True 
       result = 'Conflict!' 
      else: 
       rt = False 
     except Exception, strerror: 
      print 'Exception occurs:' + str(strerror) 
      rt = False 
      result = str(strerror) 
     finally: 
      print 'Now in finally block' 
      # GenAuthHeader(content) 
      if rt: 
       break; 
    return rt, result, Authorization_header 

​​

的錯誤是:

Value Error, too many values to unpack

where the values of my return variables as generated by function is : rt = True; result = 'No Error!' and Authorization_header = 'Basic cnVuYXVzZrttttdlajldjf123UVVBRUVdPQlZYQk86JkhiQiVYdVExJktmbFJiQmlSJUB0dWNk NmWER231RGw='

+0

請不要鏈接到運行關鍵字的代碼的圖片。花時間將代碼複製並粘貼到問題中。 –

+0

你做了什麼來調試呢?您是否嘗試將結果存儲在單個變量中,然後檢查變量以確保它包含您認爲它包含的內容?即使你的函數返回三個值,也許調用函數的關鍵字只返回一個。 –

+0

@BryanOakley ...該函數返回3個值,調用該函數的關鍵字(方法本身的名稱)也應使其返回3個值。截圖是文件(在我的機器人框架中),它調用我正在嘗試運行的類和方法。 我不能將返回值存儲在一個單獨的變量中,因爲我需要不同的具體值,這是我的函數給我的。 Plz告訴你是否還有其他東西需要你從myside中弄清楚這裏的錯誤 我試過了 – nomoreabond2017

回答

0

問題在於你整合了Robot Framework和Python代碼。從根本上說,Robot Framework允許您使用位於BuiltIn庫中的Evaluate來調用Python式表達式(僅表達式)的評估。如果您的測試設置中存在Execute,則可能是自定義關鍵字,而不是正常關鍵字,因爲我無法在任何地方查找文檔以查看其返回結果。我在最基本的Robot Framework文檔中找到的最接近的數據是Execute Command,但這可能不是您要查找的內容。

Robot Framework允許您像使用Python代碼一樣使用Python代碼的方式是創建一個新的基於Python的庫。這個網站上的文檔存在於本網站的其他地方(有幾次是我放在那裏的,所以你可以通過我的回答問題找出一個簡短的地方)。如果您將Python代碼重新編寫爲庫格式,那麼您可以像調用其他任何關鍵字一樣調用關鍵字,並且假設您正確設置了它,則在返回三個變量時不應再有任何問題。

Robot Framework沒有(據我所知,如果你知道的更好,請更正我)允許你以其他任何方式運行Python代碼,而不是我放在這裏的兩種方式。

編輯:我改正了一個更好的人,但我不熟悉REST調用。但是,我確實知道把它作爲一個圖書館應該是有效的。

+1

第三種方式是通過REST調用,這似乎是OP正在做的事情。這個問題似乎是 - 正如你所指出的 - '執行restapi'並不是完全返回'postTenant'返回的結果。 –

相關問題