python - 使用请求库进行验收测试 (python)

标签 python httprequest python-requests acceptance-testing

我在使用请求库编写登录功能的验收测试时遇到问题。登录是使用 post 方法实现的,我无法直接更改查询字符串并操作 url。我想做的是手动提交帖子数据,并将页面重定向到用户成功登录后会定期访问的页面。我想检索该页面的 html 并检查是否成功登录,如何我会这样做吗?

此方法失败:

data={'email': '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6a0f120b071a060f2a0f120b071a060f44090507" rel="noreferrer noopener nofollow">[email protected]</a>', 'password': 'example'}

login_url="examplepage.com/signin"

request_data = requests.post(login_url, data, allow_redirects=True)

print request_data.content

这是 resp.headers 返回的内容:

{'content-length': '1124', 'date': '2013 年 4 月 14 日星期日 16:12:51 GMT', 'set-cookie': 'session="+udnwfCkuAuFGp9QKOiU1YS2X1s=?_fresh =STAwCi4=&_id=Uyc3XHhkZVx4Y2J3T1x4YjBceDkxeFx4MWNceGFhXHhkNFx4OTMhKVx4MGJyJwpwMQou&csrf=Uyc2Mzk0YjVjZjMzMGZkMTNkY2NiM2EzZTZkYzgyMjhkY2IwOWQ2NmM3 JwpwMQou";路径=/; HttpOnly', '内容类型': '文本/html; charset=utf-8', '连接': '保持事件', '服务器': 'Werkzeug/0.8.3 Python/2.7.3'}

resp.content 仅返回登录页面的 html:

    <title>Web App</title>

  </head>
  <body>
    <div>Web App: <a href="/home">Home</a>

            | <a href="/signin">Login</a>
            | <a href="/register">Register</a>

    </div>
    <hr>




<h1>Sign in</h1>


<form action="" method=post name="signin">
    <div style="display:none;"><input id="csrf_token" name="csrf_token" type="hidden" value="20130414164251##fd7e82d47974518d098b41cecf2a4452f890317f"></div>
  <dl>

  <dt><label for="email">Email Address</label>
  <dd><input id="email" name="email" type="text" value="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8aeff2ebe7fae6efcaeff2ebe7fae6efa4e9e5e7" rel="noreferrer noopener nofollow">[email protected]</a>">

  </dd>


  <dt><label for="password">Password</label>
  <dd><input id="password" name="password" type="password" value="">

  </dd>

  </dl>
  <p><input type="submit" value="Sign in">
</form>

<a href="/login"> Click here to sign in using your Google, Yahoo, AOL, Flickr, or another OpenID account. </a>


  </body>
</html>

最佳答案

如果您想登录页面,我建议您创建 session ,尽管存在独立请求。如果您正确发送数据,您应该检索一些 session cookie。我会检查它以确保您已登录。当脚本登录并获取 cookie 时,它​​还应该检索包含目标页面的 Location header 。尝试这样的事情:

import requests
data={'email': '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="91f4e9f0fce1fdf4d1f4e9f0fce1fdf4bff2fefc" rel="noreferrer noopener nofollow">[email protected]</a>', 'password': 'example'}
login_url="examplepage.com/signin"
s = requests.session()
resp = s.post(login_url,data)
#now s.cookies should contain session cookie if properly logged in
target = s.get(resp.headers['Location'])

但我认为问题可能与 session 有关。

关于python - 使用请求库进行验收测试 (python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911608/

相关文章:

python - 我怎么能把我的 python 命令行工具分享到野外

python - numpy 数组可以是 pandas 数据框中的元素吗?

python - 如何在 numpy 中推广元素矩阵运算

asp.net - XMLHttpRequest 与 HttpRequest

python - 无法使用 Python 请求通过网络 Hook 将图像发布到 Slack channel

python - 在未来回调中调用 future 结果时 ThreadPoolExecutor 挂起

python-2.7 - 如何在 python 请求中使用 Splash?

python - 乘以多列 Pandas

css - 加载条件样式表是否会导致额外的服务器请求

java - 多部分 Http 请求