使用OAUTH2授权请求报头的Robot Framework API测试

2w3rbyxf  于 2023-08-02  发布在  其他
关注(0)|答案(2)|浏览(116)

我试图在使用OAUTH2身份验证的API上使用RequestsLibrary。
身份验证是通过OAUTH2进行的,并将凭证提供给/v1/authtoken端点。对APÍ的后续调用需要在http请求的“Authorization”报头中包含令牌作为“bearer”。
下面是测试用例。我得到的错误是:四百零一!=二百
凭证在jmeter中工作正常,并返回一个帐户列表。但是,我无法获得RF脚本的工作。任何帮助将不胜感激。
在剧本里
1.登录到控制台${accessToken}返回访问令牌:8ETFXTZOWQLrgsMj7c_KuCEeypdj-eO1r.
1.登录到控制台${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()}

字符串

p5cysglq

p5cysglq1#

我也在使用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的身份验证,则会出现一个登录屏幕,用户可使用该屏幕输入用户名/密码,以授权应用程序代表其发送请求。查看这些页面以获取更多信息,因为它们主要讨论了使用刷新令牌或完全跳过用户提示。

2ledvvac

2ledvvac2#

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

字符串

相关问题