【问题标题】:Robot Framework api test with OAUTH2 Authorization Request Header使用 OAUTH2 授权请求标头的机器人框架 api 测试
【发布时间】:2019-07-23 15:47:35
【问题描述】:

我正在尝试在使用 OAUTH2 身份验证的 api 上使用 RequestsLibrary。

通过 OAUTH2 进行身份验证,并将凭据提供给 /v1/authtoken 端点。 对 APÍ 的后续调用需要将令牌作为“承载”包含在 http 请求的“授权”标头中。

所以下面是测试用例。我得到的错误是: 401 != 200

凭证在 jmeter 中工作正常,并返回帐户列表。但是,我无法让 RF 脚本工作。任何帮助将不胜感激。

在脚本中,

  1. 登录到控制台 ${accessToken} 返回访问令牌:8ETFXTZOWQLrgsMj7c_KuCEeypdj-eO1r...
  2. 登录到控制台 ${token} 返回: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()}

【问题讨论】:

  • @sandeep @Bryan 您是否找到了问题的答案,因为我遇到了同样的错误。请分享答案
  • 抱歉,我不在。刚看到这个讨论......我会试试这个。
  • 是的,这似乎对我有用。谢谢。但是,我生成auth2令牌的纯python方法是,我必须说得更简洁!

标签: frameworks robotframework oauth2


【解决方案1】:

我也在为我的销售人员自动化使用 OAuth 2.0 身份验证。

我的第一个答案是跳过基于客户端的身份验证并切换到基于用户名/密码的身份验证

      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    username=test@test.com  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}

如果您使用基于客户端或基于 Web 的身份验证,用户将使用登录屏幕输入其用户名/密码,以授权应用代表其发送请求。查看这些页面了解更多信息,因为它们主要讨论使用刷新令牌或完全跳过用户提示。

【讨论】:

    【解决方案2】:
    I have added the new answer for this question.
    
    RequestsLibrary.Create Session    OA2    <Your Server URL>    verify=${True}
    ${data}=     Create Dictionary    Token_Name=TestTokenname    grant_type=<grant type>    client_Id=<your Id>     Client_Secret=<Your client secret>    scope=<your scpe>
    ${headers}=   Create Dictionary    Content-Type=application/x-www-form-urlencoded
    
    ${resp}=    RequestsLibrary.Post Request    OA2    identity/connect/token    data=${data}    headers=${headers}
    BuiltIn.Log To Console    ${resp}
    BuiltIn.Log To Console    ${resp.status_code}
    Should Be Equal As Strings    ${resp.status_code}    200
    Dictionary Should Contain Value    ${resp.json()}   Testtokenname
    ${accessToken}=    evaluate    $resp.json().get("access_token")
    BuiltIn.Log to Console    ${accessToken}
    ${token}=    catenate    Bearer    ${accessToken}
    BuiltIn.Log to Console    ${token}
    ${headers1}=  Create Dictionary    Authorization=${token} 
    
    RequestsLibrary.Create Session    GT    <Your Server URL>    verify=${True}        
    ${resp}=  RequestsLibrary.Get Request  GT    <Your API URL>    headers=${headers1}
    Should Be Equal As Strings    ${resp.status_code}    200
    

    【讨论】:

      猜你喜欢
      • 2019-05-10
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多