【发布时间】:2021-05-28 03:11:52
【问题描述】:
我一直在寻找有关传递会话 Cookie 的解决方案。以下是我在 Robot Framework 中的代码
设置
Library String
Library OperatingSystem
Library Collections
Library RequestsLibrary
Library requests
***变量***
${base_url} https://api.company.net
${email} operator1@datavalidation.org
${password} Company2021
&{headers} Content-Type=application/json X-Requested-With=XMLHttpRequest
*** 测试用例 ***
Session | Login
Login
Session | My
My_Profile
*** 关键字 ***
Login
&{auth_dict}= Create Dictionary email ${email} password ${password}
Create Session loginsession ${base_url} verify=True
${response}= POST On Session loginsession /session/login json=${auth_dict}
Log ${response.json()}
#VALIDATION
${status}= Convert To String ${response.status_code}
Should Be Equal ${status} 200
${body}= Convert To String ${response.content}
Should Contain ${body} true #"status"
Should Contain ${body} abf60345-4043-4f1e-94b0-a307f9209beb #"uuid"
#GET SESSION COOKIE VALUE
${Session_cookie}= Get From Dictionary ${response.cookies} PHPSESSID
&{Cookie_value}= Create Dictionary PHPSESSID ${Session_cookie}
Set Suite Variable &{Cookie_value}
My_Profile
Create Session mysession ${base_url} cookies=&{Cookie_value} verify=True
${response}= GET On Session mysession /session/me
Log ${response.json()}
如您所见,我在 (Session | Login) 中提取了 Cookie,并尝试将其传递给以下 test cast (Session | My)。虽然,我尝试遵循语法,但我仍然无法使用会话 Cookie 访问 API。我期待着开放的建议。
谢谢。
我得到了以下输出-
20210225 18:40:51.355 : INFO :
POST Request : url=https://api.company.net/session/login
path_url=/session/login
headers={'User-Agent': 'python-requests/2.25.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '68', 'Content-Type': 'application/json'}
body=b'{"email": "operator1@company.org", "password": "Company2021"}'
20210225 18:40:51.355 : INFO :
POST Response : url=https://api-stg.hyris.net/session/login
status=200, reason=OK
headers={'Date': 'Thu, 25 Feb 2021 17:40:50 GMT', 'Content-Type': 'application/json,...'PHP/7.2.34', 'Set-Cookie': 'PHPSESSID=567ta9n28tudq00f09r9g33qfc; path=/',, PUT, POST, DELETE, OPTIONS', 'Access....'Strict-Transport-Security': 'max-age=31536000;'}
body={"ok":true,"status":200,"data":{"uuid":"abf60345-4043-4f1e-94b0-a307f9209beb",...}
20210225 18:40:51.355 : INFO : ${response} = <Response [200]>
20210225 18:40:51.355 : INFO : {'ok': True, 'status': 200, 'data': {'uuid': 'abf60345-4043-4f1e-94b0-a307f9209beb',...}
20210225 18:40:51.355 : INFO : ${status} = 200
20210225 18:40:51.355 : INFO : ${body} = {"ok":true,"status":200,"data":{"uuid":"abf60345-4043-4f1e-94b0-a307f9209beb",...}
20210225 18:40:51.355 : INFO : ${Session_cookie} = 567ta9n28tudq00f09r9g33qfc
20210225 18:40:51.355 : INFO : &{Cookie_value} = { PHPSESSID=567ta9n28tudq00f09r9g33qfc }
20210225 18:40:51.355 : INFO : &{Cookie_value} = { PHPSESSID=567ta9n28tudq00f09r9g33qfc }
Ending test: Operator.Session | Login
Starting test: Operator.Session | Me
20210225 18:40:51.355 : INFO : Creating Session using : alias=mesession, url=https://api.company.net, headers={}, cookies={'PHPSESSID': '567ta9n28tudq00f09r9g33qfc'}, auth=None, timeout=None, proxies=None, verify=True, debug=0
20210225 18:40:51.555 : INFO :
GET Request : url=https://api.company.net/session/me
path_url=/session/me
headers={'User-Agent': 'python-requests/2.25.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'PHPSESSID=567ta9n28tudq00f09r9g33qfc'}
body=None
20210225 18:40:51.555 : INFO :
GET Response : url=https://api-stg.hyris.net/session/me
status=403, reason=FORBIDDEN
headers={'Date': 'Thu, 25 Feb 2021 17:40:50 GMT', 'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', .... *"}
body={"ok":false,"status":403,"data":null,"errors":"5.95.67.44 not allowed"}
20210225 18:40:51.586 : FAIL : HTTPError: 403 Client Error: FORBIDDEN for url: https://api.company.net/session/me
Ending test: Operator.Session | Me
【问题讨论】:
标签: python-requests automated-tests robotframework