我编写了一个使用请求库来测试Flask应用程序的python脚本。
在测试登录机制时,脚本无法区分成功的登录尝试和失败的登录尝试。 HTTP POST请求始终返回200 HTTP状态代码。
在安装的服务器端,成功登录用户的尝试记录为状态代码302,因为我在登录后将用户重定向到首页。
测试人员代码(具有正确的用户凭据):
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<div class="container text-center">
<div class="custom-control d-inline-block custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck1">
<label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
</div>
</div>
服务器日志:
>>> import requests
>>> from utils import retrieve_csrf_token
>>> url = 'http://localhost:5000/login'
>>> token = retrieve_csrf_token(url)
>>> session = requests.Session()
>>> r = session.post(url, data={'email':'admin@test.com','password':'123456','csrf_token':token})
>>> r.status_code
>>> 200
编辑:
进一步检查后,我注意到在发送POST请求后,Valid form submitted
127.0.0.1 - - [29/Dec/2018 17:33:32] "POST /login HTTP/1.1" 302 -
127.0.0.1 - - [29/Dec/2018 17:33:32] "GET /home HTTP/1.1" 200 -
127.0.0.1 - - [29/Dec/2018 17:33:32] "GET /favicon.ico HTTP/1.1" 404 -
中的响应是主页源代码。
使用代理执行相同的步骤,或者使用Chrome Developer工具检查请求,我会看到正确的代码。
答案 0 :(得分:2)
我不确定测试代码中的“会话”对象是做什么的,但是如果您不希望不遵循重定向(以便为您提供实际的状态代码),通常会这样做:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.allowsSelection = true
self.tableView.delegate = self
}
文档:http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history