2017-02-02 2 views
2

Ich versuche, die RequestsLibrary auf eine API, das ist die Authentifizierung mit dem OAuth2 zu verwenden.Robot Framework api Test mit OAuth2 Authorization Request-Header

Authentifizierung wird über OAuth2 mit Anmeldeinformationen an den/versorgt wird v1/authToken Endpunkt. Nachfolgende Aufrufe an den API müssen das Token als "Bearer" in der Kopfzeile "Authorization" der HTTP-Anfragen enthalten.

Also unten ist der Testfall. Der Fehler, den ich bekomme, ist: 401! = 200

Die Anmeldeinformationen funktionieren in jmeter ok und eine Liste der Konten wird zurückgegeben. Ich kann das RF-Skript jedoch nicht ausführen. Jede Hilfe wird geschätzt.

Im Skript

  1. Log-Konsole ${accessToken} das Zugriffstoken zurückgibt: 8ETFXTZOWQLrgsMj7c_KuCEeypdj-eO1r ...
  2. Log ${token} kehrt zur Konsole: 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 Hast du Antwort auf Ihre Frage finden, wie ich gleichen Fehler bin. bitte teilen Sie die Antwort –

+0

Sorry, ich war weg. Habe gerade diese Diskussion gesehen .... Ich werde es versuchen. –

+0

Ja, das scheint jetzt für mich zu funktionieren. Vielen Dank. Allerdings ist meine reine Python-Methode, um das Auth2-Token zu generieren, ich muss sagen viel prägnanter! –

Antwort

0

Ich verwende die OAuth 2.0-Authentifizierung auch für meine Salesforce-Automatisierung.

Meine erste Antwort wäre Client basierte Authentifizierung zu überspringen und wechseln Sie zu Benutzername/Passwort basierte Authentifizierung

 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} 

Wenn Sie mit Client-basiert oder Web-basierte Authentifizierung, wird es einen Login-Bildschirm sein, dass Will vom Nutzer verwendet werden, um seinen Nutzernamen/sein Passwort einzugeben, um die App zu autorisieren, Anfragen in ihrem Namen zu senden. Sehen Sie sich diese Seiten an, um weitere Informationen zu erhalten, da sie hauptsächlich über die Verwendung von Refresh-Tokens oder das Überspringen der Benutzereingabeaufforderung diskutieren.

Verwandte Themen