2017-10-10 5 views
0

C'est ma fonction:Python {RobotFramework} Fonction retourne 3 valeurs, mais sur la collecte en 3 variables obtenir "ValueError: trop de valeurs pour déballer"

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 

Robot framework file to run the function

L'erreur est:

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

Veuillez ne pas créer de lien vers une image du code qui exécute le mot-clé. Prenez le temps de copier et coller le code dans la question. –

+0

Qu'avez-vous fait pour le déboguer? Avez-vous essayé de stocker le résultat dans une seule variable, puis d'examiner la variable pour vous assurer qu'elle contient ce que vous supposez qu'elle contient? Même si votre fonction renvoie trois valeurs, le mot clé qui appelle la fonction n'en renvoie peut-être qu'un seul. –

+0

@BryanOakley ... La fonction retourne 3 valeurs et le mot-clé (le nom de la méthode elle-même) appelant la fonction devrait lui aussi renvoyer 3 valeurs. La capture d'écran est du fichier (dans mon cadre de robot) qui appelle la classe et la méthode que j'essaie de lancer. Je ne peux pas stocker les valeurs de retour dans un seul var car j'ai besoin de différentes valeurs spécifiques que ma fonction me donne. Plz dites s'il y a quelque chose d'autre dont vous avez besoin de myside pour comprendre l'erreur ici J'ai essayé – nomoreabond2017

Répondre

0

Le problème réside dans l'intégration de Robot Framework et du code Python. Fondamentalement, Robot Framework vous permet d'appeler des évaluations Python-style d'expressions (et seulement des expressions) avec Evaluate, situé dans la bibliothèque BuiltIn. Si Execute existe dans votre configuration de test, il s'agit probablement d'un mot-clé personnalisé, pas normal, car je ne trouve nulle part de documentation pour voir ce qu'il renvoie. Le plus proche que j'ai trouvé dans la documentation de base de Robot Framework (même pas répertorié comme mot-clé) est Execute Command, mais ce n'est probablement pas ce que vous cherchez.

La façon dont Robot Framework vous permet d'utiliser du code Python comme vous essayez de le faire est de créer une nouvelle bibliothèque basée sur Python. La documentation pour cela existe dans d'autres endroits sur ce site (plusieurs fois il a été mis là par moi, donc vous pouvez probablement regarder à travers mes questions répondues pour une courte [er] liste des endroits où aller). Si vous réécrivez votre code Python dans un format de bibliothèque, vous pouvez appeler votre mot-clé comme vous le feriez pour n'importe quel autre mot-clé et, en supposant que vous l'ayez correctement configuré, vous ne devriez plus avoir de problèmes. Robot Framework ne permet pas (au meilleur de ma connaissance, s'il vous plaît corrigez-moi si vous le savez mieux) vous permettre d'exécuter du code Python d'une autre manière que les deux que j'ai mis ici.

EDIT: J'ai été corrigé par quelqu'un qui sait mieux, mais je ne suis pas familier avec les appels REST. Cependant, je sais que la création de cette bibliothèque devrait fonctionner.

+1

La troisième voie est via un appel REST, ce qui semble être ce que fait l'OP. Le problème semble être - comme vous l'avez souligné - que 'execute restapi' ne retourne pas exactement ce que' postTenant' renvoie. –