2017-02-02 3 views
2

J'essaie d'utiliser la RequestsLibrary sur une API en utilisant l'authentification OAUTH2.Robot Framework api test avec l'en-tête de demande d'autorisation OAUTH2

L'authentification s'effectue via OAUTH2 avec les informations d'identification fournies au point de terminaison/v1/authtoken. Les appels suivants à API doivent inclure le jeton en tant que «porteur» dans l'en-tête «Autorisation» des demandes http.

Voici donc le scénario de test. L'erreur que j'obtiens est: 401! = 200

Les informations d'identification fonctionnent correctement dans jmeter et une liste de comptes est renvoyée. Cependant, je ne suis pas capable de faire fonctionner le script RF. Toute aide serait appréciée.

Dans le script,

  1. Se connecter à la console ${accessToken} retourne le jeton d'accès: 8ETFXTZOWQLrgsMj7c_KuCEeypdj-eO1r ...
  2. Se connecter à la console ${token} Retours: Bearer 8ETFXTZOWQLrgsMj7c_KuCEeypdj-eO1r ...


*** Test Cases *** 

Get authToken 
    Create Session hook http://xxxx.azurewebsites.net verify=${True} 
    ${data}=  Create Dictionary  grant_type=client_credentials  client_id=yyy-zzzz  client_secret=xxxxxxxxxxxxxxx 
    ${headers}= Create Dictionary  Content-Type=application/x-www-form-urlencoded 
    ${resp}= post request hook /v1/authtoken data=${data} headers=${headers} 
    Should Be Equal As Strings ${resp.status_code}  200 
    Dictionary Should Contain Value  ${resp.json()} bearer 
    ${accessToken}= evaluate $resp.json().get("access_token") 
    Log to Console  ${accessToken} 
    ${Bearer}=  Set Variable Bearer 
    ${token}=  catenate Bearer ${accessToken} 
    Log to Console  ${token} 
    ${headers}= Create Dictionary Authorization=${token} 
    ${resp1}=  get request  hook /v1/integration/accounts headers=${headers} 
    Should Be Equal As Strings ${resp1.status_code} 200 
    #Log to Console ${resp1.json()} 
+0

@ Sandeep @Bryan Avez-vous trouvé la réponse à votre question que je reçois même erreur. veuillez partager la réponse –

+0

Désolé, j'étais parti. Je viens de voir cette discussion .... Je vais essayer cela. –

+0

Oui, cela semble fonctionner pour moi maintenant. Merci. Cependant, ma méthode pure python pour générer le jeton auth2 est, je dois dire beaucoup plus concis! –

Répondre

0

J'utilise également l'authentification OAuth 2.0 pour mon automatisation Salesforce.

Ma première réponse serait d'ignorer l'authentification du client et de passer à l'authentification par nom d'utilisateur/mot de passe

 Get authToken by Password Authentication 

RequestsLibrary.Create Session hook https://<url>/services/oauth2 verify=${True} 
${data}=  Create Dictionary  grant_type=password  client_id=1abc client_secret=2abc [email protected] password=keypass 
${headers}= Create Dictionary  Content-Type=application/x-www-form-urlencoded 
${resp}=  RequestsLibrary.Post Request hook /token data=${data} headers=${headers} 
Should Be Equal As Strings ${resp.status_code}  200 
${accessToken}= evaluate $resp.json().get("access_token") 
Log to Console  ${accessToken} 

Si vous utilisez le client basé ou l'authentification basée sur le Web, il y aura un écran de connexion qui sera être utilisé par l'utilisateur pour entrer son nom d'utilisateur/mot de passe pour autoriser l'application à envoyer des demandes en son nom. Jetez un coup d'œil à ces pages pour plus d'informations car elles traitent principalement de l'utilisation des jetons d'actualisation ou de la suppression totale de l'invite utilisateur.