python - 当用户名和密码经过 URL 编码时,Flask 测试不会填充 request.authorization

标签 python testing flask

我正在尝试使用以下测试:

def post_webhook(self, payload, **kwargs):
    webhook_username = 'test'
    webhook_password = 'test'

    webhook_url = 'http://{}:{}@localhost:8000/webhook_receive'
    webhook_receive = self.app.post(
        webhook_url.format(webhook_username, webhook_password),
        referrer='http://localhost:8000',
        json=payload)
    return webhook_receive.status_code

然而,主要问题是 request.authorizationNone .虽然如果我启动服务器并使用 curl -X POST <webhook_url>requests.post(<webhook_url>) , 然后 request.authorization已正确填充。

试图弄清楚如何解决这个问题的主要问题。

最佳答案

使用 snippet代码和 Flask Test Client ,下一个 pytest 代码对我有用。我发送 HTTP Basic Auth 的方式与 curl 和 HTTPie 发送它的方式相同;在 Authorization header 中使用 base64 编码的用户和密码。

import base64
from app import app

def test_secret_endpoint():
    client = app.test_client()

    # testing a route without authentication required
    rv = client.get('/')
    assert rv.status_code == 200

    # testing a secured route without credentials
    rv = client.post('/secret-page')
    assert rv.status_code == 401

    # testing a secured route with valid credentials
    value = base64.encodestring('admin:secret').replace('\n', '')

    headers = {'Authorization': 'Basic {}'.format(value)}

    rv = client.post('/secret-page', headers=headers)
    assert rv.status_code == 200
    assert 'This is secret' in rv.data

路由定义是:

@app.route('/')
def index():
    return 'Hello World :)'


@app.route('/secret-page', methods=['POST'])
@requires_auth
def secret_page():
    return 'This is secret'

发送凭据的请求 header 如下所示:

POST /secret-page HTTP/1.1
Accept: */*
Authorization: Basic YWRtaW46c2VjcmV0
Connection: keep-alive
Content-Length: 0
Host: localhost:5000
...

关于python - 当用户名和密码经过 URL 编码时,Flask 测试不会填充 request.authorization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39925335/

相关文章:

testing - 没有这样的元素 : Unable to locate element: {"method" :"css selector" ,"selector" :".flexipageTabset>.uiTabBar.uiTabItem.title"}

测试密码学中已实现的算法

performance - 衡量 ec2 实例之间 tcp 性能的正确方法

javascript - 如何在前端JavaScript中访问Python(Flask)传递的数组(JSON)?

python - 仍然没有适用于 Python 3(或 3.3)的 wxPython?

python - 初学者想知道他的代码是否是 'Pythonic'

python - HTML Django 1.10 中模型中的图像

python - 删除和重新插入空格

flask - 如何将所有端点标记为@login_required

python - 是否可以使用 Flask 微框架与循环同时运行 Web 服务器?