Frameworks 具有OAUTH2授权请求头的Robot框架api测试

Frameworks 具有OAUTH2授权请求头的Robot框架api测试,frameworks,robotframework,oauth2,Frameworks,Robotframework,Oauth2,我试图在使用OAUTH2身份验证的api上使用RequestsLibrary 通过OAUTH2进行身份验证,并将凭据提供给/v1/authtoken端点。 对APÍ的后续调用需要在http请求的“授权”报头中包含作为“承载者”的令牌 下面是测试用例。我得到的错误是: 401 != 二百 凭证在jmeter中正常工作,并返回帐户列表。但是,我无法让RF脚本工作。任何帮助都将不胜感激 在剧本中, 登录控制台${accessToken}返回访问令牌:8ETFXTZOWQLrgsMj7c_KuCEeyp

我试图在使用OAUTH2身份验证的api上使用RequestsLibrary

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

下面是测试用例。我得到的错误是: 401 != 二百

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

在剧本中,

  • 登录控制台
    ${accessToken}
    返回访问令牌:8ETFXTZOWQLrgsMj7c_KuCEeypdj-eO1r
  • 登录到控制台
    ${token}
    返回:Bearer 8ETFXTZOWQLrgsMj7c_KuCEeypdj-eO1r


  • 我的salesforce自动化也使用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}
    
    通过密码身份验证获取authToken
    创建会话钩子https:///services/oauth2  验证=${True}
    ${data}=Create Dictionary grant\u type=password client\u id=1abc client\u secret=2abc username=test@test.com密码=钥匙通行证
    ${headers}=Create Dictionary Content Type=application/x-www-form-urlencoded
    ${resp}=RequestsLibrary.Post请求钩子/令牌数据=${data}头=${headers}
    应等于字符串${resp.status_code}200
    ${accessToken}=evaluate$resp.json().get(“访问令牌”)
    登录到控制台${accessToken}
    
    如果您使用的是基于客户端或基于web的身份验证,则用户将使用登录屏幕输入用户名/密码,以授权应用程序代表其发送请求。查看这些页面以了解更多信息,因为它们主要讨论使用刷新令牌或完全跳过用户提示

    我为这个问题添加了新的答案。
    RequestsLibrary.Create会话OA2 verify=${True}
    ${data}=Create Dictionary-Token\u-Name=TestTokenname-grant\u-type=client\u-Id=client\u-Secret=scope=
    ${headers}=Create Dictionary Content Type=application/x-www-form-urlencoded
    ${resp}=RequestsLibrary.Post请求OA2标识/connect/token数据=${data}头=${headers}
    控制台${resp}的内置.Log
    控制台的内置日志${resp.status\u code}
    应等于字符串${resp.status_code}200
    字典应包含值${resp.json()}Testtokenname
    ${accessToken}=evaluate$resp.json().get(“访问令牌”)
    控制台${accessToken}的内置.Log
    ${token}=catenate承载${accessToken}
    控制台${token}的BuiltIn.Log
    ${headers1}=创建字典授权=${token}
    RequestsLibrary.Create Session GT verify=${True}
    ${resp}=RequestsLibrary.Get请求GT头=${headers1}
    应等于字符串${resp.status_code}200
    
    @sandeep@Bryan当我遇到同样的错误时,您是否找到了问题的答案。请分享答案对不起,我不在。刚才看到这个讨论。。。。我会试试这个。是的,这对我来说似乎很管用。谢谢然而,我生成auth2令牌的纯python方法是,我必须说得更简洁!
          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}
    
    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