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