簡體   English   中英

python - 使用 pytest 進行 Flask 基本身份驗證測試

[英]python - Flask basic auth testing with 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

我想你會喜歡我的 github 項目,它有大量不同的 Flask-HTTPAuth 測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM