python - 使用 pytest 进行 Flask 基本身份验证测试

标签 python testing flask pytest

我目前在我的项目中使用 Flask-HTTPAuth 进行基本身份验证。我已经使用 curl 和 base64 标记手动对其进行了测试,它确实有效。但是,我在创建证明它有效的测试时遇到了问题。这是我当前的测试,它总是返回 401:

类 TestLoginApi

def setup(self):
    myapp.app.config.from_object("config.TestingConfig")
    self.app = myapp.app.test_client()
    client = MongoClient(myapp.app.config['DATABASE_URL'])
    db = client.get_default_database()
    assert list(db.collection_names()) == []

    db.users.insert_one({'name': 'testuser', 'password': 'testpassword'})

def teardown(self):
    client = MongoClient(myapp.app.config['DATABASE_URL'])
    client.drop_database(client.get_default_database())

def test_not_logged_in(self):
    rv = self.app.get('/api/v1/login/')
    assert rv.status_code == 401

def test_correct_password(self):
    d = Headers()
    d.add('Authorization', 'Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk')
    rv = self.app.get('/api/v1/login/', headers=d,
        content_type='application/json')
    assert rv.status_code == 200

我还尝试更改以下内容:

def test_correct_password(self):
        d = Headers()
        d.add('Authorization', 'Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk')
        rv = self.app.get('/api/v1/login/', headers=d,
            content_type='application/json')
        assert rv.status_code == 200

对此没有成功:

def test_correct_password(self):
         rv = self.app.get('/api/v1/login/', headers={"Authorization": "Basic {user}".format(user=base64.b64encode(b"testuser:testpassword"))})
         assert rv.status_code == 200

最佳答案

您可以像这样测试授权:

import base64

valid_credentials = base64.b64encode(b"testuser:testpassword").decode("utf-8")
response = self.app.get(
    "/api/v1/login/",
    headers={"Authorization": "Basic " + valid_credentials}
)
assert response.status_code == 200

我想你会喜欢 my github project ,其中有大量针对 Flask-HTTPAuth 的不同测试。

关于python - 使用 pytest 进行 Flask 基本身份验证测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452580/

相关文章:

javascript - 如何使用 Protractor 配置文件的参数来选择步骤?

testing - 机器人框架 - 区分大小写

python - 为 Python 2.4 即兴替换 "with"语句

python - XPath和Scrapy-当标签的深度和数量不一致时,会取消链接

c# - 在 .Net 中测试复杂的 T-SQL 脚本?

python - 从字符串到 sympy 表达式

python - Flask Form将数据发布到另一个html页面

python - 你如何让 Gunicorn + Flask 通过 https 提供静态文件?

Python Pandas,将字符串列导出到 Excel 文件中

python - 实现 scikit-learn 机器学习算法